随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址……
对程序配置的期望值也越来越高:配置修改后实时生效,分环境、分集群管理配置,代码安全、审核机制……
在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。
所以,配置中心应运而生。
目前公司使用阿里云管理所有服务,原因是为了降低运维成本——傻瓜式运维。
服务部署使用edas,配置管理使用acm。
将所有代码中的基础依赖(如数据库、分布式存储等)相关配置回收到配置中心(acm或其他开源工具)管理,提升安全性,使资源可复用,减少因版本差异带来的开发工作量。
方案 | 优点 | 缺点 | 备注 |
---|---|---|---|
edas-acm | 运维介入少,便于维护 | 扩容不方便,每次扩容都要重新为ecs实例单独授权,授权期间扩容实例服务不可用(4xx、5xx) | edas团队有优化计划,但目前无排期 |
第三方 | 扩容方便 | 运维成本较高(服务器、人力),负载能力、稳定性待验证 |
由于Disconf不再维护,下面对比一下Spring Cloud Config、Apollo和Nacos。
功能点 | Spring Cloud Config | Apollo | Nacos |
---|---|---|---|
开源时间 | 2014.9 | 2016.5 | 2018.6 |
配置实时推送 | 支持(Spring Cloud Bus) | 支持(HTTP长轮询1S内) | 支持(HTTP长轮询1S内) |
版本管理 | 支持(Git) | 支持 | 支持 |
配置回滚 | 支持(Git) | 支持 | 支持 |
灰度发布 | 支持 | 支持 | 待支持 |
权限管理 | 支持 | 支持 | 待支持 |
多集群 | 支持 | 支持 | 支持 |
多环境 | 支持 | 支持 | 支持 |
监听查询 | 支持 | 支持 | 支持 |
多语言 | 只支持java | Go、C++、java、Python、PHP、.net、OpenAPI | Python、Java、Node.js、OpenAPI |
单机部署 | Config-server+Git+Spring Cloud Bus(支持配置实时推送) | Apollo-quikstart+MySQL | Nacos单节点 |
分布式部署 | Config-server+Git+MQ(部署复杂) | Config+Admin+Portal+MySQL(部署复杂) | Nacos+MySQL(部署简单) |
配置格式校验 | 不支持 | 支持 | 支持 |
通信协议 | HTTP和AMQP | HTTP | HTTP |
数据一致性 | Git保证数据一致性,Config-server从Git读数据 | 数据库模拟消息队列,Apollo定时读消息 | HTTP异步通知 |
单机读 | 7(限流所致) | 9000 | 15000 |
单机写 | 5(限流所致) | 1100 | 1800 |
3节点读 | 21(限流所致) | 27000 | 45000 |
3节点写 | 5(限流所致) | 3300 | 5600 |
文档 | 详细 | 详细 | 有待完善(目前只有java开发相关文档) |
Spring Cloud Config
依赖git,使用局限性较大。 首先会进一步跟进阿里云edas优化的排期,但是眼下好像是很渺茫... ...
其次,如果接入开源配置中心,根据以上数据分析,建议使用Apollo(功能完善,但是配置复杂)或nacos(功能简单,配置简单,能满足要求,但是文档不够丰富)。
最终还是选择等待阿里云做优化了...
吐槽:时间都浪费在LD的犹豫和不明确表达需求上...