深入 Cluster:微服务治理的“中央大脑” —— 容错与负载均衡
摘要
在微服务架构中,一个服务通常有多个实例。当 Consumer 要调用 Provider 时,面对手里的一把 IP 地址(Invoker 列表),该选哪一个?选好后如果调用失败了怎么办?Cluster 层就是为了解决这些问题而生的。本篇将深入 Dubbo 的集群容错机制,剖析 Failover、Failfast 等策略的源码实现,并揭秘 Router 和 LoadBalance 是如何配合工作的。
1. 核心角色:从“单挑”到“群殴”
在 RPC 层,我们只关注一个 Invoker。但在 Cluster 层,我们关注的是一群 Invoker。
- Directory: 目录。即
RegistryDirectory,它动态持有所有可用的 Invoker 列表。 - Router: 路由。在 Invoker 列表进行负载均衡前,先过滤掉一部分(例如:只调用 version=2.0 的实例,或者只调用同机房的实例)。
- LoadBalance: 负载均衡。从 Router 过滤后的列表中,根据算法(随机、轮询等)选出一个。
- Cluster: 集群接口。将 Directory 中的多个 Invoker 伪装成一个
Invoker(通常是Ab