Dubbo官网的框架设计(含详细解释):http://dubbo.apache.org/zh-cn/docs/dev/design.html
整体设计:
Dubbo对框架的整体分层:
- Business层:
- 这一层只有Service;
- 有interface(接口)和implement(实现);
- 想远程调用,只要调用interface的方法,就可以远程调用实现了;
- 对于用户编程来说,只关心到这一层就结束了;
- RPC层:
- 这一层有:Config、Proxy、Registry、Cluster、Monitor、Protocol;
- 用于完成远程过程调用;
- Config:
- 配置层,封装配置文件里面解析出来的信息;
- 每一个标签都有对应的Config来进行信息封装;
- Proxy:
- 服务代理层;
- 利用代理的方式生成客户端/服务端的代理对象,代理对象互相调用方法;
- Registry:
- 注册中心层;
- 很多服务注册到注册中心,consumer从注册中心订阅需要的服务,去调用;
- 完成注册中心的相关功能:服务的注册、服务的发现;
- Cluster:
- 路由层+负载均衡层;
- Invoker为调用者,调用者调用很多的服务,同一个服务可能在多台机器上面都有,这一层可以做到负载均衡;
- Monitor:
- 监控层;
- 每一次调用信息都会发送给监控层;
- 监控层收到信息之后,可以以界面的方式展示;
- simple-monitor;
- Protocol:
- 远程调用层;
- 封装RPC调用;
- RPC调用中核心的三个:Invoker、Protocol、Exporter;
- Remoting层:
- 远程调用需要:A、B两个服务器架起通信的管道,通信和通信之间传递数据在该层;
- Remoting层:解决远程通信;
- Exchange层:
- 一个ExchangeClient(客户端),一个ExchangeServer(服务端),两个架起管道,进行数据的互联互通;
- Transport层:
- 传输层;
- 真正传输数据:使用Transport封装传输的;
- Transport的底层:netty框架,netty框架在该层工作;
- Serialize层:
- 序列化层;
- 在整个传输的过程当中:
- 数据要序列化出去,再网络传输;
- 收到数据之后,要反序列化回来,才能拿到数据对象;
图例说明:
- 左边淡蓝背景:服务消费方(Consumer)使用的接口;
- 右边淡绿色背景:服务提供方(Provider)使用的接口;
- 位于中轴线上:双方都用到的接口;
- 从下至上分为十层,各层均为单向依赖;
- 右边的黑色箭头代表:层之间的依赖关系,每一层都可以剥离上层被复用;
- Service 和 Config 层为 API(应用程序接口),其它各层均为 SPI(串行外设接口);
- 绿色小块:扩展接口(interface),蓝色小块:实现类(implement),图中只显示用于关联各层的实现类;
- 紫色三角箭头:继承,可以把子类看作父类的同一个节点,线上的文字为调用的方法;
- 蓝色虚线:初始化过程,即启动时组装链;
- 红色实线:方法调用过程,即运行时调时链;
- 显示:我们如何完成远程调用的;
- 黑色箭头:依赖顺序,
- 每一小层,基本对应Dubbo源代码的一个分包;