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)


相关推荐

  • IntelliJ idea 主题包下载以及安装

    IntelliJ idea 主题包下载以及安装IntelliJidea默认的主体只有简单的白和灰,不一定能满足所有人的喜好,所以想要下载一些其它不错的主题包;主题下载地址;部分截图;选择自己喜欢的主题下载,个人还是比较喜欢SublimeText2主题,下载好之后,随意放个找得到的位置(还是放在安装目录下面吧,是个整体嘛),是个jar包。安装:file–>importsetttings–…

  • java如何配置环境变量_java如何配置环境变量

    java如何配置环境变量_java如何配置环境变量首先安装jdk,点击打开下图所示窗口。点击上图“下一步“进入下图,下图红色框选位置为安装的路径。点击上图下一步进入下图,点击”完成“即可。下面配置java环境变量,右键计算机图标,如下图所示:点击上图属性后,弹出系统窗口,点击最左边红色箭头所指“高级系统设置”按钮弹出“系统属性”窗口,在系统属性窗口点击中间箭头所指“环境变量”,弹出环境变量窗口。点击下图红色箭头所指新建按钮,弹出“新建系统变量”…

  • 现货黄金贵金属投资入门基础知识

    现货黄金贵金属投资入门基础知识现货黄金贵金属投资入门知识:  很多中小投资者对证券投资都比较熟悉,但对现货黄金贵金属投资还不是很熟悉。现货吧给大家做一些简单的介绍。希望能为大家进入现货黄金贵金属投资的市场提供一些有益的参考和帮助。  现货黄金.jpg  黄金贵金属投资分为实物黄金和合约式黄金,投资实物黄金的可靠性较强,但买卖过程比较麻烦,而且还要自己承担保管的成本和风险,投资起来明显不如合约

  • 2019/6/18

    今日内容:1.selenium剩余用法2.selenium万能登录破解3.破解极验滑动验证码fromseleniumimportwebdriverimporttimedriver=webdriver.Chrome(r’D:BaiduNetdiskDownload(chromedriver_win32chr…

  • Custom view overrides onTouchEvent but not performClick

    Custom view overrides onTouchEvent but not performClick在一个View里面覆盖了onTouchEvent方法,会报warningCustomview overridesonTouchEventbutnotperformClick处女座的我,受不了warning解决:1,再覆盖一个方法:@OverridepublicbooleanperformClick(){returnsuper.perfo

  • 软件测试中常用的linux命令_软件测试linux

    软件测试中常用的linux命令_软件测试linuxlinux常用shell命令=命令+选项+参数find查找文件/目录cd(changedirectory)切换目录cd#root根目录 cd/#系统根目录 cd../../#返回上上一层目录ls/dir(list)列出目录下文件ls-a(–all)…

发表回复

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

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