首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式系统组件之配置中心

分布式系统组件之配置中心

作者头像
三丰SanFeng
发布2018-01-16 16:16:58
1K0
发布2018-01-16 16:16:58
举报
文章被收录于专栏:三丰SanFeng三丰SanFeng三丰SanFeng

配置中心概述:

在分布式系统中,配置中心是一个基本的组件,它为散布在不同机器上的服务提供配置文件的通知,读取,更新服务,一般对配置中心的设计要点如下:

1) 配置持久化

2) 多语言获取接口

3) client定时获取,并缓存到本地,MD5比较是否更新

4) 非关键路径:多层级本地缓存,配置中心,客户端机器。。,只要不是所有层级都挂掉就可以访问

5) 实时通知,主动获取,定时获取

配置中心示例:

下面介绍一下diamond和qconf都是如何做的

淘宝配置中心(diamond)

clip_image002
clip_image002

1) 配置持久化

2) 集群之间数据通过DB和通知来进行同步

3) 数据库和本地文件双写,降低对数据库的压力

4) 配置中心服务,提供http获取方式

5) client主动获取,缓存到本地

6) client定时获取,MD5比较配置是否更新

7) 容灾:容灾目录,client snapshot,server本地文件,mysql数据库只要不是全部挂掉都能正常运行。

360配置中心(QConf)

QConf是360广泛使用的配置管理服务,QConf对配置信息的定位,直接决定了结构设计和组件选择。

1) 单条数据量小

2) 更新频繁(较代码而言)

3) 配置总数可能巨大,但单台机器关心配置数有限

4) 读多写少

QConf的架构实现:

clip_image004
clip_image004
QConf服务端:

QConf使用ZooKeeper集群作为服务端提供服务。

QConf客户端

在接口方面,ZooKeeper本身只提供了非常基本的操作,并且其客户端接口原始,所以我们需要在QConf的客户端部分解决如下问题:

l 降低与ZooKeeper的链接数。原生的ZooKeeper客户端中,所有需要获取配置的进程都需要与ZooKeeper保持长连接,在生产环境中每个客户端机器可能都会有上百个进程需要访问数据,这对ZooKeeper的压力非常大而且也是不必要的。

l 本地缓存。当然我们不希望客户端进程每次需要数据都走网络获取,所以需要维护一份客户端缓存,仅在配置变化时更新。

l 容错。当进程退出、网络中断、机器重启等异常情况发生时,我们希望能尽可能的提供可靠的配置获取服务。

l 多语言版本接口。目前提供的语言版本包括:c,php,java,python,go,lua,shell

l 配置更新及时,可以秒级同步到所有客户端机器。

l 高效的配置读取,内存级的访问速度。

clip_image006
clip_image006

QConf客户端主要有:agent、各种语言接口、连接他们的消息队列和共享内存。在QConf中,配置以key-value的形式存在,业务进程给出key获得对应value,这与传统的配置文件方式是一致的。

获取配置流程

l 业务进程调用某一种语言的QConf接口,从共享内存中查找需要的配置信息;

l 如果存在,直接获取,否则会向消息队列中加入该配置key;

l agent从消息队列中感知需要获取的配置key;

l agent向ZooKeeper查询数据并注册监听;

l agent将获得的配置value序列化后放入共享内存;

l 业务进程从共享内存中获得最新值。

更新配置流程

l ZooKeeper通知agent某配置项发生变化;

l agent从ZooKeeper查询新值并更新watcher;

l agent用新值更新共享内存中的该配置项。

总结:

配置中心是分布式系统中一个非常重要的中间件,配置中心需要尽量做到易用以及可靠,并需要做到能够多级容灾,避免成为系统单点。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-07-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 配置中心概述:
  • 配置中心示例:
    • 淘宝配置中心(diamond)
      • 360配置中心(QConf)
        • QConf服务端:
        • QConf客户端
        • 获取配置流程
        • 更新配置流程
    • 总结:
    相关产品与服务
    消息队列 CMQ 版
    消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档