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


    配置中心概述:

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

    1)       配置持久化

    2)       多语言获取接口

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

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

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

     

    配置中心示例:

    下面介绍一下diamondqconf都是如何做的

    淘宝配置中心(diamond

    clip_image002

    1) 配置持久化

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

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

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

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

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

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

    360配置中心(QConf

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

    1)       单条数据量小

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

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

    4)       读多写少

    QConf的架构实现:

    clip_image004

    QConf服务端:

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

    QConf客户端

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

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

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

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

    l  多语言版本接口。目前提供的语言版本包括:cphpjavapythongoluashell

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

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

    clip_image006

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

    获取配置流程

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

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

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

    l  agentZooKeeper查询数据并注册监听;

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

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

    更新配置流程

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

    l  agentZooKeeper查询新值并更新watcher

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

     

    总结:

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

     

  • 相关阅读:
    ArcGIS按选定线分割面-案例教程
    ArcGIS 批量修改数据名称-arcgis案例实习教程
    ArcGIS 图层旋转工具-arcgis案例实习教程
    ArcGIS 要素类平移工具-arcgis案例实习教程
    GIS案例学习笔记-三维生成和可视化表达
    ArcPy开发教程2-管理地图文档1
    MFC和GDI+一起使用
    wContour
    [转载]WGS84坐标与Web墨卡托坐标互转
    C#和VC++字符集和编码
  • 原文地址:https://www.cnblogs.com/linuxbug/p/5689938.html
Copyright © 2020-2023  润新知