标签:形式 基于 死锁 假设 服务端 执行相同的命令 竞争 else max
Paxos
定义2.1 票:即弱化形式的锁。它具备下面几个性质:
从票的性质中我们可以得出如下结论:
算法2.1 朴素的基于票的协议。
阶段1
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
标签:形式 基于 死锁 假设 服务端 执行相同的命令 竞争 else max
原文地址:https://www.cnblogs.com/justinli/p/9940861.html