今天开始记录本身学习的dubbo过程,而且转换成文档形式输出,若是有问题,请随时指出。 主要参考图书《深刻理解Apache Dubbo与实践》,网上资料信息,自身查看源码等整理出的。学习是个持续过程,之后探索中发现有问题或者更加深刻,还会继续回来补充。
1、架构图服务器
一、注册中心网络
二、服务端(提供者)架构
三、客户端(调用者)负载均衡
四、监控中心框架
2、分层学习
API层:spa
一、Service(业务层,开发者实现的业务代码)线程
二、Config(配置层,主要围绕ServiceConfig和ReferenceConfig类,管理配置)代理
SPI层:code
一、Proxy(服务代理层,不管生产者仍是消费者,都会生成代理类。完成远程调用)
二、Registry(注册层。负责注册和发现)
三、Cluster(集群容错层。远程调用失败的容错机制,选择调用节点的负载均衡策略)
四、Monitor(监控层,主要统计调用次数和时间等。)
五、Protocol(远程调用层。封装RPC调用具体过程,是Invoker暴露和引用的主功能入口)
六、Exchange(信息交换层。创建Request-Response模型,封装请求响应模式)
七、Transport(网络传输层。把网络传输抽象为统一接口。)
八、Seriallze(序列化层。负责序列化和反序列化)
服务暴露过程:
一、服务端在启动时,初始化服务实例
二、经过Proxy组件调用具体的协议(Protocol),把服务端要暴露的接口封装成Invoker,
三、而后转换成Exporter,
四、框架会打开服务端口等并记录服务实例到内存中。
五、最后经过Registry把服务元数据注册到注册中心。
客户端调用过程:
启动时经过Registry在注册中心订阅服务端的元数据(IP和端口)。获得暴露的服务。
服务消费者调用服务提供者的过程:
一、消费者调用,先经过Proxy
二、Proxy持有一个Invoker对象
三、而后出发invoke调用。
四、在invoke过程当中,须要使用Cluster(负责容错),如调用失败的重试。
五、Cluster在调用以前会经过Directory获取全部能够调用的远程服务Invoker列表
六、经过路由规则将Invoker列表过滤一遍
七、经过LoadBlance方法作负载均衡,最后选出一个Invoker。
八、Invoker通过过滤链,过滤链一般处理上下文,限流,计算等。
九、使用Client作数据传输。
十、使用Codec作私有协议构造。
十一、构造完成后,对数据包作序列化,而后传输到服务器提供者。
十二、服务提供者收到数据包,也使用Codec处理协议,而后对完整的数据报文作反序列化。(Request)
1三、Request被分配到线程池中进行处理。
1四、Server处理Request.
1五、根据请求查询到对应的Exporter(内部持有Invoker)
1六、通过过滤链Filter
1七、获得接口的具体实现,而且调用,再原路把结果返回。