Skip to content

配置中心

配置中心是微服务架构中统一管理配置的组件,解决了配置分散、动态更新、环境隔离的问题。配置中心支持配置的集中管理、版本控制、灰度发布、动态刷新。

为什么需要配置中心

配置分散:每个服务有自己的配置文件,配置分散在代码库中,难以管理。

动态更新:修改配置需要重新部署服务,无法实时生效。

环境隔离:开发、测试、生产环境的配置容易混淆,可能导致生产事故。

敏感信息:数据库密码、API Key 等敏感信息明文存储在配置文件中,存在安全风险。

配置中心的优势:集中管理(所有配置在一处管理)、动态更新(配置修改实时生效)、环境隔离(不同环境隔离管理)、权限控制(细粒度的访问控制)、审计日志(配置变更记录)。

配置中心的核心功能

配置管理:配置的增删改查、版本管理、回滚。

配置推送:配置变更后推送给服务实例,支持灰度发布。

配置加密:敏感配置加密存储,解密后使用。

配置监听:服务监听配置变更,实时更新本地配置。

配置格式:支持多种格式(Properties、YAML、JSON、XML)。

配置校验:配置变更时校验格式和合法性。

主流配置中心

Apollo

Apollo 是携程开源的配置中心,由 Config Service、Admin Service、Portal、Client 组成。

Config Service:配置服务,提供配置读取接口,集群部署。

Admin Service:配置管理服务,提供配置管理界面和 API,集群部署。

Portal:Web 管理界面,管理配置和项目。

Client:客户端 SDK,嵌入在应用中,从 Config Service 读取配置,监听配置变更。

Apollo 的特性:增量推送(只推送变更的配置)、灰度发布(按 IP 或百分比灰度)、配置审计(配置变更记录)、权限管理(细粒度的访问控制)。

Apollo 的架构:Config Service 无状态,可以水平扩展。Admin Service 有状态(数据库),通过数据库保证一致性。

Apollo 的优势:功能完善、稳定性好、社区活跃。

Apollo 的问题:依赖 MySQL、部署复杂(需要多个组件)。

Nacos Config

Nacos Config 是 Nacos 的配置管理模块,与服务注册集成在一起。

Nacos Config 的特性:配置管理(Web 界面管理配置)、动态推送(长轮询或 WebSocket)、配置加密(支持加密配置)、配置回滚(版本管理)、灰度发布(按 IP 或标签灰度)。

Nacos Config 的优势:部署简单(一个组件同时提供服务发现和配置管理)、性能高(支持十万级配置)、生态完善(Spring Cloud Alibaba 集成)。

Nacos Config 的问题:稳定性有待验证、文档不完善。

Spring Cloud Config

Spring Cloud Config 是 Spring Cloud 的配置中心,由 Config Server 和 Config Client 组成。

Config Server:配置服务器,从 Git 仓库读取配置,提供 REST API。

Config Client:客户端 SDK,从 Config Server 读取配置,支持配置刷新(@RefreshScope)。

Spring Cloud Config 的特性:版本管理(基于 Git)、配置加密(支持加密属性)、动态刷新(通过 /refresh 端点刷新)、简单易用(与 Spring 生态集成)。

Spring Cloud Config 的问题:无 Web 管理界面、需要手动刷新配置、不支持实时推送。

Consul KV

Consul KV 是 Consul 的键值存储功能,可以用于配置管理。

Consul KV 的特性:强一致性(基于 Raft)、Watch 机制(配置变更通知)、多数据中心支持。

Consul KV 的问题:不支持配置版本管理、无 Web 管理界面、配置格式有限(只能存储字符串)。

Etcd

Etcd 是 CoreOS 的分布式键值存储,用于 Kubernetes 的配置管理。

Etcd 的特性:强一致性(基于 Raft)、Watch 机制(配置变更通知)、高性能(支持并发读写)。

Etcd 的问题:不支持配置版本管理、无 Web 管理界面、配置格式有限。

配置中心的设计模式

配置拉取

客户端定期从配置中心拉取配置,简单高效但实时性差。可以通过长轮询或 WebSocket 提高实时性。

配置推送

配置中心变更后主动推送给客户端,实时性好但实现复杂。需要维护客户端连接,处理断线重连。

混合模式

客户端启动时拉取配置,配置中心变更后推送更新,结合了拉取和推送的优势。

配置中心的最佳实践

配置分层:通用配置(所有服务共享)、应用配置(单个服务专用)、环境配置(开发、测试、生产)、实例配置(特定实例覆盖)。

配置命名:使用点分隔的命名空间,如 application.name.server(应用名.服务名.配置项)。

配置校验:配置变更时校验格式和合法性,避免错误配置导致服务故障。

配置回滚:配置变更前备份,支持快速回滚,避免错误配置影响业务。

配置加密:敏感配置加密存储,解密后使用。可以使用 KMS(密钥管理服务)管理加密密钥。

配置灰度:配置变更先推送给少量实例,验证后再全量推送,降低风险。

配置审计:记录配置变更历史,包括变更人、变更时间、变更内容,便于问题排查。

配置降级:配置中心故障时,服务使用本地缓存的配置启动,避免服务不可用。

配置中心是微服务架构的基础组件,理解配置中心的原理和权衡,有助于设计合适的配置管理方案。