Paxos The basic algorithm of paxos Arnd vval
Paxos算法详解 The basic algorithm of paxos 网络组:胡术、杨诚、杨铮
角色介绍 A(rnd, vval) P C(crnd, cval) L A(rnd, vval ) L P C(crnd, cval) A(rnd, vrnd, vval) L A(rnd, vval) P
• • • • P: proposer, 也可以是客户端,提交议案。 C: coordinator, 协调者, A: acceptor, 选举者, L: learner, 学习者, A round include two phases: (i)phase 1 (ii)phase 2 crnd: 某C开始的rounds中的最高的round number cval: 某C在round crnd中提出的value。 rnd: 某A参加过的rounds中最高的round number vrnd: 某A批准过的rounds中最高的round number vval: 某A在round vrnd中批准的value。 Quorum: a majority of the acceptors 所有的消息可能丢失或者延时,但是不会出错。
message • • Phase 1 a: prepare Phase 1 b: promise Phase 2 a: accept Phase 2 b: accepted
• 任何一个A必须批准它收到的第一个value。 • A在round i的prepare过程(phase 1)收到phase 1 a: (a)如果i<rnd, 且round rnd的C(beginner)不是round i的 C’(beginner), 即C!=C’,则通知round i的C’拒绝 (reject[rnd])它的prepare请求。如果C = C’,则忽略这个 prepare请求。(important!) (b)如果i >= rnd, 令rnd = i,发送phase 1 b消息。 Phase 1 b: [ rnd, vval] • A在round i的phase 2收到phase 2 a[i, vval_i]: (a)如果i<rnd, 即C!=C’,则通知round i的C’拒绝 (Nack[rnd])它的accept请求。如果C = C’,则忽略这个 accept请求。(important!) (b)如果i>=rnd, 令rnd = vrnd = i, vval = vval_i, 发送phase 2 b • 故而在其它的C开始更高round number的过程时, Round有 可能被中断, 。
P 初始化(round 1) Phase 2 b A(0, 0, null) CPhase 1 a Receive phase 1 b from because 1>0 Phase 2 a[1, Value_s] [ 1] a. Phase 1 b[1, 0, null quorum, pick any value A(1, 1, value_s) proposed by p. A(1, 0, null) ] C(1, value_s) C(1, null) C(0, null) A(0, 0, null) L receive phase 2 b from a quorum, then L learn value_s A(1, 1, value_s) because 1>0 A(1, 0, null) P C(0, null) because 1>0 A(0, 0, null) A(1, 1, value_s) P C(0, null) because 1>0 A(1, 1, value_s) A(0, 0, null) A(1, 1, value_s) because 1>0 A(0, 0, null) A(1, 0, null) P L receive L phase 2 b from a quorum, then learn value_s L L receive phase 2 b from a quorum, then learn value_s
正常运行(round 2 as an example) P Phase 2 b C(1, value_s) P P P Reject [1] Phase 1 a[2] Phase 1 a[1] 1 b[2, 1, value_s] Phase 2 a[2, value_s] C(2, null C(1, null ) )C(0, null) A(2, 1, value_s) A(1, 1, value_s) A(2, 2, value_s) Phase 2 b L A(1, 1, value_s) A(2, 2, value_s) L C(0, null) A(1, 1, value_s) A(2, 2, value_s) L
- Slides: 9