Dubbo面试回答简单版

news2024/11/29 6:31:13

一、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、服务提供者全部宕机,服务消费者会无法使用,并无限次重连等待服务者恢复

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s基础入门

前言 开始学习K8S了,下面就是笔记整理 简介 k8s是谷歌开源得容器管理系统,主要功能包括 基于容器得应用部署,维护和滚动升级负载均衡和服务发现跨机器和跨地区得集群调度自动伸缩无状态服务和有状态服务广泛得Volume支持插件保持扩展性 …

【MySQL | 第六篇】数据库三大范式

文章目录 6.数据库设计三大范式6.1第一范式6.2第二范式6.3第三范式6.4反范式设计 6.数据库设计三大范式 6.1第一范式 第一范式(1NF):确保每列的原子性(强调的是列的原子性,即列不能够再分成其他几列)。实际上,第一范式…

探索C++:深入了解这门古老而强大的编程语言

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

隐私计算实训营第九讲-隐语多方安全计算在安全核对的行业实践

隐私计算实训营第九讲-隐语多方安全计算在安全核对的行业实践 文章目录 隐私计算实训营第九讲-隐语多方安全计算在安全核对的行业实践1.业务背景:安全核对产生的土壤1.1相关政策出台1.2 数据差异的来源 2.产品方案:从试点到规模化的路3.技术共建&#xf…

RAKsmart:硅谷裸机云多IP服务器性能评测

在云计算领域,裸机云作为一种结合了传统物理服务器与云计算优势的服务模式,近年来备受关注。硅谷裸机云作为业界佼佼者,以其出色的性能和稳定性赢得了众多用户的青睐。今天,我们就来评测一下硅谷裸机云的多IP服务器性能。 首先&am…

操作系统再理解

目录 1、概念 2、操作系统的结构 3、对操作系统的理解(管理角度) 4、OS对硬件是怎么管理的? 1、概念 操作系统是一款进行软硬件资源管理的软件 广义的认识:操作系统的内核操作系统的外壳周边程序(用户提供使用操作…

mysql的下载、安装

首先进入官网:MySQL 点击“downloads”进入下载界面 2.往下滑动滚轮,点击“mysql community...(公开版)” 3.往下滑,找到并单击“install for Windows” 4.选择版本:初学者可以使用较低版本,较…

Java:定时任务无法正常执行(scheduling + ShedLock)

目录 一、场景二、代码片段三、排查四、原因五、解决 一、场景 1、使用定时任务(scheduling) 分布式锁(ShedLock)定期执行一段代码 2、configureTasks()对于任务执行周期的更新是正常的 3、但任务方法无法被执行 二、代码片段 三、排查 1、确认Trigger没有问题 2、查看red…

Mac用户必备神器:Default Folder X,让文件操作更快捷、更智能!

Default Folder X for Mac是一款功能强大的文件管理辅助工具,它为Mac用户带来了前所未有的文件操作体验。🌟 无论是日常办公、学习还是娱乐,Default Folder X都能帮助你更高效地管理文件,让你的工作更加得心应手。💼 …

java-spring 图灵 02 手写spring

01.idea中创建一个maven管理的空项目 02.模拟创建出spring容器类,这里叫wzpApplicationContext,创建的时候会自动加载配置类的数据: 这里wzpApplicationContext对标的是AnnotationConfigApplicationContext public class wzpApplicationCo…

【算法刷题 | 回溯思想 04】4.15(分割回文串)

文章目录 7.分割回文串7.1题目7.2解法:回溯7.2.1回溯思路(1)函数返回值以及参数(2)终止条件(3)遍历过程 7.2.2代码 7.分割回文串 7.1题目 给你一个字符串 s,请你将 s 分割成一些子…

鸿蒙原生应用再新丁!企查查 碧蓝航线 入局鸿蒙

鸿蒙原生应用再新丁!企查查 碧蓝航线 入局鸿蒙 来自 HarmonyOS 微博13日消息,碧蓝航线 将启动鸿蒙原生应用开发,双方将基于HarmonyOS NEXT鸿蒙星河版的原生流畅等特性,进一步提升游戏流畅度和画面精美度,为用户提供更…

汽车零部件制造迎来智能化升级,3D视觉定位系统助力无人化生产线建设

随着新能源汽车市场的蓬勃发展,汽车零部件制造行业正面临着前所未有的机遇与挑战。为了提高产能和产品加工精度,某专业铝合金汽车零部件制造商决定引进智能生产线,其中,对成垛摆放的变速箱壳体进行机床上料成为关键一环。 传统的上…

iframe嵌入海康威视摄像头监控视频画面

前言:海康威视有非常好的开放平台支持(海康开放平台),如遇到技术问题,可以先花点时间在开放平台视频教程板块学习一下。直接问客服可能会比较懵,而且sdk客服和api客服互相分离,一开始可能都不知道问谁。 在开放平台上…

《二》Qt Creator工具介绍与使用

一、关于界面 点击文件--->新建文件或项目会出现如下图: 我们选择第一个 点击下一步下一步: 继续下一步直到结束: 二,具体文件介绍 我们点击pro查看以下 QT core gui第1行 表示使用qt的core和gui库,如果以后…

【JAVA基础篇教学】第十四篇:Java中设计模式

博主打算从0-1讲解下java基础教学,今天教学第十四篇:Java中设计模式。 设计模式是解决软件设计中常见问题的可重复利用的解决方案。在 Java 中,常见的设计模式包括单例模式、工厂模式、观察者模式等。目前在基础教学篇中只展示常见的几种模…

背会这套面试八股文!还怕拿不到offer吗?

给各位小伙伴总结了软件测试的高频面试题,其中包含了多个方面的知识点,包括: 测试基础(102页) Linux基础(38页) MySQL (63页) ️ web测试(28页) APP测试(38页) selenium相关(50页) 性能测试(55页) 数据结构跟算法(51页) 大厂逻辑题(…

图深度学习(一):介绍与概念

目录 一、介绍 二、图的数据结构 三、图深度学习的基本模型 四、图深度学习的基本操作和概念 五、训练过程 六、主要应用场景 七、总结 一、介绍 图深度学习是将深度学习应用于图形数据结构的领域,它结合了图论的概念和深度学习的技术,用以处理和…

二叉树的创建和遍历(java)

简介 二叉树是一种常见的树形数据结构,它由节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点。这些节点以层次结构的方式组织在一起,每个节点都有一个父节点,除了根节点外,每个节点都有一个…

SpringBoot配置profile

一、profile简介 我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就…