配置管理是系统中的基础服务,例如java的web系统中,常把数据库的配置信息放到jdbc.properties这个配置文件中,这就是一个简单的配置管理 在大型分布式系统中,配置管理的需求更加普遍,例如降级服务 在网站举行大型促销活动时,网站的压力会大大高于平时,这时通常会使用降级的方式减轻压力,即关闭一些非必要的服务,来保证核心业务,那么“关闭”这个动作如何做?就要有一套配置管理系统,可以让运营人员简单的关闭/打开某项服务,并且立即生效,不需要重启服务 大型系统通常是拆分成多个子系统的分布式结构,这些大大小小的子系统部署在不同的服务器中,使用配置文件的方式一定是不行了,那么如何解决? 大概思路 (1)把配置信息都提取出来,放到一个公共的地方存储,例如数据库、redis (2)使用发布/订阅模式,让子系统订阅这些配置信息 (3)做一个配置管理中心,对配置信息进行操作维护 这些实现起来不难,但稳定性需要测试观察,所以自己开发是有一定成本的,现在已经有了专业的开源项目来实现分布式配置管理 例如 百度的 disconf 淘宝的 diamond hadoop的子项目 zookeeper 下面以zookeeper为例,看下他是如何实现分布式配置管理的 整体结构图
整体可以分为3部分 (1)zookeeper集群 提供了稳定的配置管理服务,对外提供了接口,外部可以添加、修改配置信息,可以监听配置的变化 (2)配置管理中心 需要自己开发,负责维护配置信息 (3)各个分布式应用 每个应用只需要调用一下ZK的接口,把自己注册到ZK,就可以自动接收配置的变化信息
各部分的工作关系图
非常简单,只需要配置好zookeeper集群,然后调用相应接口,就可以完成配置管理工作,配置信息的安全性、监听机制、高可用性等等细节都不需要我们实现