Yihui’s Blog

微服务配置中心如何设计?配置变更后如何实时通知服务?

日期:2026-07-12
标签:#面试 #八股 #后端 #配置中心 #微服务 #系统设计

一句话答案

配置中心由高可用存储、版本模型、权限审计、发布控制和订阅通知组成;客户端长轮询/长连接监听变更,拉取完整版本并原子应用,失败继续使用最后有效配置。

面试口语版

配置按 namespace、应用、环境、集群和 key 组织,每次发布生成不可变版本、校验和、操作者和审计记录。控制面提供草稿、校验、审批、灰度、发布和回滚;存储层使用共识系统或可靠数据库。客户端启动先拉取配置并保存本地快照,再通过长轮询、SSE/gRPC stream 或 watch 订阅版本变化。通知只表示“有新版本”,客户端拉取完整配置、校验、构建新对象后原子替换,监听器异步执行,避免半更新。敏感配置加密并由 KMS 管理。

架构图

flowchart LR
  A[控制台审批发布] --> B[版本化高可用存储]
  B --> C[通知服务]
  C --> D[客户端订阅]
  D --> E[拉取校验新版本]
  E --> F[原子应用与本地快照]

关键细节

  • 推送只作通知,客户端拉取可减少丢消息和大包广播问题。
  • 配置 Schema、范围和依赖校验在发布前完成。
  • 变更应支持分批实例、租户或标签灰度。
  • 监控各实例实际生效版本和失败原因。

面试官追问

  1. 如何避免配置更新一半导致状态不一致?
  2. 通知丢失怎么办?
  3. 配置灰度如何实现?

面试官追问参考答案

1. 如何避免配置更新一半导致状态不一致?

把同一发布单视为一个不可变配置快照,客户端完整拉取、校验和预构建,全部成功后原子替换引用;失败保留旧版本。多个关联 Key 不应逐个回调立即生效。

2. 通知丢失怎么办?

客户端维持长轮询/Watch 并在断线重连时携带当前版本,服务端返回最新版本;同时定期校准版本。通知是加速器,版本比较和主动拉取保证最终收敛。

3. 配置灰度如何实现?

发布规则按实例标签、集群、租户或百分比分组,配置中心为不同组返回对应版本。观察错误率和业务指标后逐步扩大,异常时将目标版本指针切回旧版。

学习清单

  • 能拆出存储、发布、通知和客户端。
  • 理解版本、原子应用和灰度。
Maintained by · YihuiEdit on GitHub

Keep reading

View all posts