1. 程式人生 > >PAXOS演算法的理解

PAXOS演算法的理解

1.分散式系統

定義

分散式系統是這樣一種系統,它的各個元件分佈在聯網的若干臺計算機上,通過傳遞訊息進行相互通訊和協同工作。

特點

  • 併發性:在沒有協同的情況下,元件各自行事。
  • 沒有全域性時鐘:目前的時間同步精度不夠。
  • 故障無處不在:總是會發生各種各樣的故障。

2.Paxos演算法解決的問題

是分散式系統如何對一個問題達成共識。

3.Paxos演算法中的角色

從提案到表決流程涉及到三個角色:

  • Proposer:提案者,可能有多個,它門負責提出提案。
  • Acceptor:接受人,一定要有多個,它們對指定提案進行表決,同意則接受提案,不同意則拒絕。
  • Learner:學習人,收集每位Acceptor接受的提案,並根據少數服從多數的原則,形成最終提案。

實際上,分散式系統中一個元件可以對應一種或多種角色。

4.Paxos演算法描述

  • 第一階段(Prepare階段)

Proposer:

    • 選取提案編號n,並向大多數Acceptor傳送攜帶編號n的prepare請求。

Acceptor:

    • 如果收到的提案編號n比自己已經收到的編號都要大,則向Proposer承諾不再接收編號小於n的提案,如果之前接受過提案,則同時將接受的提案中編號最大的提案及其編號發給Proposer。
    • 如果收到的提案編號n小於自己已經收到提案編號的最大值,則拒絕。
  • 第二階段(Accept階段)

Proposer:

    • 首先,對接收到響應,逐條處理:
      • 如果接收到拒絕,則暫不處理。
      • 如果接收到同意,同時還接收到Acceptor已經接受的提案,則記下該提案及編號。
    • 處理完響應後,統計拒絕和同意個數:
      • 如果大多數拒絕,則準備下次提案。
      • 如果大多數同意,從這些Acceptor已經接受的提案中選取提案編號最大的提案作為自己的提案,沒有則使用自己的提案,逐個向Acceptor傳送Accept訊息。

Acceptor:

    • 如果收到的提案編號n小於自己已經收到最大提案編號,則拒絕。
    • 如果收到的提案編號n等於自己已經收到最大提案編號,則接受該提案。
    • 如果收到的提案編號n大於自己已經收到最大提案編號,則拒絕。
  • 形成共識(與Prepare&Accept階段並行)

Acceptor:

    • 每當接受一個提案,則將該提案及編號發給Learner。

Learner:

    • 記錄每一個Acceptor當前接受的提案,一個Acceptor先後發來多個提案,則保留編號最大的提案。
    • 統計每個提案被接受的Acceptor個數,如果超過半數,則形成共識。

5.Paxos流程圖例

5.1 一個提案從提出到接受的流程

  • Proposer1提案的Prepare階段(如下圖)
  • Proposer1提案的Accept階段(如下圖)

5.2 在兩個階段之間發起的新提案接受流程

  • Proposer2提案的prepare階段

  • Proposer2提案的Accept階段

5.3 在Accept階段發起的新提案接受流程

  • Proposer1提案的Prepare階段(如下圖)

  • 在Proposer1的Accept階段Proposer2提案的Prepare階段
  • Proposer2提案的Accept階段

5.4 在Accept階段向大多數Acceptor發起的新提案接受流程

  • Proposer1提案的Prepare階段(如下圖)

  • 在Proposer1的Accept階段Proposer2向大多數Acceptor提案的Prepare階段

  • Proposer2提案的Accept階段

  • Proposer1重新提案的Prepare階段