分布式系統Quorum機制

2021-09-08 01:25:16 字數 1852 閱讀 3120

write-all-read-one

write-all-read-one(簡稱 waro)是一種最簡單的副本控制規則,顧名思義即在更新時寫所有的副本,只有在所有的副本上更新成功,才認為更新成功,從而保證所有的副本一致,這樣在讀取資料時可以讀任一副本上的資料。

缺點:讀服務的可用性較高,但更新服務的可用性不高

quorum 定義

quorum 機制只需成功更新 n 個副本中的 w 個,在讀取 r 個副本時,一定可以讀到最新的成功提交的資料。r>n-w

注:僅僅依賴 quorum 機制是無法保證強一致性的。因為僅有 quorum 機制時無法確定最新已成功提交的版本號,除非將最新已提交的版本號作為元資料由特定的元資料伺服器或元資料集群管理,否則很難確定最新成功提交的版本號。

如何讀取最新成功提交的資料

1. 限制提交的更新操作必須嚴格遞增,即只有在前乙個更新操作成功提交後才可以提交後乙個更新操作,從而成功提交的資料版本號必須是連續增加的。

2. 讀取 r 個副本,對於 r 個副本中版本號最高的資料,若已存在 w 個,則該資料為最新的成功提交的資料;若存在個資料少於 w 個,則繼續讀取其他副本,直若成功讀取到 w 個該版本的副本,則該資料為最新的成功提交的資料;如果在所有副本中該資料的個數肯定不滿足 w 個,則 r 中版本號第二大的為最新的成功提交的副本。

注:在單純使用 quorum 機制時,若要確定最新的成功提交的版本,最多n 個副本,當出現任一副本異常時,讀最新的成功提交的版本這一功能都有可能不可用。

基於 quorum 機制選擇 primary

在基本 primary-secondary 協議中引入 quorum 機制,即 primary 成功更新 w 個副本(含 primary 本身)後向使用者返回成功。

讀取資料:

①如果需要強一致性的立刻讀取到最新的成功提交的資料,則可以唯讀 primary 副本上的資料

②如果需要會話一致性,則可以根據之前已經讀到的資料版本號在各個副本上進行選擇性讀取

③如果只需要弱一致性,則可以選擇任意副本讀取。

選擇primary更新資料:

①以新primary的版本為準,其他版本認為是髒資料

②以最高版本為準,新primary同步到最新版本

例項:

zookeeper 使用的 paxos 協議本身就是利用了 quorum機制,後面介紹。

當利用 paxos 協議外選出 primary 後,zookeeper 的更新就由 primary 節點控制,每次更新操作,primary 節點只需更新超過半數(含自身)的節點後就返回使用者成功。每次更新操作都會遞增各個節點的版本號(xzid)。當 primary 節點異常,利用 paxos 協議選舉新的 primary 時,每個節點都會以自己的版本號發起 paxos 提議,從而保證了選出的新 primary 是某個超過半數副本集合中版本號最大的副本。但是新 primary 的版本號未必是乙個最新已提交的版本,可能是乙個只更新了少於半數副本的中間態的更新版本,此時新primary 完成與超過半數的副本同步後,這個版本的資料自動滿足 quorum 的半數要求;另一方面,新 primary 的版本可能是乙個最新已提交的版本,但可能會存在其他副本沒有參與選舉但持有乙個大於新 primary 的版本號的資料(中間態版本),此時這樣的中間態版本資料將被認為是髒資料,在與新 primary 進行資料同步時被 zookeeper 丟棄。

分布式系統的Quorum策略

分布式系統要做到資料一致性是不同於單點系統的,列入寫入資料,客戶端需要等待直到寫入成功。因此分布式系統的設計中會運用一些 聰明 的協議 機制用以解決資料一致性 可靠性等問題,quorum 機制就是其中的一種。1 分布式系統中的讀寫模型 分布式系統是由多個節點構成,多個結點意味著服務出現故障結點的概率...

分布式系統的Quorum策略

分布式系統要做到資料一致性是不同於單點系統的,列入寫入資料,客戶端需要等待直到寫入成功。因此分布式系統的設計中會運用一些 聰明 的協議 機制用以解決資料一致性 可靠性等問題,quorum 機制就是其中的一種。1 分布式系統中的讀寫模型 分布式系統是由多個節點構成,多個結點意味著服務出現故障結點的概率...

分布式Quorum機制,NWR策略讀寫模型

分布式系統是由多個節點 指代一台伺服器 儲存裝置等 構成,由於網路異常 宕機等節點並不能保證正常工作,特別是在節點數量很大的時候,出現異常狀況的節點幾乎是肯定的。為了保證系統的正常執行,能夠提供可靠的服務,分布式系統中對於資料的儲存採用多份資料副本 注 這裡的副本並非只用來備份,它可參與提供系統服務...