1 开源配置中心对比矩阵
调研于 18 年 10 月
重要性 | spring-cloud-config | ctrip apollo | 百度 disconf | 淘宝 diamond | ||
概况 |
Github 地址
929star,688fork 始于 2014,最后更新 8 天前 |
Github地址
6007star,2187fork 始于2016,最后更新 3天前 文档见 github wiki |
Github 地址
3935star,1880fork 文档地址 始于 2014,作者去滴滴了,2016 停止维护 |
Github
203star,247fork 官方开源地址 团队博客 始于 2012,2014 停止维护 |
||
外部依赖 | RabbitMQ 或 Kafka | MySQL | Mysql、zookeeeper、Redis | |||
功能特性 | ||||||
静态配置管理 | 高 | 基于 file | 支持 | 支持 | ||
动态配置管理 | 高 | 支持 | 支持 | 支持 | ||
统一管理 | 高 | 无,需要 github | 支持 | 支持 | ||
多维度管理 | 中 | 无,需要github |
支持 以项目为坐标,每项目下多环境 |
支持 以环境为坐标,一环境下多项目 |
||
本地配置缓存 | 高 | 无 | 支持 | 支持 | ||
配置生效时间 | 高 |
重启生效,或手动 refresh 生效。 实时生效需要 git webhook + rabbitmq |
实时 | 实时 | ||
配置更新推送 | 高 | 需要手工触发 | 支持 | 支持 | ||
配置定时拉取 | 高 | 无 | 支持 | 依赖事件驱动,client 重启或者 server 端推送操作 | ||
用户权限管理 | 中 | 无,需要 github | 支持 | 支持 | ||
授权、审核、审计 | 中 | 无,需要 github | 支持 | 无 | ||
配置版本管理 | 高 | Git 做版本管理 | 界面上直接提供发布历史和回滚按钮 | 操作记录有落数据库,但无查询接口 | ||
配置合规检测 | 高 | 不支持 | 支持(但还需完善) | |||
实例配置监控 | 高 | 需要结合springadmin | 支持 | 支持,可以查看每个配置在哪些机器上加载 | ||
灰度发布 | 中 | 不支持 | 支持 | 不支持 | ||
告警通知 | 中 | 不支持 | 支持,邮件方式告警 | 支持,邮件方式告警 | ||
技术路线 | ||||||
支持SpringBoot | 高 | 原生支持 | 支持 | 与 spring boot 无相关 | ||
支持 SpringCloud | 高 | 原生支持 | 支持 | 与 spring cloud 无相关 | ||
客户端支持 | 低 | Java | Java、.Net | java | ||
业务系统侵入性 | 高 | 侵入性弱 | 侵入性弱 | 侵入性弱 | ||
依赖组件 | 高 | Eureka | Eureka | zookeeper | ||
可用性 | ||||||
单点故障(SPOF) | 高 | 支持 HA 部署 | 支持 HA 部署 | 支持 HA 部署,高可用由 zookeeper 保证 | ||
多数据中心部署 | 高 | 支持 | 支持 | 支持 | ||
配置获取性能 | 高 | unkown | unkown(官方说比spring快) | |||
易用性 | ||||||
配置界面 | 中 | 无,需要通过 git 操作 | 统一界面(ng 编写) | 统一界面 | ||
配置文档 | 中 | 配置数据库、git地址、kafka | 配置数据库信息 | 配置数据库、redis、zookeeper | ||
案例 |
2 最终选择
根据上述对比,主要在 Spring Cloud Config 与 Ctrip Apollo 之间选择,最终选择了Apollo,主要原因是:
- Spring Cloud Config:部署少,依赖多,功能基础
- 部署 ConfigService,依赖 Git 和 Spring Cloud Bus(可选 kafka、rabbitmq 等实现)
- Ctrip Apollo:部署多,依赖少,功能全面
- 部署 portal、adminService(每个环境一套)、configService(每个环境一套),依赖 mysql(每个环境一套)