【精】dubbo原理和机制
Dubbo调用流程:提供者由ServiceConfig读取配置,Proxy封装接口转成Invoker,包装成Exporter后注册到注册中心;消费者订阅元数据,经Directory取Invoker列表、Router路由过滤、Cluster容错、LoadBalance负载均衡、Filter链限流,再编码序列化发给提供者线程池。注册中心支持ZooKeeper、Redis、Simple、Multicast四种,ZooKeeper以ZNode四目录存元数据并用Watcher通知变更。
- 服务经Proxy转Invoker再包装Exporter暴露
- 调用链含Directory路由Cluster容错与负载均衡
- Filter过滤链负责上下文限流和计数
- ZooKeeper在dubbo目录下分四类ZNode存元数据
- 元数据变化经Watcher通知消费者与治理中心
Dubbo 框架是用来处理分布式系统中,服务发现与注册以及调用问题的,并且管理调用过程。
一,工作流程:

服务提供者在启动的时候,会通过读取一些配置将服务实例化。
Proxy 封装服务调用接口,方便调用者调用。客户端获取 Proxy 时,可以像调用本地服务一样,调用远程服务。
Proxy 在封装时,需要调用 Protocol 定义协议格式,例如:Dubbo Protocol。
将 Proxy 封装成 Invoker,它是真实服务调用的实例。
将 Invoker 转化成 Exporter,Exporter 只是把 Invoker
包装了一层,是为了在注册中心中暴露自己,方便消费者使用。
将包装好的 Exporter 注册到注册中心。
服务消费者建立好实例,会到服务注册中心订阅服务提供者的元数据。元数据包括服务 IP 和端口以及调用方式(Proxy)。
消费者会通过获取的 Proxy 进行调用。通过服务提供方包装过程可以知道,Proxy 实际包装了 Invoker 实体,因此需要使用
Invoker 进行调用。
在 Invoker 调用之前,通过 Directory 获取服务提供者的 Invoker
列表。在分布式的服务中有可能出现同一个服务,分布在不同的节点上。
通过路由规则了解,服务需要从哪些节点获取。
Invoker 调用过程中,通过 Cluster 进行容错,如果遇到失败策略进行重试。
调用中,由于多个服务可能会分布到不同的节点,就要通过 LoadBalance 来实现负载均衡。
Invoker 调用之前还需要经过 Filter,它是一个过滤链,用来处理上下文,限流和计数的工作。
生成过滤以后的 Invoker。
用 Client 进行数
原创不易,完成人机校验,阅读全文
常见问题
Dubbo服务提供者是怎么暴露服务的?
ServiceConfig读取XML、注解或properties配置生成服务实体,ProxyFactory把Proxy转成Invoker,定义Protocol后包装成Exporter,最后发送到注册中心作为注册信息。
Dubbo支持哪些注册中心的实现?
支持ZooKeeper、Redis、Simple和Multicast四种,生产常用ZooKeeper,通过树形ZNode存储服务元数据并用Watcher机制推送变更。