微服务一多,配置管理就成了灾难:数据库地址写死在各服务的配置文件里,改个开关要发版,运维半夜改配置改错一台,排查两小时才发现。更乱的是,没人说得清生产环境到底跑的是哪份配置。
核心矛盾是:配置的数量和变更频率随服务规模爆炸,而配置文件的管理方式还停留在单体时代。 配置中心解决三件事:配置集中管理、变更实时生效、版本可回滚可审计。业界有三条主流路线:Spring Cloud Config、Nacos、Apollo。
原理: 配置存在 Git 仓库里,Config Server 从 Git 拉取提供给各服务,配合 Spring Cloud Bus 或手动调用刷新接口实现热更新。Spring 全家桶的原生方案。
优点:
缺点:
适用场景: 纯 Spring 技术栈、配置变更不频繁、改动都是开发人员做的小中型团队。最省事的上路方式。
原理: 阿里开源的动态服务发现与配置管理平台,配置和注册中心二合一。配置存服务端,客户端长轮询监听变更,秒级推送;自带功能完整的管理控制台。国内微服务事实上的主流选择。
优点:
缺点:
适用场景: 国内微服务团队的默认答案,尤其服务发现也一起缺的时候。从几十个服务到几百个服务的规模都撑得住。
原理: 携程开源的分布式配置中心,专职做配置管理:客户端长轮询 + 服务端推送变更,设计上把"配置治理"做到了家——多环境多集群、灰度发布、审批流、细粒度权限。
优点:
缺点:
适用场景: 配置治理要求高的大中型组织:多环境多集群、变更要审批、出问题要能审计到人的场景。金融、电商大厂的标准件。
场景特征 | 推荐方案 |
|---|---|
纯 Spring 栈、变更少、开发自管 | Spring Cloud Config |
微服务团队、配置+注册中心一起要 | Nacos |
多环境多集群、审批审计要求高 | Apollo |
国内团队的常见路径是:早期 Git 管理或 Spring Cloud Config 顶住,服务上规模后迁 Nacos,治理要求高了再评估 Apollo。迁移成本主要在客户端依赖和配置搬家,不算伤筋动骨。
第一件:先给配置分类分级。 哪些配置能热更新(开关、阈值)、哪些必须重启(连接池大小)、哪些是机密(密钥、证书),分类定下来再谈方案。机密配置该进 KMS 而不是配置中心,这条线别模糊。
第二件:配置变更要当代码变更管。 评审、灰度、回滚预案一样不能少。生产事故盘点里,"改配置改出来的"常年占前排,多数死在直接全量生效。
第三件:环境隔离从第一天做起。 dev、test、prod 严格隔离,权限分开。测试环境改配置顺手改到生产的的事故,每个团队都听过不止一回。
配置中心的选型,本质是"配置治理要多重"的问题:小团队求省事,Git 或 Nacos 就够;大组织求可控,Apollo 的重量是值得的。比选型更重要的是纪律——配置变更的流程和敬畏心,比工具更能防事故。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。