分布式一致性原理學習筆記(3)

2021-07-23 11:30:41 字數 2094 閱讀 2164

假設有一組可以提出提案的程序集合,那麼對於乙個一致性演算法來說需要保證以下幾點:

1:在這些被提出的天中,只有乙個會被選定。

2:如果麼有提案被提出,那麼久不會有被選定的提案。

3:當乙個提案被選定後,程序可以獲取這些被選定的提案資訊。

安全性需求如下:

1:只有被提出的提案才能被選定

2:只有乙個值被選定

3:如果某個程序認為某個提案被選定了,那麼這個提案必須是真的被選定的那個。

paxos演算法的目標就是保證最終有且只有乙個提案被選定,當被選定後,程序最終也能獲取到被選定的提案。

三種參與角色

proposer,acceptor,learner

最簡單的選定

允許以個accepetor, 所有的proposer只能傳送給這個acceptor,acceptor選擇它接收到的第一提案作為被選定的提案。簡單,但是一旦acceptor出現問題,整個系統就無法工作。

更好的選定,應該符合以下判定

p1:乙個acceptor必須批准它收到的第乙個提案。

p1引入的問題:不同的proposer分別提出多個提案。任意乙個acceptor出問題,都無法保證正確的提案。所以引入

以 [編號,value] 來標識乙個提案。

p2:如果編號為m0,value值為v0的提案被選定了,那麼所有比編號m0更高的,且被選定的提案,其value值必須也是v0。

p2a:如果編號為m0,value值為v0的提案被選定了,那麼所有比編號m0更高的,且被acceptor批准的提案其value值必須也是v0

p2b如果乙個提案[m0,v0]被選定後,那麼之後任何proposer產生的編號更高的提案,其value值為v0

proposer生成提案

階段一:

acceptor對於proposer產生的提案mn保持謹慎態度,proposer產生mn的prepare請求 要acceptor保證兩點 乙個是 不批准任何編號小魚mn的提案,二:如果已經批准了天,返回那個小於mn 且當前最大的提案。

階段二:

proposer的prepare收到超過半數以上的 積極響應的話。進行vn的選擇。類似的根據prepare返回的兩種情況。vn取值也是有兩種,一種是隨意指定(所有的acceptor還沒批准過)。另一種是批准的最大編號的vn。此時 proposer在進行真正意義的提案請求。

acceptor 批准提案

對於prepare請求: 任何時候響應乙個prepare請求

對於accept請求:不違背accept現有承諾的前提下,任意響應accept請求。

既:乙個acceptor只要尚未響應過任何編號大於mn的prepare請求,那麼它就可以接受這個編號為mn的提案。

提案的獲取

方案一:

關播提案,一旦acceptor批准了乙個提案,就廣播該天給所有的learner。此法請求超級多。

方案二:

引入主 learner 。批准的提案只發給主learner。主learner負責同志其他learner。此法避免不了learner的單點故障。

方案三:

引入組主learner 。批准的提案發給learner集合。通過集合通知給各個learner

提案申請出現的問題

死迴圈問題

proposer p1提出了編號為m1的提案,並且通過了prepare請求。準備正是提交。此時 proposer p2提出了m2的提案,率先完成了prepare請求。於是 acceptor承諾不批准小於m2的提案,此時p1的正是提案請求會被進行忽略。於是p1又進入了prepare請求。提出了m3提案。這又導致p2的m2被忽略。p2又進入prepare請求。提出了m4 如此迴圈往復。 p1 p2就陷入了死迴圈。

避免死迴圈

proposer指定乙個主proposer只有它能提交提案。proposer接受其他proposer的提案進行過濾。一旦發現當前流程中有乙個編號更大的提案被提出。那麼它就丟棄原來的編號小的提案。最終選擇乙個足夠大編號的天。 問題解決。

分布式一致性

分布式一致性是指在分布式環境中對某個副本資料進行更新操作時,必須確保其他副本也會更新,避免不同副本資料不一致。分布式系統乙個重要的問題時解決資料複製,一是為了增加系統的可用性防止單點故障,二是提高系統可用性,通過負載聚恆,使分布在不同位置的資料副本能夠提供服務。理想狀態下,當然希望分布式系統能夠實現...

分布式一致性

分布式系統的乙個重要問題是資料的複製。對資料的複製一般有兩個原因 資料複製的主要難題是保持各個副本的一致性。即在更新乙個副本時,必須確保同時更新其他的副本,否則資料的各個副本將不再相同。一致性模型實質上是程序和資料儲存之間的乙個約定。正常情況下,乙個資料項上執行讀操作時,它期待該操作返回的是該資料在...

分布式一致性方案

首先,先說一下。老外提出了乙個快取更新套路,名為 cache aside pattern 其中就指出 不是的。假設這會有兩個請求,乙個請求a做查詢操作,乙個請求b做更新操作,那麼會有如下情形產生 快取剛好失效 請求a查詢資料庫,得乙個舊值 請求b將新值寫入資料庫 請求b刪除快取 請求a將查到的舊值寫...