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