1、配置中心概述
配置中心是集中管理配置信息的组件。它通常提供配置变更、配置推送、历史版本版本管理、灰度发布、配置变更审计等功能。通过这些功能可以降低分布式系统中管理配置信息的成本,降低因错误的配置信息变更带来可用性下降甚至发生故障的风险。
2、配置信息的管理方式
2.1、使用配置文件
在集中式开发架构中通常使用此种方法。在系统部署到生产环境后,如果需要修改一个配置信息,则需要先登录到服务上修改信息,然后刷新配置文件或重启服务。
这种管理配置信息的方式虽然简单方便,但因为没有集群,所以无法保证服务的高可用。
2.2、使用数据库
网站的系统配置信息大都是存储到数据库的。以MySQL为例,可以把表设计成Key和Value两列,Key是主键,Value是值。
如表:
Key | Value |
---|---|
Sitename | 刘先生的个人博客 |
2571535319@qq.com | |
Filetype | |.gif|.jpg|.swf|.rar| |
Filesize | 4096 |
这种方法需要单独创建表或者字段,且不能主动刷新。所以,这种方式不能很好地满足分布式系统的配置需求。
在分布式系统中,构建 、发布、配置、上线这些过程如果没有一套科学完整的体系,则会非常复杂、烦锁。它涉及将软件包(JAR、WAR等)分发到多台机器中,如果需要修改配置信息,则不能按集中式的管理办法来实施,需要有一个专业的配置中心来实现分布式系统的配置信息变更,比如:线程池、连接池大小、开关、预案、限流配置、功能特性切换、数据源主备容灾切换、路由规则等。
2.3、使用配置中心
在微服务架构下,可以使用诸如Spring Cloud Config、Apollo、Nacos等专业的配置中心来管理配置信息。通过配置中心,可以动态刷新(自动或手动)配置信息到应用程序中,使修改及时生效。
3、对比主流配置中心
开源的配置中心有很多,比如,360的QConf、淘宝的DIamond、百度的Disconf、携程的Apollo、Apache Commons Configuration、Owner、Cfg4J、Spring Cloud Config等。
主流配置中心对比:
功能 | Spring Cloud Config | Apollo | Nacos | Disconf |
---|---|---|---|---|
开源时间 | 2014年9月 | 2016年5月 | 2018年6月 | 2014年9月 |
单机部署 | Config Server Git Spring Cloud Bus | Apollo-quickstart MySQL | Nacos单节点 | 支持 |
配置实时推送 | 支持(基于Spring Cloud Bus) | 支持(HTTP 长轮询1s内) | 支持(HTTP 长轮询1s内) | 支持 |
分布式部署 | Config Server Git MQ Spring Cloud Bus | Config Admin Portal MySQL | Nacos MySQL | Disconf MySQL |
版本管理 | 支持 | 支持 | 支持 | 支持 |
配置回滚 | 支持 | 支持 | 支持 | 支持 |
灰度发布 | 支持 | 支持 | 支持 | 支持 |
权限管理 | 支持 | 支持 | 支持 | 支持 |
集群 | 支持 | 支持 | 支持 | 支持 |
多环境 | 支持 | 支持 | 支持 | 支持 |
监听查询 | 支持 | 支持 | 支持 | 支持 |
配置锁 | 支持 | 不支持 | 不支持 | 不支持 |
数据一致性 | Git保证数据一致性 | 数据库模拟消息队列 | HTTP异步通知 | 无 |
配置界面 | 无 | 统一界面 | 统一界面 | 统一界面 |
单点故障 | 支持HA部署 | 支持HA部署 | 支持HA部署 | 支持HA部署,高可用由Zookeeper提供 |
对Spring Cloud的支持 | 支持 | 支持 | 支持 | 支持 |
Spring Cloud Config功能全面、强大、可以无缝地和Spring体系相结合,使用方便简单。