Diamond

Diamond用于管理持久化配置。diamond为应用系统提供了获取配置的服务,应用不仅可以在启动时从diamond获取相关的配置,而且可以在运行中对配置数据的变化进行感知并获取变化后的配置数据。最大特点是结构简单,稳定可靠。
架构
在这里插入图片描述

发布流程
1) 写入到数据库
2) 写入本地文件
3) 通知其他服务器
4) 其他服务器同步数据至本地
diamond-server将数据存储在mysql,diamond server本地,diamond client容灾目录,diamond client快照目录(上一次正确配置)中。mysql是中心,diamond认为存储在mysql中的数据绝对正确。
订阅流程
1) 获取diamond server地址列表
client启动时先从http server获取diamond server地址列表,并写入client本地;http server 高于 client本地。当client无法从http server获取地址列表时,client会使用本地保存的地址列表,已保证地址为最新的。
2) client获取配置数据
client从diamond server获取配置数据的过程实际就是一个拼接http url,使用httpclient调用http method的过程,Diamond server收到请求后,不读取数据库而是将本地文件中配置数据返回给client;为了避免短时间内大量请求发送到diamond server,启动获取一次数据后会将数据存到过期缓存和本地容灾文件中,以后都先从缓存和本地获取;
3) 获取数据变化定时更新配置数据
Client启动获取一次数据后,会将该份数据的MD5保存在内存中,并在启动时启动一个定时任务定时去检验数据是否发生变化,如果发生变化了,client自动重新获取配置数据
数据同步
diamond server间:server写数据时,先将数据写入mysql,然后写入本地文件,写入完成后发送一个HTTP请求给集群中的其他server,其他server收到请求,从mysql中dump刚刚写入的数据至本地文件;
mysql与本地间:server启动后会启动一个定时任务,定时从mysql中dump所有数据至本地文件;
client缓存: client端实现了一个带有过期时间的缓存;
client感知数据变化: server会内存所有数据的md5,client内存所有它订阅的配置的md5,client定时通过请求server比对数据是否变化(通过md5)
polling: 如果client感知到数据变化,更新之,并写client本地缓存
配置项数据模型
diamond每个配置的数据模型<Data ID,Group,归属应用,配置格式,配置内容>。
DataID:配置ID,采用类似package.class的命名规则保证全局唯一性;
Group:配置分组,填写产品名(如Diamond)或者模块名,保证唯一性,后续可以根据group进行鉴权;
配置格式:支持TEXT、JSON、XML。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值