配置中心
配置中心分发应用参数,并管理变更历史。本文负责快照校验、刷新方式与版本回退。
1. 面试核心
先记住这几条,再读正文- 原子切换。 动态配置通过校验后的不可变快照切换生效。卡 · 启动配置与运行时配置
- 版本与进度。 发布版本标识一次配置内容,实例版本反映实际应用进度。
- 环境变量。 环境变量引用 ConfigMap 时,更新需要重建 Pod。卡 · ConfigMap 刷新方式
- 挂载文件。 ConfigMap 普通卷最终更新文件,应用仍需重新读取。
- 回退范围。 配置回退恢复后续行为,已有数据变化需单独修复。
2. 启动配置与运行时配置
JVM 启动参数在进程创建时读取。限流阈值与功能开关可由应用实现动态刷新。
每项声明读取时机、默认值和合法范围。动态项还需说明副作用与资源替换方式。协议和表结构变更交由兼容迁移处理。
3. 完整快照
通知与拉取快照是一种配置分发方案。通知表示需要检查更新,客户端随后拉取完整内容。周期校正可恢复漏掉的通知。
解析与业务校验在候选快照上完成。通过后原子替换引用,请求读取同一份快照。逐字段更新会暴露中间组合。
有可靠增量协议时,也可维护版本化增量。恢复失败则重新获取完整状态。
4. schema 校验
发布前校验类型、必填项、范围和字段关系。资源引用与应用版本兼容性也需检查。
客户端再次校验,以覆盖不同版本的能力差异。校验失败时保留旧快照,并报告拒绝原因。配置结构正确后,还需验证其业务值是否安全。
5. 版本与审计
发布记录保存内容摘要、环境、作者和原因。实例暴露已接收版本与实际生效版本。
应用版本分布能定位未更新实例。发布成功表示控制面接受变更,实例生效需独立确认。
版本语义由协议定义。自建系统可用单调发布序号,避免按客户端时间排序。
6. 配置灰度
配置可以按集群或实例标签分批应用。需要用户级开关时,应用按稳定用户键选择配置。
高风险参数一次改变一个主要变量。观察错误、延迟和资源占用后再扩大范围。放量判断见灰度发布。
7. 回滚
在不可变发布模型中,回滚重新发布旧内容。新发布保留审计关系,并使用新的发布标识。
回退前检查旧值仍适配当前代码。配置已触发数据转换时,兼容读取与补偿另行处理。
8. 密钥管理
密钥使用独立存储、权限和审计。配置中心保存密钥引用,或提供隔离的密钥能力。
配置 diff、日志与诊断接口需脱敏。轮换时允许新旧凭据短期并存。所有实例完成切换后,再撤销旧凭据。
9. 刷新监控
监控接收延迟、应用延迟、拒绝原因和版本分布。业务指标可关联到配置版本。
连接池等对象需先构造并验证,再切换引用。旧资源按在途使用情况关闭。部分刷新失败时,按预设策略回退或转为未就绪。
10. ConfigMap 刷新方式
Kubernetes 中的读取方式决定更新行为。
| 读取方式 | 更新行为 |
|---|---|
| 环境变量 | 现有进程保持原值,需要重建 Pod |
| 普通卷挂载 | kubelet 最终更新文件,应用自行重读 |
subPath 挂载 | 现有挂载不接收 ConfigMap 更新 |
| 直接调用 API | 应用订阅或轮询,并负责应用新值 |
文件更新有 kubelet 同步与缓存传播延迟。只在启动时读取文件的应用仍保留旧配置。滚动重启可用于尚未实现动态重载的应用。
11. 常见问题
11.1 启动时的配置可用性
有效本地快照可支持普通参数的离线启动。授权和密钥配置需验证期限。缺少有效安全配置时,实例保持未就绪。
11.2 动态线程池配置
线程数、队列和拒绝策略需要联合校验。固定容量队列需要替换才能改变容量。调整后观察 active、queue、reject 与任务耗时。
12 · 面试题卡片
12.1 动态配置如何安全生效并支持回滚
出现公司:美团、阿里巴巴
考察重点
- 理解完整快照、版本与原子替换。
- 理解schema、客户端校验和最后有效配置。
- 理解灰度、审计、回滚与不可逆副作用。
相关内容:启动配置与运行时配置至刷新监控。
参考回答
安全刷新需要校验、完整状态切换和实例生效确认。
配置项先声明读取时机与动态更新能力。候选快照通过本地校验后,再切换共享引用。失败时保留旧快照并报告原因。
发布按稳定分组推进,指标关联配置版本。回滚重新发布旧内容,并检查代码兼容性。已经触发的数据变化通过对账或补偿处理。
12.2 ConfigMap 更新后,环境变量和挂载文件都会立即变化吗?
出现公司:暂无已核验的公开来源(本站自测)
考察重点:读取方式、传播延迟与应用重载。
相关内容:ConfigMap 刷新方式。
参考回答
环境变量保留原值,普通卷挂载最终更新文件。
subPath 挂载不接收更新。应用还需重新读取文件并应用配置。只在启动时读取的应用需要滚动重启。