Diamond--阿里的配置服務
Diamond
Diamond主要提供持久配置的釋出和訂閱服務,最大特點是結構簡單,穩定可靠。Diamond的主要使用場景是用來進行動態資料庫切換與擴容, 進行一些業務系統執行時開關配置的推送。Diamond產品專注於高可用性,基於此在架構、容災機制、資料獲取模型上有一些與同類產品的不同之處。
Diamond結構非常簡單,也屬於是無單點的架構模型,如圖1-1所示。
圖1-1-Diamond架構模型
釋出或者更新配置資料時,步驟如下:
寫入MySql資料庫
寫本地磁碟
通知叢集其他機器去資料庫dump更新的資料
訂閱方獲取配置資料時,直接讀取服務端本地磁碟檔案,儘量減少對資料庫壓力。
容災機制
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