分布式系統組件之配置中心


配置中心概述:

在分布式系統中,配置中心是一個基本的組件,它為散布在不同機器上的服務提供配置文件的通知,讀取,更新服務,一般對配置中心的設計要點如下:

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用新值更新共享內存中的該配置項。

 

總結:

配置中心是分布式系統中一個非常重要的中間件,配置中心需要盡量做到易用以及可靠,並需要做到能夠多級容災,避免成為系統單點。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM