Paxos算法
定义2.1 票:即弱化形式的锁。它具有下面几个性质:服务器
从票的性质中咱们能够得出以下结论:函数
算法2.1 朴素的基于票的协议。性能
阶段1spa
1: 客户端向全部的服务器请求一张票变量
阶段2服务器端
2: if 收到过半数服务器的回复 then请求
3: 客户端将得到的票和命令一块儿发送每一个服务器方法
4: 服务器检查票的状态,若是票仍然有效,则存储命令并给客户端一个正反馈信息数据
5:else
6: 客户端等待,并从新进入阶段1
7: end if
阶段3
8: if 客户端从过半数服务器处获得了正反馈 then
9: 客户端告诉全部的服务器执行以前存储的命令
10: else
11: 客户端等待,而后从新进入阶段1
12: end if
该算法是有问题的:
算法 2.2 Paxos
客户端(提案者) 服务器(接收者)
初始化………………………………………………………………………………………………………………………………………………………………
c ——等待执行的命令 T(max) = 0 —— 当前已发布的最大票号
t = 0 —— 当前尝试的票号 C = NULL —— 当前存储的命令
T(store) = 0 —— 用来存储命令C的票
阶段1……………………………………………………………………………………………………………………………………………………………………
1:t = t + 1
2: 向全部服务器发消息,请求获得编号为t的票
3: if t > T(max) then
4: T(max) = t
5: 回复ok(T(store),C)
6: endif
阶段2………………………………………………………………………………………………………………
7: if 过半服务器回复ok then
8: 选择T(store)值最大的(T(store),C)
9: if T(store) > 0 then
10: c = C
11: endif
12: 向这些回复了 ok的服务器发送消息:propose(t,c)
13: endif
14: if t = T(max). then
15: C = c
16: T(store) = t
17: 回复:success
18: endif
阶段3 ………………………………………………………………………………………………………………
19: if 过半服务器回复 success then
20: 向每一个服务器发送消息:execute(c)
21: endif