一、Lease 機制
Lease 機制是最重要的分布式協議,廣泛應用于各種實際的分布式系統中,即使在某些系統中相似的設計不被稱為 Lease,但我們可以分析發現其本質就是一種 Lease 的實作,
Lease 機制的定義如下:lease 是由頒發者授予的在某一有效期內的承諾,頒發者一旦發出 lease,則無論接受方是否收到,也無論后續接收方處于何種狀態,只要 lease 不過期,頒發者一定嚴守承諾;另一方面,接收方在 lease 的有效期內可以使用頒發者的承諾,但一旦 lease 過期,接收方一定不能繼續使用頒發者的承諾,
Lease 機制的基本原理如下:中心服務器在向各節點發送資料時同時頒發一個 lease,每個 lease 具有一個有效期,該有效期通常是一個明確的時間點,例如 12:00:10,一旦真實時間超過這個時間點,則 lease 過期失效(假設中心服務器與各節點的時鐘是同步的),
Lease 機制的核心為 承諾,具體表現為:
- 在 lease 的有效期內,中心服務器保證不會修改對應資料的值;
- 節點收到資料和 lease 后,將資料加入本地 cache,一旦對應的 lease 超時,節點保證將對應的本地 cache 資料洗掉并重新發起讀請求;
- 中心服務器在修改資料時,首先阻塞所有新的讀請求,并等待之前為該資料發出的所有 lease 超時過期,然后修改資料的值,
Lease 機制可以容錯的關鍵是:服務器一旦發出資料及 lease,無論客戶端是否收到,也無論后續客戶端是否宕機,也無論后續網路是否正常,服務器只要等待 lease 超時,就可以保證對應的客戶端節點不會再繼續 cache 資料,從而可以放心的修改資料而不會破壞 cache 的一致性,
工程中,常選擇的 lease 時長是 10s 級別,這是一個經過驗證的經驗值,實踐中可以作為參考并綜合選擇合適的時長,
工程中,總是使用多個中心節點互為副本,成為一個小的集群,該小集群具有高可用性,對外提供頒發 lease 的功能,
工程中,直接實作 Lease 機制無疑會增加系統設計的復雜度,好在我們有類似 zookeeper 這樣的開源的高可用系統,在工程中完全可以間接使用 Lease,
問題一:修改元資料時,阻塞了所有新的讀請求,造成沒有讀服務?
- 服務器在進入修改資料流程后,一旦收到讀請求則只回傳資料但不頒發 lease;
- 服務器在進入修改資料流程后,服務器頒發的 lease 有效期限選擇為已發出的 lease 的最大有效期限;
問題二:服務器在修改元資料時需要等待所有的 lease 過期超時,從而造成修改元資料的操作時延大大增大?
- 在等待所有的 lease 過期的程序中,服務器主動通知各個持有 lease 的節點放棄 lease 并清除 cache 中的資料,如果服務器收到客戶端回傳的確認放棄 lease 的訊息,則服務器不需要在等待該 lease 超時;
問題三:如何解決頒發者和接收者的時鐘同步問題?
- 對于時鐘不同步,實踐中的通常做法是將頒發者的有效期設定得比接收者的略大,只需大過時鐘誤差就可以避免對 lease 的有效性的影響,
二、Quorum 機制
Quorum 機制是一種簡單有效的副本管理機制,
Quorum 機制概括說來是一種集合 N, N 是全集 U 的子集,N 中任意取集合 W、R ,W、R 都存在交集,

通俗來講這個理論:假設有2個筐 A、B,A 中全放紅球 2 個,B 中全放黑球 2 個,一次要取到所有顏色的球,只需取出3個球即可,
現在將這個理論用于分布式系統的資料一致性,如上情況,假設紅色代表最新資料的版本,黑色代表歷史資料的版本,那么取到所有版本再比較,就可以獲得最新資料版本,也得到最新資料,這樣對于想將所有資料取出的次數 4 次,操作次數就降低啦,
那么對于寫模型,只需要完成 W 個副本的更新后,用戶寫操作就算完成,而不需要等待全寫,此后系統內部會繼續更新剩余節點,最終達到一致,可以看到,該演算法是把寫的部分負載轉移到了讀上,通過延長分布式系統中資料一致性的最終時間來降低寫負載,至于轉移多少負載比較合適,這個需要根據分布式系統的具體需求中對資料一致性的要求,
提高到數學公式:
N 表示資料所具有的副本數;R 表示完成讀操作所需要讀取的最小副本數,即一次讀操作所需參與的最小節點數目;W 表示完成寫操作所需要寫入的最小副本數,即一次寫操作所需要參與的最小節點數目,
由 Quorum 的理論可知,W 和 R 是關聯的,W 值決定 R 值,要獲取最新資料需要滿足 R > N - W,
假設 N=5, 如果 R=1, 那么 W 必須是 5. 所以就是寫入所有的節點是全部節點,那么讀取任何一個節點就可以最新的資料(有點就是像讀寫鎖了);如果 R=5, 那么 W 只要是 1 就可以了,那么寫的效率就非常高,讀取的效率比較低,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/273521.html
標籤:其他
