Dubbo(四)_全局架构
整体架构
全局架构分为注册中心,通常为 zk/redis;服务提供者 Provider,用来提供并注册服务到注册中心;服务消费者 Consumer,用来向注册中心订阅服务,当注册中心服务发生变动时 notify 通知消费者,消费者通过 invoke 远程调用服务提供者;Monitor 监控者用来监控服务,统计服务的调用次数和调用时间等信息。
注册中心架构
注册中心主要有两部分作用:(1)作为第三方存储介质,存储支持服务信息和通知服务变更功能,例如 zookeeper/redis 可以作为注册中心;(2)对注册中心的抽象,将注册中心抽象为 Registry组件,这些组件可以被引入到服务端和消费端,这样就将服务注册/服务订阅等操作就可以被执行了。
注册中心模块的核心组件包含如下:
Registry
:对注册中心的抽象,一个Registry
表示一个注册中心;RegistryFactory
:注册中心工厂,用于在初始化时创建Registry
;Directory
:服务目录,用于刷新和保存可用于远程调用的Invoker
,是一个公共组件;NotifyListener
:定义了通知接口,用于接收服务变更的通知。RegistryDirectory
:实现了Directory
、NotifyListener
两个接口,既可以接收服务变更的通知,又可以保存远程调用的Invoker
。
消费者架构
消费者可以拆分为 Registry
、Proxy
、Protocol
、Cluster
、Invoker
、Client
几个部分,各部分作用如下:
Registry
:注册中心中介绍过,主要用于订阅服务、监听服务变化、发现服务。Proxy
:服务代理,用于代理依赖的接口,在使用时通过<dubbo:refrence/>
标签配置依赖接口后会生成一个代理,实际调用接口时调用的是这个代理类;Protocol
:服务协议,用来封装 RPC调用,在初始化时会创建用于远程调用的Invoker
,并通过Client
模块与服务端建立连接;Cluster
:服务内部集群,在请求服务时通过内部保存的服务目录Directory
进行目标服务选择,通过loadBalance
组件进行负载均衡来确定服务提供方地址和端口;Invoker
:服务调用者,通过调用Client
模块来和服务提供方通信;Client
:客户端模块,实现与服务提供方连接、请求响应等功能。
模块初始化流程
发送请求流程
接收响应流程
服务提供者架构
将服务提供方划分为以下模块:
Server
:通信模块,与消费者通信等作用;Registry
:同注册中心模块讲接,主要起服务注册等作用;Invoker
:服务消费者中是DubboInvoker
,封装了远程调用比较复杂;服务提供者中是AbstractProxyInvoker
,内容简单用于调用本地生成的Proxy
;Proxy
:代理模块服务消费者配置类是RefrenceConfig
,服务提供者的配置类是ServerConfig
;服务消费者的代理类用于封装调用远程方法的细节,提供者代理类用于调用本地实现。