我在这里粘贴了paxos算法的伪代码:
What is a "view" in the Paxos consensus algorithm?
想知道是否有人能给我指个正确的方向。
该算法说,每个节点都有一个“状态”,其中包含一组节点应该跟踪的信息。
假设我们有两个节点:节点1和节点2。在最简单的情况下,node 2连接node 1,它们都扮演paxos。在2联接1之后,节点1和节点2的状态究竟发生了什么“视图”数据结构何时更改?它包含什么如果有人能给我解释这个两个节点玩paxos的简单例子,那么我想我可以找出多个节点的例子。
我目前的理解(我确信这是不对的)如下:
节点2向连接节点1发送消息。
节点1从节点2接收请求加入的消息。
节点#1承担领导并进入阶段1,计算我的#num=max(0,0)+1=1
节点1发送视图[0]中的所有节点(为空)prepare(1,1)
节点#1发送初始联系人节点(节点#2)准备(1,1)
节点1发送节点1(自身)准备(1,1)
节点2接收prepare(1,1)。它设置其num_h=1并返回leader PROMISE(0,{empty list})
节点1接收prepare(1,1)并设置其num_h=1并返回自身promise(0,{empty list})。
现在我们进入第二阶段
这就是我很困惑的地方。
节点1是leader,它接收两条promise(0,{empty list})消息。根据该算法,如果leader在视图[0]中获得了大多数承诺,那么它可以为“v”设置一个值,并将接受消息发送给所有响应者。
我所困惑的是,目前领导者的视图[0]是空的,所以如何计算空列表的大部分?
另外,假设leader已经收到了大多数承诺,并开始设置v=可ping节点集(包括self)什么是pingable节点?只是节点1和节点2吗?
感谢所有/任何帮助,并肯定会给那些帮助的人加分。
最佳答案
伪代码不是针对特定问题的专用代码事实上,教授说如果我们不想的话,我们不需要使用伪代码,并且说我们可以看看其他的paxos论文(即paxos made simple,paxos made live,等等)来指导这个算法的实现。也许你是对的,我应该看看维基百科来实现这个算法因此视图[…]只是一个散列映射,节点可以选择它想要的任何值如果我理解正确的话,你说多数人声明只是检查它是否收到了“足够”的承诺信息。但是知道我们是否有足够的资源的唯一方法是节点是否跟踪其组成员。这意味着我需要一个不同的数据结构。
另外,我不能因为你的评论而给你加分如果你贴出答案,我可以给你打分。
关于algorithm - 如何理解Paxos分布式共识算法的第二阶段?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10558382/