dubbo cluster--架构

Dubbo cluster总介

Dubbo cluster泛指一个逻辑集群,是提供同质服务的一组节点。其主要包括以下5个概念:
1. Cluster
dubbo里虽然有Cluster实体,但实际提供集群功能的是cluster invoker的相关实体。
2. Invoker
Invoker是对service provider的一个逻辑抽象,一个invoker对应一个provider。Invoker里封装了远程调用的具体细节。
3. Directory
Directory包含一组节点,
1)实现了NotifyListener接口,通过向注册中心注册服务变更事件,注册中心将及时向其推送invoker变更。
2)Cluster通过Directory将一组Invoker伪装成一个Invoker,也就是将多个提供能力的invoker组合成一个cluster invoker
4. LoadBalance
提供负载能力,在Directory里通过策略选出一个提供服务的invo
ker
5. Registry
Registry是对注册中心的抽象实现。服务提供者向Registry注册,并暴露给Directory。服务消费者向Registry订阅,并最终通过Directory保存提供者和节点映射信息。
6. Reference
Reference是对provider的一个引用, Consumer对服务的消费,最终通过Reference来完成。Reference可以理解为暴露给客户端的访问代理,一个Reference最终通过一个Cluster invoker完成调用。

Cluster交互流程

dubbo cluster--架构_第1张图片
上图是Cluster交互的活动图,由Invoker, Directory, Registry, LoadBalance共同完成了集群功能。
1-6是provider发布的订阅过程
7-11是provider的发现过程

客户端在启动时,向Registry注册provider变更事件。发生变更时会通知Directory,由Directory更新provider的信息,在Directory里映射成Invoker。
有一小点需要注意一下,Registry的注册过程中,Directory被作为NotifyListener接受事件发布。参考上图第3步。

Cluster类图结构

订阅完毕后,类结构如下图
dubbo cluster--架构_第2张图片
1)FailOverClusterInvoker通过RegistryDirectory持有提供服务能力的DubboInvoker。
2)FailOverClusterInvoker在每次调用中又通过LoadBalance从RegistryDirectory里select出DubboInvoker。
3)订阅完毕后,每个Reference都有一个FailOverClusterInvoker,而每个FailOverClusterInvoker又对应一个RegistryDirectory。Dubbo的Invoker存储结构是私有的,也就是每个Reference有其自己的私有Invoker。
4)RegistryDirectory存储的invoker是个map结构,key为方法名,没有指定methods参数的则key为‘*’,代表所有方法均可用,但是优先级比指定方法名的invoker低。在FailOverClusterInvoker要求Directory list时,只需要根据当前请求的方名get出对应的invoker list,由load banlance再做select。
5)ReferenceConfig暴露给消费者的Reference(实际就是个Dubbo proxy,proxy会持有FailOverClusterInvoker引用)会将请求委派给FailOverClusterInvoker,由它完成invoke过程。

你可能感兴趣的:(DUBBO,服务治理,服务注册)