60 秒回答模板

注册中心是服务发现的控制面,不应该成为每次业务调用的数据面强依赖。它挂掉时,已有客户端应使用本地缓存的最后可用服务列表继续调用,并结合健康检查、失败摘除和限流保护;注册中心自身要多副本部署、持久化关键元数据,并允许短时间读旧数据。故障期间新服务注册、实例下线和配置变更会受影响,恢复后要重新拉取、校验版本并修正过期实例。

考点 核心机制与工程取舍
难度 中高频面试题
回答目标 按定义、机制、场景讲清楚

深入解析

01

先分控制面

注册中心负责实例注册、发现和变更通知,真实 RPC/HTTP 调用通常是客户端直连服务实例。注册中心异常不应立刻让所有已有调用中断。

02

客户端缓存

客户端要缓存服务列表、路由规则和最后成功版本。注册中心不可用时进入容灾模式,继续使用本地缓存,同时降低刷新频率或停止拉取,避免雪崩式重试。

03

实例健康

缓存不是盲目相信旧列表。调用失败、健康检查失败或熔断后,应临时摘除异常实例;但也要避免因为短暂网络抖动把全部实例摘空,可以保留最小可用集合。

04

注册中心高可用

注册中心要多节点部署、数据复制、选主或一致性保护,并持久化关键元数据。不同系统可能在 CP 和 AP 上取舍,答题时要说明读写可用性和一致性的边界。

05

恢复一致性

恢复后客户端不能直接假设缓存正确,要按版本或全量拉取重新同步实例列表、路由和权重,处理故障期间的新注册、下线和扩容信息。

易错点

  • 把注册中心当成每次业务调用都必须同步访问的组件。
  • 只说多副本部署,不讲客户端本地缓存和容灾模式。
  • 缓存旧服务列表后不做失败摘除,持续打到坏实例。
  • 忽略恢复后的版本同步和路由修正,导致故障后状态长期不一致。

面试官追问

注册中心挂了,已有服务还能调用吗?

如果客户端有本地缓存且业务调用不经过注册中心,可以继续调用已有实例;新实例发现、下线感知和配置变更会受影响。

客户端缓存有什么风险?

可能包含已经下线或故障的实例,所以要配合调用失败摘除、健康检查、熔断和恢复后的全量同步。

注册中心应该选 CP 还是 AP?

取决于业务。服务发现通常更重视读可用和容忍短时间旧数据,但注册、配置、权重等关键变更可能需要更强一致性约束。

如何避免注册中心恢复后流量抖动?

客户端刷新要做退避、分批、版本校验和权重渐进生效,避免所有实例同时重连或路由突变。