dubbo的工作原理[通俗易懂]

转载地址:https://blog.csdn.net/A_BlackMoon/article/details/85609328dubbo的工作原理1、面试题说一下的dubbo的工作原理?注册中心挂了可以继续通信吗?说说一次rpc请求的流程?2、面试官心里分析MQ、ES、Redis、Dubbo,上来先问你一些思考的问题,原理(kafka高可用架构原理、es分布式架构原理、redis线程模型…

大家好,又见面了,我是你们的朋友全栈君。

转载地址:https://blog.csdn.net/A_BlackMoon/article/details/85609328;https://blog.csdn.net/Cs_orange/article/details/82313866

dubbo的工作原理

1、面试题

说一下的dubbo的工作原理?注册中心挂了可以继续通信吗?说说一次rpc请求的流程?

2、面试官心里分析

MQ、ES、Redis、Dubbo,上来先问你一些思考的问题,原理(kafka高可用架构原理、es分布式架构原理、redis线程模型原理、Dubbo工作原理),生产环境里可能会碰到的一些问题(每种技术引入之后生产环境都可能会碰到一些问题),系统设计(设计MQ,设计搜索引擎,设计一个缓存,设计rpc框架),

当然比如说,hard面试官,死扣,结合项目死扣细节,百度(深入底层,基础性),阿里(结合项目死扣细节,扣很深的技术底层),小米(数据结构和算法)。

那既然开始聊分布式系统了,自然重点先聊聊dubbo了,毕竟dubbo是目前事实上大部分公司的分布式系统的rpc框架标准,基于dubbo也可以构建一整套的微服务架构。但是需要自己大量开发。

当然去年开始spring cloud非常火,现在大量的公司开始转向spring cloud了,spring cloud人家毕竟是微服务架构的全家桶式的这么一个东西。但是因为很多公司还在用dubbo,所以dubbo肯定会是目前面试的重点,何况人家dubbo现在重启开源社区维护了,未来应该也还是有一定市场和地位的。

既然聊dubbo,那肯定是先从dubbo原理开始聊了,你先说说dubbo支撑rpc分布式调用的架构是啥,然后说说一次rpc请求dubbo是怎么给你完成的,对吧。

3、面试题剖析

(1)dubbo工作原理

第一层:service层,接口层,给服务提供者和消费者来实现的
第二层:config层,配置层,主要是对dubbo进行各种配置的
第三层:proxy层,服务代理层,透明生成客户端的stub和服务单的skeleton
第四层:registry层,服务注册层,负责服务的注册与发现
第五层:cluster层,集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务
第六层:monitor层,监控层,对rpc接口的调用次数和调用时间进行监控
第七层:protocol层,远程调用层,封装rpc调用
第八层:exchange层,信息交换层,封装请求响应模式,同步转异步
第九层:transport层,网络传输层,抽象mina和netty为统一接口
第十层:serialize层,数据序列化层

工作流程:

1)第一步,provider向注册中心去注册
2)第二步,consumer从注册中心订阅服务,注册中心会通知consumer注册好的服务
3)第三步,consumer调用provider
4)第四步,consumer和provider都异步的通知监控中心

在这里插入图片描述

dubbo的工作原理.png

(2)注册中心挂了可以继续通信吗?

可以,因为刚开始初始化的时候,消费者会将提供者的地址等信息拉取到本地缓存,所以注册中心挂了可以继续通信。

(3)Dubbo的执行流程:

项目一启动,加载配置文件的时候,就会初始化,服务的提供方ServiceProvider就会向注册中心注册自己提供的服务,当消费者在启动时,就会向注册中心订阅自己所需要的服务,如果服务提供方有数据变更等,注册中心将基于长连接的形式推送变更数据给消费者。
默认使用Dubbo协议:
连接个数:单连接
连接方式:长连接
传输协议:TCP
传输方式:NIO异步传输
序列化:Hessian二进制序列化
适用范围:传入传出参数数据包较小(建议小于100K),消费者比提供者个数多,单一消费者无法压满提供者,尽量不要使用dubbo协议传输大文件或超大字符串
使用场景:常规远程服务方法调用
从上面的适用范围总结,dubbo适合小数据量大并发的服务调用,以及消费者机器远大于生产者机器数的情况,不适合传输大数据量的服务比如文件、视频等,除非请求量很低。

(4)Dubbo的安全性如何得到保障:
a.在有注册中心的情况下,可以通过dubbbo admin中的路由规则,来指定固定ip的消费方来访问
b.在直连的情况下,通过在服务的提供方中设置密码(令牌)token,消费方需要在消费时也输入这 个密码,才能够正确使用。
Dubbo添加服务ip白名单,防止不法调用

(5)Duubo中如何保证分布式事务?
一般情况下,我们尽量将需要事务的方法放在一个service中,从而避开分步式事务。
Dubbo底层是基于socket: Socket通信是一个全双工的方式,如果有多个线程同时进行远程方法调用,这时建立在client server之间的socket连接上会有很多双方发送的消息传递,前后顺序也可能是乱七八糟的,server处理完结果后,将结果消息发送给client,client收到很多消息,怎么知道哪个消息结果是原先哪个线程调用的?
答:使用一个ID,让其唯一,然后传递给服务端,再服务端又回传回来,这样就知道结果是原先哪个线程的了。

(6)Dubbo的心跳机制:
目的:
维持provider和consumer之间的长连接
实现:
dubbo心跳时间heartbeat默认是1s,超过heartbeat时间没有收到消息,就发送心跳消 息(provider,consumer一样),如果连着3次(heartbeatTimeout为heartbeat*3)没有收到心跳响应,provider会关闭channel,而consumer会进行重连;不论是provider还是consumer的心跳检测都是通过启动定时任务的方式实现;

Dubbo的zookeeper做注册中心,如果注册中心全部挂掉,发布者和订阅者还能通信吗?
可以通信的,启动dubbo时,消费者会从zk拉取注册的生产者的地址接口等数据,缓存在本地。每次调用时,按照本地存储的地址进行调用;
注册中心对等集群,任意一台宕机后,将会切换到另一台;注册中心全部宕机后,服务的提供者和消费者仍能通过本地缓存通讯。服务提供者无状态,任一台 宕机后,不影响使用;服务提供者全部宕机,服务消费者会无法使用,并无限次重连等待服务者恢复;
挂掉是不要紧的,但前提是你没有增加新的服务,如果你要调用新的服务,则是不能办到的。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125266.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • oracle删除锁表_oracle清理数据文件

    oracle删除锁表_oracle清理数据文件查看Oracle数据库被锁住的表,删除锁表的进程–1.查看被锁住的表SELECTdob.object_nametable_name,lo.locked_mode,lo.session_id,vss.serial#,vss.actionaction,vss.osuserosuser,vss.logon_time,vss.processap_pid,

  • oracle启动时必须启动哪两个服务_富士康的领导

    oracle启动时必须启动哪两个服务_富士康的领导七个服务的含义分别为:1.OracleORCLVSSWriterService:Oracle卷映射拷贝写入服务,VSS(VolumeShadowCopyService)能够让存储基础设备(比如磁盘,阵列等)创建高保真的时间点映像,即映射拷贝(shadowcopy)。它可以在多卷或者单个卷上创建映射拷贝,同时不会影响到系统的系统能。(非必须启动)2.OracleDBConsole…

  • zigbee学习之路(十二):zigbee协议原理介绍

    zigbee学习之路(十二):zigbee协议原理介绍一.前言从今天开始,我们要正式开始进行zigbee相关的通信实验了,我所使用的协议栈是ZStack是TIZStack-CC2530-2.3.0-1.4.0版本,大家也可以从TI的官网上直接下载T

  • XML: 使用XmlDocument 与 XmlReader 类

    XML: 使用XmlDocument 与 XmlReader 类一.XmlDocument类:XmlDocument与XmlReader类从.NET1.0就已经存在了。W3C定义了一个叫做文件对象模型(DOM:DocumentObjectModel)的标准来处理XML文档。支持DOM的类可以自由地定位并修改XML文档。要想使用XmlDocument类,需要添加System.Xml.dll的引用,并且引入System.Xml命名空间。XmlDocu

  • 您的pycharm评估已过期_pycharm许可证过期

    您的pycharm评估已过期_pycharm许可证过期2020年10月国企,看来需每年操作一次

  • 罗技k580切换设备_罗技键盘怎么连接电脑

    罗技k580切换设备_罗技键盘怎么连接电脑插接收器是默认长按F11的,蓝牙是默认长按F12电脑:MacbookPro、联想台式机目的:Mac连蓝牙,联想连接收器步骤:首先进驱动下载地址下载罗技驱动插上接收器进入驱动软件,长按键盘F11,将键盘与联想成功连接,此时联想绑定的为F11长按F12,打开Mac蓝牙,Mac跳出提示(用K580输入6个数字加enter键,然后点击连接),可与Mac成功连接,此时Mac绑定的是F12两台电脑成功连接后,按F11可切换到联想电脑,按F12可切换到Mac…

    2022年10月15日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号