paxos的提案生成 看書有感

2021-10-23 08:14:31 字數 1203 閱讀 8615

書籍是《從paxos到zookeeper分布式一致性原理與實踐》

下面這個鏈結是看書一頭蒙時,看這個突然懂了的,雖然和書上基本上一樣,感覺很玄學,可能是在電腦上的原因吧,哈哈

首先給出理論:

p1:乙個acceptor必須准他收到的第乙個提案

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

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

p2b:如果乙個提案【m0,v0】被選定後,那麼之後任何的proposer產生的編號更高的提案其value值都是v0.

p2c:對於任意的mn和vn,如果提案【mn,vn】被提出,那麼肯定存在乙個由半數以上的acceptor組成的集合s,滿足以下條件中的任意乙個:

1.s中不存在任何批准過編號小於mn的提案的acceptor。

2.選取s中所有批准過acceptor批准過的編號小於mn的填,其中編號最大的那個提案其value值是v0。

其中p1到p2c是逐步增強的。

現在來說一下自己的理解。

首先是在眾多的提案中只能有乙個提案被通過,且後續的提案的值只能是已經通過的提案的值。

否則就可能出現多個提案被批准,這個是破壞了paxos的安全性的。

所以首先得乙個就是:

p3:只有乙個提案被批准,且後續的提案的值只能是之前已批准的提案的值(如果之前沒有提案被批准,那麼就通過這個提案),否則不通過。

所以如果能夠理解了這個那麼上面的p1到p2c都是不難理解的。

下面來證明p2c:

這個p2c就是最終的提案的選定策略(我覺得,哈哈):

如果之前已經有乙個提案【m0,v0】被批准了,那麼後續的提案的編號只能是大於m0的,並且如果新的提案【m0+1,v1】被批准了,那麼由於之前已經有乙個提案了,此時為了安全性如果這個新的提案被批准那麼必定是滿足乙個條件就是其值為v0,即v1 = v0。

上面的證明很簡陋,但是我唔得還是能夠說明問題的。

這樣會覺得有點囉嗦,但是還是要提一下:

就是條件約束是:如果之前有乙個提案被批准了,那麼後面的通過的編號更大的提案被通過了。

所以保證提案的唯一性所以如果acceptor接收新的提案,那麼新的提案的值,只能和之前的已通過的編號最大的提案的值是一樣的。

有環的情況生成並查集

並查集最基本的查詢和合併就不多講了,直接看函式吧。合併過程中如果出現環,如5 6 7 5,那麼在找最終老大時會出現死迴圈,邊輸入每個節點的老大資訊邊合併可以有效的處理這種情況,具體解析看 注釋。include include include includeusing namespace std co...

如何批量生成有序列號的命令

最近碰到乙個case,要給rac 加裸裝置,又由於客戶環境比較特殊不能使用一些批量編輯工具,誒,想偷懶都不行!這裡小結下可以用linux unix自帶的工具來批量生成有序列號的命令,其他命令也可以看你的實際需求吧。1 第乙個例子是批量生成建lv的命令 eg 批量生成有序列的命令 以下命令可以直接在c...

自動生成巨集程式軟體 是否有自動生成字幕的軟體?

推薦大家用一些正經工具,比如我們。自誇 繪影字幕的初衷就是為大家提供最便捷的自動新增字幕工具。我們產品經理在規劃產品的時候,也是最大程度站在使用者角度設計功能,那必須方便好用!這是一整套過程,所有步驟都簡潔明瞭,應該都沒什麼問題。跟大家說一些在做字幕時,值得注意的地方和可以提高效率的tips。1.識...