PAXOS演算法的理解
阿新 • • 發佈:2019-01-29
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階段