協(xié)議解決的問題
paxos解決了分布式系統(tǒng)就某一個(gè)值達(dá)成一致的問題。下面就分布式系統(tǒng)中選主來介紹paxos協(xié)議過程,協(xié)議詳細(xì)過程見https://en.wikipedia.org/wiki/Paxos_(computer_science)
協(xié)議過程
在分布式系統(tǒng)中選主最直接的方法是直接選定集群的一個(gè)節(jié)點(diǎn)為leader,其它的節(jié)點(diǎn)為follower,這樣引入的一個(gè)問題是如果leader節(jié)點(diǎn)掛掉,整個(gè)集群就掛掉了。需要有一種算法自動選主,如果leader節(jié)點(diǎn)掛掉,則從follower節(jié)點(diǎn)中選出一個(gè)主節(jié)點(diǎn)。協(xié)議分為這幾個(gè)角色:
- Proposer: 決議提出者
- Acceptor:決議接收者
- Learner:對結(jié)果進(jìn)行學(xué)習(xí)
集群中的一個(gè)節(jié)點(diǎn)可以同時(shí)扮演多個(gè)角色,協(xié)議分為兩階段:
-
一階段
一階段分為兩個(gè)步驟:Prepare和Promise,如下圖所示

(1)1a:Prepare
Proposer向所有Acceptor提出Prepare請求,prepare請求包含一個(gè)全局唯一遞增的序號N1,全局唯一是指每次每個(gè)Proposer發(fā)起的序號都不一樣,遞增是指每個(gè)Proposer發(fā)起的序列號是遞增的。
(2)1b:Promise
Acceptor收到Proposer的Prepare請求時(shí),先和Acceptor的maxNum(此Acceptor收到的最大序號)進(jìn)行比較,如果maxNum > N1,則拋棄此Proposer的請求;maxNum < N1,設(shè)置maxNum的值為N1,且maxNum = N1,回復(fù)此Acceptor接受的最大編號N及其對應(yīng)的值V
-
二階段
二階段也分為兩個(gè)步驟:Accept Request和Accepted,如下圖所示
paxos第二階段.jpg
(3)2a:Accept Request
Proposer收到超過半數(shù)的Acceptor的Promise時(shí),會從Promise中選出返回編號最大的N對應(yīng)的值V1,發(fā)送給Acceptor;此時(shí)如果N1小于maxNum,拋棄請求;N1大于maxNum,更新此Acceptor接受的最大編號N
(4)2b:Accepted
Acceptor對滿足2a階段的請求,返回Accepted給Proposer,Proposer收到超過半數(shù)的回復(fù),發(fā)送選主信息給Leaner
