Dubbo(四)_全局架构

发布时间 2023-07-29 23:52:19作者: Stitches

整体架构

全局架构分为注册中心,通常为 zk/redis;服务提供者 Provider,用来提供并注册服务到注册中心;服务消费者 Consumer,用来向注册中心订阅服务,当注册中心服务发生变动时 notify 通知消费者,消费者通过 invoke 远程调用服务提供者;Monitor 监控者用来监控服务,统计服务的调用次数和调用时间等信息。

注册中心架构

注册中心主要有两部分作用:(1)作为第三方存储介质,存储支持服务信息和通知服务变更功能,例如 zookeeper/redis 可以作为注册中心;(2)对注册中心的抽象,将注册中心抽象为 Registry组件,这些组件可以被引入到服务端和消费端,这样就将服务注册/服务订阅等操作就可以被执行了。

注册中心模块的核心组件包含如下:

  • Registry:对注册中心的抽象,一个 Registry表示一个注册中心;
  • RegistryFactory:注册中心工厂,用于在初始化时创建 Registry
  • Directory:服务目录,用于刷新和保存可用于远程调用的 Invoker,是一个公共组件;
  • NotifyListener:定义了通知接口,用于接收服务变更的通知。
  • RegistryDirectory:实现了 DirectoryNotifyListener两个接口,既可以接收服务变更的通知,又可以保存远程调用的 Invoker

消费者架构


消费者可以拆分为 RegistryProxyProtocolClusterInvokerClient 几个部分,各部分作用如下:

  • Registry:注册中心中介绍过,主要用于订阅服务、监听服务变化、发现服务。
  • Proxy:服务代理,用于代理依赖的接口,在使用时通过 <dubbo:refrence/> 标签配置依赖接口后会生成一个代理,实际调用接口时调用的是这个代理类;
  • Protocol:服务协议,用来封装 RPC调用,在初始化时会创建用于远程调用的 Invoker,并通过 Client 模块与服务端建立连接;
  • Cluster:服务内部集群,在请求服务时通过内部保存的服务目录 Directory进行目标服务选择,通过 loadBalance 组件进行负载均衡来确定服务提供方地址和端口;
  • Invoker:服务调用者,通过调用 Client模块来和服务提供方通信;
  • Client:客户端模块,实现与服务提供方连接、请求响应等功能。

模块初始化流程

发送请求流程

接收响应流程

服务提供者架构

将服务提供方划分为以下模块:

  • Server:通信模块,与消费者通信等作用;
  • Registry:同注册中心模块讲接,主要起服务注册等作用;
  • Invoker:服务消费者中是 DubboInvoker,封装了远程调用比较复杂;服务提供者中是 AbstractProxyInvoker,内容简单用于调用本地生成的 Proxy
  • Proxy:代理模块服务消费者配置类是 RefrenceConfig,服务提供者的配置类是 ServerConfig;服务消费者的代理类用于封装调用远程方法的细节,提供者代理类用于调用本地实现。