《Apache Dubbo微服务开发从入门到精通》——服务治理与生态——五、 注册中心(6) https://developer.aliyun.com/article/1223896
2) 多注册中心订阅
服务订阅由于涉及到地址聚合和路由选址,因此逻辑会更加复杂一些。从单个服务订阅的视角,如果存在多注册中心订阅的情况,则可以根据注册中心间的地址是否聚合分为两种场景。
a) 多注册中心地址不聚合
如以上所示独立配置的注册中心组件,地址列表在消费端默认是完全隔离的,负载均衡选址要经过两步:
• 注册中心集群间选址,选定一个集群
• 注册中心集群内选址,在集群内进行地址筛选
下面我们着重分析下如何控制注册中心集群间选址,可选的策略有如下几种
随机,每次请求都随机的分配到一个注册中心集群。
注:
随机的过程中会有可用性检查,即每个集群要确保至少有一个地址可用才有可能被选到。
preferred优先
如果有注册中心集群配置了preferred=“true”,则所有流量都会被路由到这个集群。
weighted
基于权重的随机负载均衡,以上集群间会有大概10:1的流量分布。
同zone优先
根据Invocation中带的流量参数或者在当前节点通过context上下文设置的参数,流量会被精确的引导到对应的集群。
b) 多注册中心地址聚合
这里增加了一个特殊的multiple协议开头的注册中心,其中:
• multiple://127.0.0.1:2181并没有什么具体含义,只是一个特定格式的占位符,地址可以随意指定。
• reference-registry指定了要聚合的注册中心集群的列表,示例中有两个集群,分别是zookeeper://address11?backup=address12,address13和zookeeper://address21?backup=address22,address23,其中还特别指定了集群分隔符 `separator=";"。
如下图所示,不同注册中心集群的地址会被聚合到一个地址池后在消费端做负载均衡或路由选址。
在3.1.0版本及之后,还支持每个注册中心集群上设置特定的attachments属性,以实现对该注册中心集群下的地址做特定标记,后续配合Router组件扩展如TagRouter等就可以实现跨机房间的流量治理能力。
增加attachments=zone=hangzhou,tag=middleware后,所有来自该注册中心的URL地址将自动携带zone和tag两个标识,方便消费端更灵活的做流量治理。
《Apache Dubbo微服务开发从入门到精通》——服务治理与生态——五、 注册中心(8) https://developer.aliyun.com/article/1223891







