集中配置分析
场景需求
- 服务增多,机器增多,需要对不同服务的多个机器的配置更新简单化,一次性全部,自动发现主动变更。
- 统一平台管理,方便操作。
- 能够回滚。
- 能够处理异常情况,如 断网,机器退出。
- 配置更新要及时,读取要快。
- 不同环境的支持。
- 配置方便地导入和导出。
场景特点
- 读多写少,读取可采用无锁方案(乐观方式+版本号或者md5方式)
- 只在本地不存在时或者远端更新了,客户端菜从配置中心拉取最新配置。
- 配置文件一般相对很小,可以使用分布式一致组件自带的存储空间进行存储
360 QConf 实现分析
功能比较全面,实现起来相比较Diamond、Disconf等稍简单些。
整体思路如下:
- zk作为变更的通知,服务端有单独线程watch配置变更,一发现变更,客户端注册事件。
- 事件处理线程处理事件,将变更入写队列
- 配置信息存储在内存中(共享内存),以kv的方式
- 客户端从kv中读取不到配置时,加入客户端的mq中,mq线程处理不命中,将需要写入的值序列化,入写队列
- 单独线程定时遍历共享内存,检查配置是否最新,有失效的,获取最新的,将变更入写队列
- 持久化采用本地文件方式,定时dump共享内存到文件中,出现故障时,可以保证有配置可读
- 数据通信采用的是http方式。
单一的写端,使得可以用乐观的方式读取配置。通过配置的md5值来校验是否当前是最新的配置信息
网友评论