Dubbo面试回答简单版

一、dubbo特性

  1. 超时重试机制
  2. 地址缓存
  3. 多版本
  4. 负载均衡:随机、权重轮询、最少活跃调用、一致性哈希
  5. 集群容错:失败重试、快速失败、失败安全、失败自动恢复、并行调用、广播
  6. 服务降级:异常时返回mock

集群容错

FailOver 失败重试,读操作
FailFast 快速失败,只调用一次,失败后立即抛出异常。 写操作
FailSafe 失败安全 出现异常 直接忽略,记录日志不抛出异常,返回空结果
failBack 失败自动恢复,失败后记录日志和调用信息,返回空结果,每隔5秒重试
forking 并行调用,有一个结果返回就返回成功
广播,逐个调用,其中有一个失败,抛出异常

二、服务暴露

简单的很:IOC实例化bean后,事件启动后-》根据配置获取url-》根据URL获取实现类->动态封装实现类->暴露出invoker-》封装成exporter等待消费者调用-》注册信息到注册中心

首先,服务器端(服务提供者)在框架启动时,会初始化服务实例,通过Proxy组件调 用具体协议(Protocol ),把服务端要暴露的接口封装成Invoker (真实类型是 AbstractProxylnvoker ,然后转换成Exporter,这个时候框架会打开服务端口等并记录服务实例 到内存中,最后通过Registry把服务元数据注册到注册中心。这就是服务端(服务提供者)整 个接口暴露的过程。

Proxy组件:我们知道,Dubbo中只需要引用一个接口就可以调用远程的服务,并且
只需要像调用本地方法一样调用即可。其实是Dubbo框架为我们生成了代理类,调用
的方法其实是Proxy组件生成的代理方法,会自动发起远程/本地调用,并返回结果,
整个过程对用户完全透明。
• Protocol:顾名思义,协议就是对数据格式的一种约定。它可以把我们对接口的配置,
根据不同的协议转换成不同的Invoker对象。例如:用DubboProtocol可以把XML文
件中一个远程接口的配置转换成一个Dubbolnvoker。
• Exporter:用于暴露到注册中心的对象,它的内部属性持有了 Invoker对象,我们可以
认为它在Invoker上包了 一层。
• Registry:把Exporter注册到注册中心。

服务调用

调用之前生成的代理类,从cluster中经过负载均衡等选择一个invoker进行调用,会记录请求和请求id,服务端根据参数选择exporter,调用真正的实现类,得到结果后,根据请求id将结果放到等待的线程中,消费者最后得到响应。

服务引入

ReferenceBean实现了FactoryBean接口,当对任意服务Interface进行自动注入或者getBean获取时,就会触发getObject()函数的服务引用过程。-》获取注册中心实例-》向注册中心注册自己,并订阅provoder configurator router 节点-》触发invoker的生产:cluster将多个服务调用者进行封装返回i一个invoker-》通过配置map构建url,再根据url上的协议调用其refer获得invoker-》构建代理,封装invoker返回代理类给consumer调用

分层

在这里插入图片描述
在这里插入图片描述

工作流程

在这里插入图片描述
节点角色说明:
Provider:暴露服务的服务提供方。
Consumer::调用远程服务的服务消费方。
Registry:服务注册与发现的注册中心。
Monitor:统计服务的调用次调和调用时间的监控中心。
Container:服务运行容器。
调用关系说明:
0.服务容器负责启动,加载,运行服务提供者。
1.服务提供者在启动时,向注册中心注册自己提供的服务。
2.服务消费者在启动时,向注册中心订阅自己所需的服务。
3.注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4.服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5.服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送次统计数据到监控中心。

配置中心的订阅/发布

订阅通常有pull和push两种方式,一种是客户端定时轮询注册中心拉取配置,另一种是注册中心主动推送数据给客户端。这两种方式各有利弊,Dubbo采用的是第一次启动拉取方
式,后续接收事件重新拉取数据。

在服务暴露时,服务端会订阅configurators用于监听动态配置,在消费端启动时,消费端会订阅providers、routers和configuratops这三个目录,分别对应服务提供者、路由和动
态配置变更通知。

ZooKeeper注册中心采用的是“事件通知” + “客户端拉取”的方式,客户端在第一次连接上注册中心时,会获取对应目录下全量的数据。并在订阅的节点上注册一个watcher,客户端与
注册中心之间保持TCP长连接,后续每个节点有任何数据变化的时候,注册中心会根据watcher的回调主动通知客户端(事件通知),客户端接到通知后,会把对应节点下的全量数据都拉取过

来(客户端拉取),这一点在NotifyListener#notify List urls 接口上就有约束的注释说明。全量拉取有一个局限,当微服务节点较多时会对网络造成很大的压力。

zk集群挂掉,provider和consumer还能通信吗

可以,因为当启动dubbo容器时,消费者会去zookeeper拉取注册的生产者地址列表,并将其缓存在本地。每次发起调用时,都会按照本地的地址列表,以负载均衡的策略去进行调用。但是zookeeper挂掉则后续新的生产者无法被消费
者发现。
1、注册中心对等集群,任意一台宕掉后,会自动切换到另一台
2、注册中心全部宕掉,服务提供者和消费者仍可以通过本地缓存通讯
3、服务提供者无状态,任一台宕机后,不影响使用
4、服务提供者全部宕机,服务消费者会无法使用,并无限次重连等待服务者恢复

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/542933.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Matlab之空间坐标系绘制平面图形

在空间直角坐标系中,绘制指定平面方程的图形 版本说明: 20240413_V1.01:更正代码错误,并修改输入参数类型(测试用例得修改) 20240413_V1.00:初始版本 一、平面方程 基本形式为:A…

微服务边车模式深度解析:赋能云原生应用的终极指南(自己搞一个简单SideCar?)

什么是SideCar? Sidecar模式定义: Sidecar 模式是一种常用于微服务架构中的设计模式,该模式允许将应用程序的核心功能与辅助功能(如日志记录、监控、配置管理、网络通信等)分离开来。在这种设计模式中,每个微服务主容…

回归预测 | Matlab基于RIME-SVR霜冰算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于RIME-SVR霜冰算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于RIME-SVR霜冰算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于RIME-SVR霜冰算法优化支持向量机的数…

【数据结构】习题之消失的数字和轮转数组

👑个人主页:啊Q闻 🎇收录专栏:《数据结构》 🎉前路漫漫亦灿灿 前言 消失的数字这道题目我会和大家分享三种思路。 还有一道题目是轮转数组,,也会分享三种思路,大…

照片和视频一键换脸,ROOP ROPE FaceFusion 中文版汉化版整合包下载安装

AI 人脸替换工具离线版下载地址:点击下载 AI 人脸替换工具离线版,将视频和图片的面孔替换为您选择的面孔。您只需要一张所需脸部的图像。没有数据集,就没有训练。工具包含 ROOP ROPE FaceFusion 三款人脸替换工具解压即用无需安装。 汉化整合…

【SpringBoot实战篇】注册接口

💕🌸🍀开发接口的流程:明确需求 -》阅读接口文档-》思路分析-》开发-》测试🍀🌸💕 开始前小知识-配置lombok👈🍀 lombok 在编译阶段,为实体类自动生成setter getter toSt…

教你将配置好的conda环境迁移到其它设备

文章目录 问题分析存在的方法环境要求方法步骤1. 下载conda pack2. 打包原环境3. 新设备还原环境4. 查看环境 问题分析 好不容易配置好的conda环境,要在另一个设备上运行,还要重新配置,好麻烦。 存在的方法 pip install -r requirement.txt …

一.表单校验

为什么要表单验证? 是为了减轻服务器的压力,让用户体验更好,保证输入的数据符合要求 常用的表单验证 日期格式 表单元素是否为空 用户名和密码 E-mail 地址 身份证号码 实现验证的思路 问题:当输入的表单数据不符合要求时&…

【在线服务,如何做网络加速】

为什么需要 ToC的业务,由于服务直接提供给用户使用,所以对服务的时延,平响要求比较高。如果因为跨地域的网络传输而造成较高时延,而用户有感的话体验不好,这个时候则需要做网络加速。 服务网络加速 开始之前 先考虑…

下单后快团团团长如何隐藏跟团人/团员/顾客的信息?

一、功能说明 有的团长不希望展示顾客跟单购买的信息,可以通过设置显示匿名头像微信名匿名隐藏。 二、具体操作步骤 在团购设置中点击“更多团购设置”,再点击“隐私设置”,在这里可以设置跟团人的展示信息。 注意1: 当跟团人显…

unity动画的关键帧添加event-同步语音

在iclone中做的语音嘴型动画,因是用下图自带的方式语音生成的动画,而不是用plugin(面捕live会连同语音一起导出),所以导出来到Unity中,之后口型、动作、表情等没有声音。 我需要把原有的语音也重新在unity中加载上,原来…

【HTML】简单制作一个唱片动画效果

目录 前言 开始 HTML部分 CSS部分 效果图 总结 前言 无需多言,本文将详细介绍一段代码,具体内容如下: 开始 首先新建文件夹,创建两个文本文档,其中HTML的文件名改为[index.html],CSS的…

python+playwright 学习-88 禁止加载图片等资源

前言 对于爬虫的小伙伴来说,有时候只需抓取页面的文本,不用加载图片,可以加快操作页面速度,那么我们可以设置禁止加载图片等资源。 禁止图片加载 根据url地址的后缀,图片资源后缀一般是png,jpg,jpeg,gif等格式。 from playwright.sync_api import sync_playwrightwith…

二叉树例题分享

文章目录 二叉树例题分享[235. 二叉搜索树的最近公共祖先](https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/)[701. 二叉搜索树中的插入操作](https://leetcode.cn/problems/insert-into-a-binary-search-tree/)[108. 将有序数组转换为二叉搜索树…

Pixel 手机上连接提示受阻,无法上网-解决方法

命令行中输入 adb shell settings delete global captive_portal_https_urladb shell settings delete global captive_portal_http_url输入服务器信息 adb shell settings put global captive_portal_http_url http://connect.rom.miui.com/generate_204adb shell settings …

【Canvas与艺术】绘制方形斜纹生化危险Biohazard标志

【关键点】 绘制切角矩形、三角形比较费工&#xff0c;有时间可以把相关代码做成函数。 【成果图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <…

【Golang学习笔记】从零开始搭建一个Web框架(四)

文章目录 模板渲染静态文件支持HTML 模板渲染 错误恢复完结撒花~~ 前情提示&#xff1a; 【Golang学习笔记】从零开始搭建一个Web框架&#xff08;一&#xff09;-CSDN博客 【Golang学习笔记】从零开始搭建一个Web框架&#xff08;二&#xff09;-CSDN博客 【Golang学习笔记】从…

ChatGLM3初体验

mac本地化部署ChatGLM3 写在前面环境准备1. python环境2. 安装第三方依赖torch3.下载模型 代码准备1.clone代码 run效果 写在前面 建议直接去看官方文档 https://github.com/THUDM/ChatGLM3?tabreadme-ov-file 环境准备 1. python环境 python -V ## 3.11.42. 安装第三方依…

怎么提升公众号上限

正常可以申请多少个公众号&#xff1f;目前如果我们是企业主体的话&#xff08;包括个体户&#xff09;&#xff0c;申请公众号默认是可以申请2个公众号数量的。不过对于很多公司来说&#xff0c;2个公众号的数量肯定是远远不够用的&#xff0c;不同的产品不同品牌不同部门都可…

倍增法学习

这里i为开始下标&#xff0c;j是2的次幂