没有合适的资源?快使用搜索试试~ 我知道了~
在分布式环境中,出于负载、容错等种种需要,几乎所有的服务都会在不同的机器节点上部署多个实例。而业务项目中又总少不了各种类型的配置文件。因此,我们常常会遇到这样的问题,仅仅是一个配置内容的修改,便需要重新进行代码提交SVN/Git、打包、分发上线的全部流程。当部署的机器有很多时,分发上线本身就是一个很繁杂的工作。何况,配置文件的修改频率又远远大于代码本身。追本溯源,我们认为麻烦的根源是日常管理和发布过程中不加区分配置和代码造成的。配置本身源于代码,是我们为了提高代码的灵活性而提取出来的一些经常变化的或需要定制的内容,而正是配置的这种天生的变化特征给我们带了巨大的麻烦。因此,我们开发了分布式配置管
资源推荐
资源详情
资源评论
360如何用如何用QConf搞定搞定2W+服务器的配置管理服务器的配置管理
设计初衷
在分布式环境中,出于负载、容错等种种需要,几乎所有的服务都会在不同的机器节点上部署多个实例。而业务项目中又总少
不了各种类型的配置文件。因此,我们常常会遇到这样的问题,仅仅是一个配置内容的修改,便需要重新进行代码提交
SVN/Git、打包、分发上线的全部流程。当部署的机器有很多时,分发上线本身就是一个很繁杂的工作。何况,配置文件的修
改频率又远远大于代码本身。
追本溯源,我们认为麻烦的根源是日常管理和发布过程中不加区分配置和代码造成的。配置本身源于代码,是我们为了提高代
码的灵活性而提取出来的一些经常变化的或需要定制的内容,而正是配置的这种天生的变化特征给我们带了巨大的麻烦。
因此,我们开发了分布式配置管理系统QConf,并依托QConf在360内部提供了一整套配置管理服务,QConf致力于将配置内
容从代码中完全分离出来,及时可靠高效地提供配置访问和更新服务。
整体认识
为了让大家对之后的内容有个直观的认识,先来介绍一下如果你要在自己的项目中使用QConf应该怎么做:
首先,需要在自己的机器上部署QConf,QConf采用cmake构建,非常容易。
mkdir build && cd build
cmake ..
make
make install
其次,通过Zookeeper客户端或QConf管理界面在Zookeeper上建立自己的节点结构,节点完整路径便是QConf的key值,以
360公司内部QConf管理界面为例:
最后,选择自己项目的语言版本的QConf库,并在需要需要获得配置内容的位置,直接调用类似于get_conf(key)这样的接口,
并放心每次取得的都是最新鲜出炉的配置。以shell命令为例:
需要说明的是,使用QConf后已经没有所谓的配置文件的概念,你要做的就是在你需要的地方获取正确的内容。我们认为,这
才是你真正想要的。
架构介绍
了解了QConf的设计初衷和对其有了整体认识之后,相信大家已经有一个对QConf实现的猜想。在介绍架构之前,还需要向大
家申明一下我们对配置信息的定位,因为这个定位直接决定了我们的结构设计和组件选择。
1、单条数据量小
2、更新频繁(较代码而言)
3、配置总数可能巨大,但单台机器关心配置数有限
4、读多写少
进入主题,开始介绍QConf的架构实现,下图展示的是QConf的基本结构,从角色上划分主要包括QConf客户端,QConf服务
端,QConf管理端。
QConf服务端
QConf使用ZooKeeper集群作为服务端提供服务。众所周知,ZooKeeper是一套分布式应用程序协调服务,根据上面提到的对
配置内容的定位,我们认为可以将单条配置内容直接存储在ZooKeeper的一个ZNode上,并利用ZooKeeper的Watch监听功能
实现配置变化时对客户端的及时通知。 按照ZooKeeper的设计目标,其只提供最基础的功能,包括顺序一致,原子性,单一
系统镜像,可靠性和及时性。
我们选择Zookeeper还因为它有如下特点:
1、类文件系统的节点组织
2、稳定,无单点问题
3、订阅通知机制
关于Zookeeper,更多见:https://zookeeper.apache.org/
QConf客户端
因为ZooKeeper在接口方面只提供了非常基本的操作,并且其客户端接口原始,所以我们需要在QConf的客户端部分解决如下
问题:
1、降低与ZooKeeper的链接数 原生的ZooKeeper客户端中,所有需要获取配置的进程都需要与ZooKeeper保持长连接,在生
产环境中每个客户端机器可能都会有上百个进程需要访问数据,这对ZooKeeper的压力非常大而且也是不必要的。
2、本地缓存 当然我们不希望客户端进程每次需要数据都走网络获取,所以需要维护一份客户端缓存,仅在配置变化时更新。
3、容错 当进程死掉,网络终端,机器重启等异常情况发生时,我们希望能尽可能的提供可靠的配置获取服务。
4、多语言版本接口 目前提供的语言版本包括:c,php,java,python,go,lua,shell。
5、配置更新及时 可以秒级同步到所有客户端机器。
6、高效的配置读取 内存级的访问速度。
下面来看下QConf客户端的架构:
剩余6页未读,继续阅读
资源评论
weixin_38640072
- 粉丝: 3
- 资源: 930
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功