1. 程式人生 > 實用技巧 >Diamond--阿里的配置服務

Diamond--阿里的配置服務

>>> hot3.png

Diamond

Diamond主要提供持久配置的釋出和訂閱服務,最大特點是結構簡單,穩定可靠。Diamond的主要使用場景是用來進行動態資料庫切換與擴容, 進行一些業務系統執行時開關配置的推送。Diamond產品專注於高可用性,基於此在架構、容災機制、資料獲取模型上有一些與同類產品的不同之處。

Diamond結構非常簡單,也屬於是無單點的架構模型,如圖1-1所示。

圖1-1-Diamond架構模型

釋出或者更新配置資料時,步驟如下:

  • 寫入MySql資料庫

  • 寫本地磁碟

  • 通知叢集其他機器去資料庫dump更新的資料

訂閱方獲取配置資料時,直接讀取服務端本地磁碟檔案,儘量減少對資料庫壓力。

這種架構用短暫的延時換取最大的效能和一致性,一些配置不能接受延時的情況下,通過API可以獲取資料庫中的最新配置。

容災機制

Diamond作為一個分散式環境下的持久配置系統,有一套完備的容災機制,資料儲存在:資料庫、服務端磁碟、客戶端快取目錄以及可以手工干預的容 災目錄。客戶端通過API獲取配置資料按照固定的順序去不同的資料來源獲取資料:容災目錄->服務端磁碟->客戶端快取。因此,面對如下情 況,Diamond均能很好的應對:

  • 資料庫主庫不可用,可以切換到備庫,Diamond繼續提供服務

  • 資料庫主備庫全部不可用,Diamond通過本地快取可以繼續提供讀服務

  • 資料庫主備庫全部不可用,Diamond服務端全部不可用,Diamond客戶端使用快取目錄繼續執行,支援離線啟動

  • 資料庫主備庫全部不可用,Diamond服務端全部不可用,Diamond客戶端快取資料被刪,可以通過拷貝備份的快取目錄到容災目錄下繼續使用

綜上所述,只有在同時碰到如下四個條件的情況下,客戶端應用才無法啟動: 資料庫主備庫全部不可用、Diamond服務端全部不可用、Diamond客戶端快取被清空、客戶端沒有備份的快取檔案。

長輪詢改造

客戶端採用推拉結合的策略在長連線和短連線之間取得一個平衡,讓服務端不用太關注連線的管理,又可以獲得長連線的及時性。

  • 客戶端發起一個對比請求到服務端,請求中包含客戶端訂閱的資料的指紋

  • 服務端檢查客戶端的指紋是否與最新資料匹配

    • 如果匹配,服務端持有連線

    • 如果30秒內沒有相關資料變化,服務端持有連線30秒後釋放

    • 如果30秒內有相關資料變化,服務端立即返回變化資料的ID

  • 如果不匹配,立即返回變化資料的ID

  • 客戶端根據變化資料的ID去服務端獲取最新的內容

Diamond通過這種多重容災機制以及推拉結合的方式,讓客戶端邏輯儘量簡單,而且高效穩定,使其成為名副其實的“鑽石”。


轉載於:https://my.oschina.net/piorcn/blog/340407