1. 程式人生 > >分散式一致性的基石---Paxos演算法(1)

分散式一致性的基石---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的一致性,因為要麼多數派節點達成共識,要麼多數派節點不能形成共識;