Quorum機制簡介


本博客比較囉嗦, 想要看簡明的可直接看俺參考的鏈接

簡介

Quorum 機制,是一種分佈式系統中常用的,用來保證數據冗餘和最終一致性的投票算法,其主要數學思想來源於鴿巢原理

BTW:
鴿巢定理: 若有n個籠子和n+1只鴿子,所有的鴿子都被關在鴿籠裏,那麼至少有一個籠子有至少2只鴿子

算法

分佈式系統中的每一份數據拷貝對象都被賦予一票
系統共有VV票 (即有VV份數據冗餘)

  • 每一個讀操作獲得的票數必須大於最小讀票數 VrV_r, 如果票數不夠 VrV_r 就不能讀

  • 每一個寫操作獲得的票數必須大於最小寫票數 VwV_w, 如果票數不夠 VwV_w 就不能寫

    VrV_rVwV_w 滿足有以下限制:

    1. Vr+Vw>VV_r + V_w > V
    2. Vw>V/2V_w>V/2

算法的解釋

咱假設 V=10V = 10, Vr=5V_r = 5, Vw=6V_w = 6 好了, 剛好滿足兩個限制條件. 有具體的數字會比較容易理解, 現在來看這兩個限制爲什麼這樣設定

  • 限制1: 假如有一個寫請求過來了, 並且它獲得了 66 個冗餘拷貝的允許, 那這個寫請求可以被執行, 此時如果又來了個讀請求, 由於總共是 1010 個冗餘拷貝, 那這個讀請求最多隻能獲得 106=410-6=4 張投票, 不夠 VrV_r 張, 讀請求不能被執行. 同理, 如果讀請求已經被允許了, 那寫請求就無法獲得足夠的許可了, 這樣就保證了一份數據的冗餘拷貝不會被同時讀寫
  • 限制2: 假如有一個寫請求過來了, 並且它獲得了 66 個冗餘拷貝的允許, 那這個寫請求可以被執行, 此時如果又來了一個寫請求, 那麼它無論如何也拿不到 55 張以上的寫投票, 因爲票大部分投給了第一個寫請求了, 這樣就保證了一份數據的冗餘拷貝不會同時被兩個寫請求修改, 即數據的串行化修改

那些允許寫操作執行的冗餘拷貝, 也都必須完成同樣的寫更新, 最後寫操作才結束返回, 這麼說的話 限制2 同時也保證了半數以上的結點上的數據是新的, 剩下的由系統內部緩慢同步完成

那鴿巢定理呢, 用哪了?

假設一下 Vw=8V_w = 8, 現在更新了 88 份冗餘拷貝, 總共 1010 份冗餘拷貝, 那此時至少需要讀多少次才能讀到最新的數據呢? 108=210-8=2, 根據鴿巢定理, 至少得讀 33 份, 這 33 份中至少至少就有一份是新的數據, 此時再看看 限制1, 是不是覺得很合理!

算法的好處

  • Quorum 的讀寫最小票數可以用來作爲系統在讀, 寫性能方面的一個可調節參數
    • 寫票數 VwV_w越大, VrV_r就可以越小, 此時寫的開銷大, 讀的開銷小
    • 讀票數 VrV_r越大, VwV_w就可以越小, 此時讀的開銷大, 寫的開銷小

有說得不清楚的或者說錯的歡迎在評論區指出來, 大家一起加油 !


Reference

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章