日期:2026-07-12
标签:#面试 #八股 #后端 #配置中心 #微服务 #系统设计
一句话答案
配置中心由高可用存储、版本模型、权限审计、发布控制和订阅通知组成;客户端长轮询/长连接监听变更,拉取完整版本并原子应用,失败继续使用最后有效配置。
面试口语版
配置按 namespace、应用、环境、集群和 key 组织,每次发布生成不可变版本、校验和、操作者和审计记录。控制面提供草稿、校验、审批、灰度、发布和回滚;存储层使用共识系统或可靠数据库。客户端启动先拉取配置并保存本地快照,再通过长轮询、SSE/gRPC stream 或 watch 订阅版本变化。通知只表示“有新版本”,客户端拉取完整配置、校验、构建新对象后原子替换,监听器异步执行,避免半更新。敏感配置加密并由 KMS 管理。
架构图
flowchart LR
A[控制台审批发布] --> B[版本化高可用存储]
B --> C[通知服务]
C --> D[客户端订阅]
D --> E[拉取校验新版本]
E --> F[原子应用与本地快照]
关键细节
- 推送只作通知,客户端拉取可减少丢消息和大包广播问题。
- 配置 Schema、范围和依赖校验在发布前完成。
- 变更应支持分批实例、租户或标签灰度。
- 监控各实例实际生效版本和失败原因。
面试官追问
- 如何避免配置更新一半导致状态不一致?
- 通知丢失怎么办?
- 配置灰度如何实现?
面试官追问参考答案
1. 如何避免配置更新一半导致状态不一致?
把同一发布单视为一个不可变配置快照,客户端完整拉取、校验和预构建,全部成功后原子替换引用;失败保留旧版本。多个关联 Key 不应逐个回调立即生效。
2. 通知丢失怎么办?
客户端维持长轮询/Watch 并在断线重连时携带当前版本,服务端返回最新版本;同时定期校准版本。通知是加速器,版本比较和主动拉取保证最终收敛。
3. 配置灰度如何实现?
发布规则按实例标签、集群、租户或百分比分组,配置中心为不同组返回对应版本。观察错误率和业务指标后逐步扩大,异常时将目标版本指针切回旧版。
学习清单
- 能拆出存储、发布、通知和客户端。
- 理解版本、原子应用和灰度。