真实面经题目 · 原创解析
注册中心挂了怎么办?
这题考服务发现的控制面故障处理,回答要区分注册中心不可用和业务调用链路不可用。
出现于:阿里巴巴 · 后端开发
真实面经题目 · 原创解析
这题考服务发现的控制面故障处理,回答要区分注册中心不可用和业务调用链路不可用。
注册中心是服务发现的控制面,不应该成为每次业务调用的数据面强依赖。它挂掉时,已有客户端应使用本地缓存的最后可用服务列表继续调用,并结合健康检查、失败摘除和限流保护;注册中心自身要多副本部署、持久化关键元数据,并允许短时间读旧数据。故障期间新服务注册、实例下线和配置变更会受影响,恢复后要重新拉取、校验版本并修正过期实例。
注册中心负责实例注册、发现和变更通知,真实 RPC/HTTP 调用通常是客户端直连服务实例。注册中心异常不应立刻让所有已有调用中断。
客户端要缓存服务列表、路由规则和最后成功版本。注册中心不可用时进入容灾模式,继续使用本地缓存,同时降低刷新频率或停止拉取,避免雪崩式重试。
缓存不是盲目相信旧列表。调用失败、健康检查失败或熔断后,应临时摘除异常实例;但也要避免因为短暂网络抖动把全部实例摘空,可以保留最小可用集合。
注册中心要多节点部署、数据复制、选主或一致性保护,并持久化关键元数据。不同系统可能在 CP 和 AP 上取舍,答题时要说明读写可用性和一致性的边界。
恢复后客户端不能直接假设缓存正确,要按版本或全量拉取重新同步实例列表、路由和权重,处理故障期间的新注册、下线和扩容信息。
如果客户端有本地缓存且业务调用不经过注册中心,可以继续调用已有实例;新实例发现、下线感知和配置变更会受影响。
可能包含已经下线或故障的实例,所以要配合调用失败摘除、健康检查、熔断和恢复后的全量同步。
取决于业务。服务发现通常更重视读可用和容忍短时间旧数据,但注册、配置、权重等关键变更可能需要更强一致性约束。
客户端刷新要做退避、分批、版本校验和权重渐进生效,避免所有实例同时重连或路由突变。