开源分布式配置中心选型
2017年11月05日


热门的开源分布式配置中心对比如下:


对比项目Diamond(阿里2011年)Disconf(百度个人2015)Apollo(携程2016)
配置存储存储在mysql上存储在mysql上mysql
推拉模型拉模型,每隔15s拉一次全量数据基于Zookeeper的推模型,实时推送基于http长连接,实时推送
配置读写支持实例对配置读写。支持某台实例写配置数据,并广播到其它实例上只支持实例对配置读。通过在disconf-web上更新配置到达到广播写到所有应用实例

同disconf

容灾多级容灾模式,配置数据会dump在本地,避免中心服务挂机时无法使用  多级容灾模式,优先读取本地配置文件多级容灾模式,本地有缓存。
配置
数据模型
只支持KV结构的数据,非配置文件模式支持传统的配置文件模式(配置文件),亦支持KV结构数据(配置项)集中配置,本地缓存。
功能特性需要地址服务器,客户端连接到地址服务器,取回diamond服务器的地址列表
1、对配置进行持久化管理并对外提供restful接
2、注解式编程,需要Spring编程环境
3、支持配置的上传、下载
4、支持分布式环境下的主备竞争

统一管理不同环境、不同集群的配置

配置修改实时生效(热发布)

版本发布管理

灰度发布

权限管理、发布审核、操作审计

客户端配置信息监控

提供Java和.Net原生客户端

提供开放平台API

集群
数据同步
基于数据库和本地文件
1、server写数据时,先将数据写入mysql,然后写入本地文件
2、client订阅数据时,访问的是本地文件,不查询数据库,这样即使数据库出问题了,仍然不影响client的订阅
3、通过比较client和server的数据的MD5值感知数据变化
基于zookeeper实现对配置更改的实时推送
全局分布式一致性锁来实现主备统一部署、系统异常时的主备自主切换
全局分布式,基于Eureka作为服务注册中心
优点简单、可靠、易用基于分布式的Zookeeper来实时推送稳定性、实效性、易用性上均优于diamond携程开源巨作,功能强大,设计周到,Web界面美观实用,文档比较全。
缺点1、无访问修改权限控制
2、对于未来可能要做的基于SOA架构的服务注册发现,功能上有所欠缺
源码较多,阅读和使用起来相对较复杂较新
使用案例淘宝内部绝大多数系统的配置,由diamond来进行统一管理。包括 百度、滴滴出行、银联、网易、拉勾网、苏宁易购、顺丰科技 等知名互联网公司正在使用!携程、转转、网易严选、航旅纵横、沪江网、5173、海航等

2017-12-24_212027.png 

详细对比,参见官方文档:

1、https://github.com/ctripcorp/apollo/wiki/

2、https://github.com/knightliao/disconf


其他开源配置管理中间件

名称特性
Xdiamond1、基于数据库做配置存储
2、相对于diamond增加了权限设计,结合Secret key,保证配置的安全
3、配置缓存在本地,防止应用因为网络问题而不能启动
Qconf1、奇虎 360 内部分布式配置管理工具
2、用C/C++编写,支持c/c++、shell、php、python 等语言
3、应用Zookeeper做集群管理
4、多进程的情况下,QPS 能够达到百万
etcd1、使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性
Spring Cloud Config Server主要用于Spring cloud体系
CFG4J

http://www.cfg4j.org/

只支持java,容易和spring集成。

OWNER

http://owner.aeonbits.org/docs/loading-strategies/

只支持java,容易和spring集成。


综合对比,我觉得 携程的Apollo 是最先进的,功能最强大和完善,文档也写得清楚。其次是 Disconf,它比Apollo早诞生一年,可能要比Apollo成熟一点,但是Apollo的人气有超越Disconf的趋势,GitHub上的watch和star数量已经接近Disconf了。