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实例(如上图中的红色部分),这是服务消费的关键。

 

相关内容

热门资讯

六级英语作文【经典6篇】 六级英语作文 篇一:如何有效提高英语口语能力English is a global language...
实用英语句子(实用6篇) 实用英语句子 篇一如何在日常生活中运用实用英语句子英语是世界上最为广泛使用的语言之一,掌握一些实用的...
母亲节英语作文【优质6篇】 母亲节英语作文 篇一A Tribute to My Mother on Mother's DayMo...
小王子阅读英语读后感【最新3... 小王子阅读英语读后感 篇一《小王子》是法国作家安托万·德·圣·埃克苏佩里所著的一部童话小说,被誉为世...
成功英语作文(推荐4篇) 成功英语作文 篇一How to Achieve Success in English Learnin...
劳动的价值英语作文范文【精选... 劳动的价值英语作文范文 篇一The Value of LaborLabor is an essent...
我的笔友英语作文(最新3篇) 我的笔友英语作文 篇一My Pen PalI have a pen pal named Emily....
中考英语作文好句子【优选3篇... 中考英语作文好句子 篇一The Importance of Physical ExercisePhy...
描写景色英语作文(优秀3篇) 描写景色英语作文 篇一A Tranquil Morning in the MeadowAs the ...
六一儿童节的英语作文(优秀6... 六一儿童节的英语作文 篇一Children's Day is a special day dedic...
天津首考英语作文范文【最新6... 天津首考英语作文范文 篇一The Importance of Learning EnglishEng...
写我的朋友的英语作文400字... 篇一:我的朋友My FriendI have a friend named Lily. She is...
my family 英语作文... my family 英语作文版 篇一My FamilyI come from a small but...
我的梦英语作文(通用6篇) 我的梦英语作文 篇一我一直有一个特殊的梦想,那就是成为一名优秀的英语教师。这个梦想源于我对英语的热爱...
我的朋友英语作文(精选6篇) 我的朋友英语作文 篇一My Friend LucyI would like to introduce...
志愿者的英语作文(精选6篇) 志愿者的英语作文 篇一Volunteering ExperienceI have always be...
英语作文带翻译(经典6篇) 英语作文带翻译 篇一:The Importance of Learning a Second Lan...
英语作文范文分享给朋友【实用... 英语作文范文分享给朋友 篇一:The Importance of ReadingAs an avid...
比较交友性格的好处英语作文【... 比较交友性格的好处英语作文 篇一The Benefits of Comparing Friendsh...
英语作文:Never giv... 英语作文:Never give up永不言弃 篇一Never give upPersistence ...