开源分布式配置中心选型
热门的开源分布式配置中心对比如下:
对比项目 | 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、海航等 |
详细对比,参见官方文档:
1、https://github.com/ctripcorp/apollo/wiki/
2、https://github.com/knightliao/disconf
其他开源配置管理中间件
名称 | 特性 |
Xdiamond | 1、基于数据库做配置存储 2、相对于diamond增加了权限设计,结合Secret key,保证配置的安全 3、配置缓存在本地,防止应用因为网络问题而不能启动 |
Qconf | 1、奇虎 360 内部分布式配置管理工具 2、用C/C++编写,支持c/c++、shell、php、python 等语言 3、应用Zookeeper做集群管理 4、多进程的情况下,QPS 能够达到百万 |
etcd | 1、使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性 |
Spring Cloud Config Server | 主要用于Spring cloud体系 |
CFG4J | 只支持java,容易和spring集成。 |
OWNER | http://owner.aeonbits.org/docs/loading-strategies/ 只支持java,容易和spring集成。 |
综合对比,我觉得 携程的Apollo 是最先进的,功能最强大和完善,文档也写得清楚。其次是 Disconf,它比Apollo早诞生一年,可能要比Apollo成熟一点,但是Apollo的人气有超越Disconf的趋势,GitHub上的watch和star数量已经接近Disconf了。