Dubbo原理简介
创始人
2024-05-31 15:07:48
0

95af9c9e3af943229c9c6717b442e6ef.jpgDubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。

 

作为RPC:支持各种传输协议,如dubbo,hession,json,fastjson,底层采用mina,netty长连接进行传输!典型的provider和cusomer模式!

作为SOA:具有服务治理功能,提供服务的注册和发现!用zookeeper实现注册中心!启动时候服务端会把所有接口注册到注册中心,并且订阅configurators,服务消费端订阅provide,configurators,routers,订阅变更时,zk会推送providers,configuators,routers,启动时注册长连接,进行通讯!proveider和provider启动后,后台启动定时器,发送统计数据到monitor(监控中心)!提供各种容错机制和负载均衡策略!!

 

 

 

我们解释以下这个架构图:https://yq.aliyun.com/articles/38380

 

Consumer服务消费者,Provider服务提供者。Container服务容器。消费当然是invoke提供者了,invoke这条实线按照图上的说明当然同步的意思了,多说一句,在实际调用过程中,Provider的位置对于Consumer来说是透明的,上一次调用服务的位置(IP地址)和下一次调用服务的位置,是不确定的。这个地方就是实现了软负载。

 

服务提供者先启动start,然后注册register服务。

 

消费订阅subscribe服务,如果没有订阅到自己想获得的服务,它会不断的尝试订阅。新的服务注册到注册中心以后,注册中心会将这些服务通过notify到消费者。

 

Monitor这是一个监控,图中虚线表明Consumer 和Provider通过异步的方式发送消息至Monitor,Consumer和Provider会将信息存放在本地磁盘,平均1min会发送一次信息。Monitor在整个架构中是可选的(图中的虚线并不是可选的意思),Monitor功能需要单独配置,不配置或者配置以后,Monitor挂掉并不会影响服务的调用。

 

netty 是什么?

 

“netty 是一个基于nio的客户、服务器端编程框架,netty提供异步的,事件驱动的网络应用程序框架和工具,可以快速开发高可用的客户端和服务器。

 

netty是基于nio的,它封装了jdk的nio,让我们使用起来更加方法灵活。

 

二、dubbo原理?

 

I、初始化过程细节: 

上图中的第一步start,就是将服务装载容器中,然后准备注册服务。和Spring中启动过程类似,spring启动时,将bean装载进容器中的时候,首先要解析bean。所以dubbo也是先读配置文件解析服务。 

解析服务: 

1)、基于dubbo.jar内的Meta-inf/spring.handlers配置,spring在遇到dubbo名称空间时,会回调DubboNamespaceHandler类。 

2)、所有的dubbo标签,都统一用DubboBeanDefinitionParser进行解析,基于一对一属性映射,将XML标签解析为Bean对象。 

在ServiceConfig.export 或者ReferenceConfig.get 初始化时,将Bean对象转会为url格式,将所以Bean属性转成url的参数。 

然后将URL传给Protocol扩展点,基于扩展点的Adaptive机制,根据URL的协议头,进行不同协议的服务暴露和引用。

 

a、 只暴露服务端口

 

在没有使用注册中心的情况,这种情况一般适用在开发环境下,服务的调用这和提供在同一个IP上,只需要打开服务的端口即可。 

即,当配置 or 

ServiceConfig解析出的URL的格式为: 

Dubbo://service-host/com.xxx.TxxService?version=1.0.0 

基于扩展点的Adaptiver机制,通过URL的“dubbo://”协议头识别,直接调用DubboProtocol的export()方法,打开服务端口。

 

b、向注册中心暴露服务:

 

和上一种的区别:需要将服务的IP和端口一同暴露给注册中心。 

ServiceConfig解析出的url格式为: 

registry://registry-host/com.alibaba.dubbo.registry.RegistryService?export=URL.encode(“dubbo://service-host/com.xxx.TxxService?version=1.0.0”)

 

基于扩展点的Adaptive机制,通过URL的“registry://”协议头识别,调用RegistryProtocol的export方法,将export参数中的提供者URL先注册到注册中心,再重新传给Protocol扩展点进行暴露: Dubbo://service-host/com.xxx.TxxService?version=1.0.0

 

四、服务暴露和消费的详细过程

(1)服务提供者暴露一个服务的详细过程

 

服务提供者暴露服务的主过程:

 

 

 

首先ServiceConfig类拿到对外提供服务的实际类ref(如:HelloWorldImpl),然后通过ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,

 

到这一步就完成具体服务到Invoker的转化。接下来就是Invoker转换到Exporter的过程。

 

Dubbo处理服务暴露的关键就在Invoker转换到Exporter的过程(如上图中的红色部分),下面我们以Dubbo和RMI这两种典型协议的实现来进行说明:

 

Dubbo的实现:

 

Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由Dubbo自己实现。

 

RMI的实现:

 

RMI协议的Invoker转为Exporter发生在RmiProtocol类的export方法,

它通过Spring或Dubbo或JDK来实现RMI服务,通讯细节这一块由JDK底层来实现,这就省了不少工作量。

 

(2)服务消费者消费一个服务的详细过程

 

服务消费的主过程:

 

 

 

首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例(如上图中的红色部分),这是服务消费的关键。

 

相关内容

热门资讯

杭州雷峰塔经典导游词 杭州雷峰塔经典导游词范文(精选3篇)  作为一位无私奉献的导游,时常要开展导游词准备工作,导游词由引...
兵马俑介绍导游词 兵马俑介绍导游词(通用17篇)  作为一名尽职尽责的导游,总归要编写导游词,借助导游词可以更好地宣传...
皇城相府的导游词 皇城相府的导游词  皇城相府导游词(一)女士们、先生们:  皇城相府位于山西省阳城县城东15公里的北...
三峡导游词 三峡导游词(15篇)  作为一名旅游从业人员,常常要根据讲解需要编写导游词,导游词一般是根据实际的游...
介绍乌镇的英文导游词 介绍乌镇的英文导游词  Wuzhen lies in the far north-east of Z...
武当山古建筑群导游词 武当山古建筑群导游词(通用5篇)  作为一名乐于助人的导游,就不得不需要编写导游词,导游词是导游人员...
宝鸡红河谷导游词 宝鸡红河谷导游词  作为一名具备丰富知识的导游,时常要开展导游词准备工作,一篇完整的导游词,其结构一...
安徽导游词 安徽导游词15篇  作为一名专门为游客提供帮助的导游,就难以避免地要准备导游词,导游词是导游员在游览...
介绍长沙岳麓书院的导游词 介绍长沙岳麓书院的导游词  岳麓书院是古代汉族书院建筑,属于中国历史上著名的四大书院之一,介绍长沙岳...
茅台镇导游词 茅台镇导游词  作为一名优秀的导游,时常要开展导游词准备工作,导游词作为一种解说的文体,它的作用是帮...
安徽池州杏花村导游词 安徽池州杏花村导游词  导语:池州秀山门外的杏花村,原只不过是几间“沦为荒烟野草之中”的茅舍酒肆,毫...
成吉思汗庙导游词 成吉思汗庙导游词  导游词是导游人员引导游客观光游览时的讲解词,是导游员同游客交流思想,向游客传播文...
茂陵导游词介绍 茂陵导游词范文介绍  作为一名导游,编写导游词是必不可少的,导游词可以帮助旅游者欣赏景观,以达到游览...
鲁迅故居导游词 鲁迅故居导游词(精选6篇)  作为一名优秀的导游,时常会需要准备好导游词,导游词具有极强的实用性,涉...
丹东断桥导游词 丹东断桥导游词  作为一位兢兢业业的旅游从业人员,总不可避免地需要编写导游词,导游词由引言、主体和结...
北京八达岭长城的导游词 北京八达岭长城的导游词(通用5篇)  作为一名乐于为游客排忧解难的导游,总不可避免地需要编写导游词,...
大龙湫景区的导游词 大龙湫景区的导游词  导语:大龙湫景区西邻雁湖景区,东接灵岩景区,是雁荡山的精华景区之一。大龙湫与灵...
山西大同悬空寺导游词   引导语:悬空寺,是佛道儒三教合一的奇特寺庙,今天小编为大家整理了三篇关于悬空寺的导游词。 ...
正定隆兴寺导游词 正定隆兴寺导游词  导语:隆兴寺,别名大佛寺,位于河北省石家庄市正定县城东门里街,原是东晋十六国时期...
双龙洞导游词分享 双龙洞导游词分享  双龙洞是金华的一个美丽的景点。下面是小编带来的双龙洞导游词,希望大家喜欢。  篇...