diamond則是淘寶開源的一種分布式配置管理服務的實作。diamond本質上是一個java寫的web應用,其對外提供接口都是基于http協定的,在閱讀代碼時可以從實作各個接口的controller入手。
分布式配置管理
分布式配置管理的本質基本上就是一種推送-訂閱模式的運用。配置的應用方是訂閱者,配置管理服務則是推送方。概括為下圖:
其中,用戶端包括管理人員publish資料到配置管理服務,可以了解為添加/更新資料;配置管理服務notify資料到訂閱者,可以了解為推送。
配置管理服務往往會封裝一個用戶端庫,應用方則是基于該庫與配置管理服務進行互動。在實際實作時,用戶端庫可能是主動拉取(pull)資料,但對于應用方而言,一般是一種事件通知方式。
diamond中的資料是簡單的key-value結構。應用方訂閱資料則是基于key來訂閱,未訂閱的資料當然不會被推送。資料從類型上又劃分為聚合和非聚合。因為資料推送者可能很多,在整個分布式環境中,可能有多個推送者在推送相同key的資料,這些資料如果是聚合的,那麼所有這些推送者推送的資料會被合并在一起;反之如果是非聚合的,則會出現覆寫。
資料的來源可能是人工通過管理端錄入,也可能是其他服務通過配置管理服務的推送接口自動錄入。
架構及實作
diamond服務是一個叢集,是一個去除了單點的協作叢集。如圖:
<a href="http://www.51testing.com/batch.download.php?aid=49936" target="_blank"></a>
每一個角色出問題時,都可以盡量保證用戶端對應用層提供服務。
最新内容請見作者的github頁:http://qaseven.github.io/