区块链共识机制解析:如何实现节点间的一致性视图与有效性
一致性视图包含两层含义: 1. 一致性:区块链每次更新后,每个节点都能获得相同的视图; 2、有效性(可审计性特征):区块中任意诚实节点链上发布的信息最终都会被其他节点认可并记录。 (如果一笔交易被发送到 N − f N − f N−f 个诚实节点,那么最终每个诚实节点都会确认该交易。这就是可审计性特征。)
区块链系统中实现以上两个特点的算法就是共识算法。
分布式系统一般通过状态复制器的原理来实现一致性。核心思想是系统中的所有副本都运行相同的状态机。只要所有副本都以相同的初始状态开始,并基于相同的初始状态以相同的顺序执行一组操作,那么所有状态最终都会收敛到相同的状态,即整个系统向外界表现出一致性。因此,当状态被复制时,来回传输的不再是系统状态,而是导致系统状态改变的事件(区块链系统中的交易)。
1.CFT共识算法Crush故障
这类算法只考虑了对错误节点的容错性,没有考虑恶意节点故意作恶造成的错误。即使少数节点出现故障或下线,整个系统视图仍能保证一致和正确,但拜占庭问题无法解决。代表算法是PAXOS和RAFT。
ZAB、(VR)、raft、multi-paxos都可以称为基于共识协议
帕克斯操作系统
该算法在一定程度上容忍了信息丢失、延迟、混乱、重复的可能性。该算法的容错能力为2 f + 1 2f + 1 2f+1。下面是经典paxos的介绍:
1、节点角色:
1)(多个):负责提案,每个提案包含唯一标识ID+值
2)决策者(多个):只有获得多数同意的才允许被决策学习者接收。
3)决策学习者(多个):只会被动接收那些通过的
2. 共识过程:
1)准备阶段
所有人向所有人发送“准备请求”(不包含共识结果,仅包含数量),并回复“准备响应”(包含将来可以接受的最小数量)。接连收到多个号码,这些号码可能不同。每一个都在“准备响应”中设置一个阈值,表示只有大于或等于已接收到的号码最大值的号码才会被接受。
2)验收阶段
收到大多数“准备回复”后,根据“准备回复”中的数量阈值,向所有人发送“接受请求”(包括提案编号和共识结果),所有接受最新版本的人达到达成共识;
3. PAXOS解决了两个问题:
1)所有节点都能区分当前提议者和过期提议者,从而避免过期共识消息被破坏;
2)一旦达成新的共识,所有节点都必须接受它才能实现一致性。
4. PAXOS的问题:在获得大部分准备好的响应后,将继续发送真实的状态共识结果。那么当由于某种原因,没有收到足够的响应时,共识就无法继续下去,所以只能重复上述步骤多次,直到成功。然而,和之间的通信是RPC远程调用。多次执行Basic Paxos实例会导致消息往返次数多、性能消耗大、延迟高。
怎么解决呢?例如:选其一来确定共识结果,于是就有了如下的Raft算法
事实上multi-paxos也通过选其一的方式减少了冲突的数量
筏
Raft算法是现在分布式系统开发的首选共识算法,其容错能力也是2f+1 2f+1 2f+1。 Raft算法本质上是通过基于的所有方法来实现一系列值的共识以及各个节点日志的一致性。 Raft算法是一种强领导者模型。集群中只能有一位“霸道总裁”。通过所有基于的方法,实现了一系列值的共识以及各个节点日志的一致性。
1、节点角色:
1)领导者
负责接收来自关注者客户端的消息,并向关注者发送状态共识结果(状态机日志)。在收到大多数关注者的正确性确认后,提交总日志,以确保所有关注者的观点一致;它会定期广播心跳消息,通知其他节点自己是领导者,并防止其他节点跟进发起新的选举来篡夺权力。
2) 候选人
所有节点都可以成为候选人,并向其他节点发送投票请求RPC消息,通知其他节点进行投票。如果他们赢得多数选票,他们将被提升为领导者。 (如果得票最多的候选人之间出现平局,则将重复投票,直至选出领导者)
3)关注者
负责从领导者那里获取一致且正确的状态共识结果(日志)。当等待领导心跳信息超时时,主动推荐自己为候选人。
2.流程:当状态稳定时,省略准备阶段,直接进入提案接受阶段。
3. 期限
英文单词term是term,领导者有。
1)自动增加:当在等待心跳信息超时后推荐自己为候选者时,其任期数将会增加。例如,如果A、B、C的最早任期都为0,并且A的定时器最早到期,则将其任期加1,设置为1,为自己投票,然后发送选举请求消息给其他节点。
2)更新为更大的值:当一个节点发现自己的term号小于其他节点的term号时,就会更新为更大的值。例如,节点A的任期为1,它请求投票。