分散式一致性的基石---Paxos演算法(1)
分散式一致性的基石---Paxos演算法(1)
Paxos演算法是由微軟的工程師Lamport提出,Lamport依靠Paxos演算法獲得圖靈獎;
Paxos演算法旨在解決相互信任的分散式系統中,多個節點能快速達成一個一致的值;
目前,google的Chubby,雅虎的Zookeeper,Oracle的MySql Replication Group,騰訊的PhxSql,PhxQueue等都由Paxos演算法作為一致性的基礎;
在網際網路公司的應用場景下,通常用Zookeeper作為分散式協作服務; 可能不需要研究Paxos的實現;
在一些傳統的企業,可以在服務中實現Paxos演算法來滿足不能部署Zookeeper的場景;
由淺入深,這次只討論樸素Paxos的實現;
後面的章節會擴充套件討論 Multi Paxos 演算法和 Paxos 的數學推理證明,
目前最好的 Paxos 的實現是騰訊的PhxPaxos;
之前寫過一篇騰訊PhxPaxos的編譯流程:https://www.cnblogs.com/lijingshanxi/p/10089351.html
看程式碼最快的方法是自己加點日誌,來熟悉程式碼流程; 編譯流程裡面有介紹;
注:由於畫圖不小心,可能有些地方用了Propose請求,有些地方用了Accept請求,他們是一樣的;
其他錯誤的地方也請您指出;
樸素Paxos演算法約束:
樸素Paxos演算法流程:
活鎖:
假設叢集中有2個Proposor, 3個Accepter;
每次在Prepare階段,都能獲得多數派的響應,但是每次在Accept階段,都沒有達成多數派的接受,如果這樣的情況一致持續下去,就發生了活鎖;
兩個Proposor在Prepare階段都獲得了多數派的響應,但是在Accept階段沒有達成多數派的通過,交替這樣,就形成了活鎖;
即使發生活鎖,依然不會破壞朴樹Paxos的一致性,因為要麼多數派節點達成共識,要麼多數派節點不能形成共識;