您的位置:首页 > 其它

淘宝diamond

2015-07-31 16:53 267 查看

一、diamond简介

        diamond是淘宝内部使用的一个管理持久配置的系统。为应用系统提供获取配置的服务,应用不仅可以启动时从diamond获取相关配置,而且可以在运行中对配置数据的变化进行感知并获取变化后的配置数据。

二、diamond架构图



三、diamond核心原理

1. diamond-server集群的数据同步

diamond-server写数据时,先写入MySQL数据库,然后再写入本地缓存文件,写完后发送HTTP请求给集群中其它diamond-server,其它diamond-server收到请求后,从MySQL数据库中读取刚刚写入的数据至本地文件。
diamond-server启动后会启动一个定时任务,定时从MySQL中拉取所有数据至本地文件。

2. diamond-client获取diamond-server地址

diamond-client需要绑定域名服务器(地址服务器),域名服务器上有一个静态文件存储这diamond服务器的地址列表,客户端启动时,根据自身的域名绑定,连接到域名服务器,取回diamond-server服务器的地址列表,从中随机选择一台diamond服务器进行连接。
diamond-client启动后会启动一个定时任务,定时从域名服务器上获取地址列表并保存到本地文件中。

3. diamond-client主动获取数据

diamond-client调用getAvailableConfigInfomation(),即可获取一份最新的可用的配置数据。
为防止短时间出现大量请求,diamond-client实现了一个带有过期时间的缓存,在过期时间内的请求直接返回缓存中的数据,不再向diamond-server发出请求。

4. diamond-client运行中感知数据变化

通过比较diamond-client和diamond-server的数据的MD5值,判断数据是否发生变化。
diamond-server启动时,会将所有数据的MD5加载到内存中(MD5存储在MySQL数据库中),并且启动一个定时任务,定时去diamond-server检查数据是否发生变化。若MD5相同,则返回一个不变字符串给diamond-client,否则返回dataId和group给diamond-client,diamond-client根据dataId和group去diamond-server请求数据。

四、diamond容灾

diamond-server采用“数据库+本地文件”的方式存储数据
diamond-server是一个集群
diamond-client保存snapshot



五、diamond适用场景

持久配置的统一管理(配置内容很少发生变化、一般为手动发布配置信息)
运行时接收配置变化并处理

六、参考文献

diamond专题(二)http://jm-blog.aliapp.com/?p=1592
diamond专题(三)http://jm-blog.aliapp.com/?p=1606
diamond专题(四)http://jm-blog.aliapp.com/?p=1617

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  淘宝 diamond