Dubbo架构图详解(Dubbo十层架构图解)

Dubbo架构图详解(Dubbo十层架构图解)-mikechen

Dubbo整体架构如下图所示:

Dubbo架构图详解(Dubbo十层架构图解)-mikechen

图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口, 位于中轴线上的为双方都用到的接口。

Dubbo框架设计一共划分了10个层:

1. 服务接口层(Service)

该层是与实际业务逻辑相关的,根据服务提供方和服务消费方的业务设计对应的接口和实现。

2. 配置层(Config)

对外配置接口,以ServiceConfig和ReferenceConfig为中心,可以直接new配置类,也可以通过spring解析配置生成配置类。

 3.服务代理层(Proxy)

服务接口透明代理,生成服务的客户端Stub和服务器端Skeleton,以ServiceProxy为中心,扩展接口为ProxyFactory。

 4.服务注册层(Registry)

封装服务地址的注册与发现,以服务URL为中心,扩展接口为RegistryFactory、Registry和RegistryService。可能没有服务注册中心,此时服务提供方直接暴露服务。

 5.集群层(Cluster)

封装多个提供者的路由及负载均衡,并桥接注册中心,以Invoker为中心,扩展接口为Cluster、Directory、Router和LoadBalance。将多个服务提供方组合为一个服务提供方,实现对服务消费方来透明,只需要与一个服务提供方进行交互。

 6.监控层(Monitor)

RPC调用次数和调用时间监控,以Statistics为中心,扩展接口为MonitorFactory、Monitor和MonitorService。

 7.远程调用层(Protocol)

封将RPC调用,以Invocation和Result为中心,扩展接口为Protocol、Invoker和Exporter。Protocol是服务域,它是Invoker暴露和引用的主功能入口,它负责Invoker的生命周期管理。Invoker是实体域,它是Dubbo的核心模型,其它模型都向它靠扰,或转换成它,它代表一个可执行体,可向它发起invoke调用,它有可能是一个本地的实现,也可能是一个远程的实现,也可能一个集群实现。

8. 信息交换层(Exchange)

封装请求响应模式,同步转异步,以Request和Response为中心,扩展接口为Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。

 9.网络传输层(Transport)

抽象mina和netty为统一接口,以Message为中心,扩展接口为Channel、Transporter、Client、Server和Codec。

10.数据序列化层(Serialize)

可复用的一些工具,扩展接口为Serialization、 ObjectInput、ObjectOutput和ThreadPool。

 

Dubbo的整体调用流程,如下图所示:

Dubbo架构图详解(Dubbo十层架构图解)-mikechen

Dubbo的整体流程,大致分为如下11步:

1.首先服务提供者会启动服务,然后将服务注册到服务注册中心;

2.服务消费者会定时拉取服务提供者列表;

3.当服务消费者需要调用服务提供者接口的时候,因为他不能直接远程调用提供者的接口,所以需要生成一个动态代理对象,然后通过这个代理对象去调用远程接口。

4.生成代理对象之后会走到Cluster层,这里会获取服务提供者列表的数据,感知到目前所能调用的服务提供者有哪些;

5.然后Cluster会根据指定的算法做负载均衡,选出要调用的服务提供者;

6.选择好服务提供者之后,再选择指定的协议格式;

7.Exchange会根据指定的协议格式进行请求数据封装,封装成request请求;

8.请求封装好之后,就会通过网络通信框架,将请求发送出去;

9.服务提供者那边同样会有网络通信框架,他会监听指定的端口号,当接收到请求之后会将请求进行反序列化;

10.反序列化之后,再根据Exchange根据指定协议格式将请求解析出来;

11.然后再通过动态代理对象调用服务提供者的对应接口。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法