简介
Diamond是分布式配置中心,提供配置实时推送服务,保证99.9稳定性,从近三年都达到99.99稳定性。具有完备容灾机制,支持百万配置管理、百万客户端连接,通过控制台、客户端API,发布、变更配置值,借助Diamond提供配置变更推送功能,可以实现不重启应用而获取最新的配置值。
概念
Group ID
分组名称,一般用应用名作为group ID
Data ID
数据标示,采用类似package的命名规则保证全局唯一性
容灾机制
diamond最出名的就是容灾机制了,就如diamond这个名字一样,钻石恒久远 一颗永流传。
客户端按照固定顺序去不同数据源获取配置信息,首先是去容灾目录获取配置,然后是去diamond server的磁盘获取配置信息,如果diamond server端不可用,就从本地客户端缓存读取配置信息。
配置存放位置:本地容灾目录,本地client缓存,diamond server 磁盘,主数据库,备数据库
所以除非上述存放数据的地方全挂了,diamond才无法使用。
diamond流程
获取diamond server地址信息
当diamond client启动时,先从http server获取diamond server地址列表,并且本地保存一份该地址列表,当下次从http server获取不到地址列表时,会使用本地的地址列表。
获取配置信息
如上图容灾机制图,按照固定的顺序去不同数据源获取配置信息。server本地存放所有配置的md5编码,client本地存放订阅配置的md5,client定时请求server确认配置信息是否有变动
写配置信息
server先将数据写入mysql,然后写入本地磁盘,接着通知其他server从mysql更新配置。
长轮询机制
客户端向diamond server发起一个请求,确认配置信息有没有变化,diamond server会将客户端的配置md5与自身保存的配置md5 比较,如果md5都一样,则将该请求维持30s,如果30s内diamond server持有的客户端订阅的配置没有变化,则结束该请求。如果配置信息有变化则返回变化数据的id,然后客户端根据变化数据的ID去diamond server获取最新的配置信息。