强一致共识算法-BFT/CFT

本文详细介绍了CFT(Crush Fault Tolerance)类共识算法,包括PAXOS和RAFT,以及BFT(Byzantine Fault Tolerance)类共识算法,如PBFT、HotStuff、NoxBFT等。CFT算法不考虑恶意节点,而BFT算法能处理拜占庭错误。此外,文章还探讨了区块链共识算法的分类,如概率性共识和确定性共识,并讨论了它们的特点和应用场景。
摘要由CSDN通过智能技术生成

区块链中共识机制的目的:使所有节点获得一致的区块链视图。

一致性视图包含两个含义:1、一致性:区块链的每次更新后,每个节点都能获得相同的视图;2、有效性(可审查特性):由任一诚实节点在区块链发布的信息都最终被其它节点承认并记录。(如果一笔交易被发送到 N − f N - f Nf个诚实节点了,那么最终每个诚实节点都会确认这笔交易。这就是可审查特性。)

在区块链系统中达成以上两个特性的算法就是一致性算法。

分布式系统一般通过状态复制机原理来实现一致性。其核心思想是系统中所有副本运行着相同的状态机,只要所有副本都以相同的初始状态开始,并基于相同的初始状态执行一组相同顺序的操作,那么所有的状态最终会收敛一致,即整个系统对外表现出一致性。所以状态复制的时候,不再来回地传递系统状态,而是传递导致系统状态变化的事件(区块链系统中就是交易)。

1、CFT类共识算法Crush Fault Tolerance

这类算法,仅考虑对错误节点的容错,不考虑恶意节点故意作恶导致的错误。在有少数节点故障或掉线的情况下,仍旧保证整个系统视图的一致和正确,但不能解决拜占庭问题,代表算法就是PAXOS和RAFT。

Zookeeper的ZAB, Viewstamped Replication(VR), raft, multi-paxos都可以被称为Leader-based一致性协议

PAXOS

该算法在一定程度上容忍了信息的丢失、延时、乱序以及重复的可能性,该算法拥有的容错能力是 2 f + 1 2f + 1 2f+1,下面介绍经典paxos:

1、节点角色:

1)提议者Proposer(多个):负责提出Proposal,每个提案包括唯一标识ID+值value
2)决策者Acceptor(多个):获得多数Acceptor同意的proposal,才被允许给决策学习者接收
3)决策学习者Learner(多个):只会被动接收已经通过的proposal

2、共识过程:

1)准备阶段
所有Proposer向所有Acceptor发送“准备请求”(不包含共识结果,只包含proposal的编号),Acceptor响应“准备响应”(包含未来可以接受的最小proposal编号)。Acceptor先后接收到多个proposal,这些proposal的编号可能不同,各个Acceptor就在“准备响应”中设置阈值,表明之后只接受编号大于等于已经接收到的编号的最大值。
2)接受阶段
Proposer收到大多数Acceptor的”准备响应“后,根据“准备响应”中的编号阈值,向所有Acceptor发送”接受请求“(包含提案编号和共识结果),所有Acceptor接受最新版本的proposal,达成共识;

3、PAXOS解决了两个问题:

1)所有节点都可以区分当前提议者和过期提议者,从而避免过期的共识消息搞破坏;
2)一旦达成一个新共识,所有节点必须接受它,以达成一致性。

4、PAXOS存在的问题:Proposor获得大多数Acceptor的准备响应以后,才会继续发送真正的状态共识结果,那么当由于某些原因,所有Proposor都没有收到足够多的响应,就无法继续开展共识,所以只能多次重复执行上述步骤直至成功。但是Proposor和Acceptor之间的通讯是rpc远程调用,多次执行Basic Paxos实例,就会导致往返消息多、耗性能、延迟大。

如何解决?比如:选择一个leader,来决定共识结果,于是有了下面Raft算法

实际上multi-paxos也是通过选择一个leader,来减少proposal冲突的次数

RAFT

Raft算法是现在分布式系统开发首选的共识算法,容错能力也是 2 f + 1 2f+1 2f+1。从本质上说,Raft算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。Raft算法是强领导者模型,集群中只能有一个"霸道总裁",通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。

1、节点角色:

1)领导者
负责接收跟从者客户端的消息,将状态共识结果(状态机日志)发送给跟从者,收到多数跟从者的正确性确认后,提交总日志,保证所有跟从者视图一致;会周期性广播心跳消息,通知别的节点自己是领导者,阻止别的跟随着发起新的选举来篡权

2)候选者
所有节点都可以成为候选者, 向其他节点发送请求投票RPC消息,通知其他节点来投票,如果赢得了大多数选票,就晋升当领导者。(若获得最多票数的候选人的投票结果相等,则重新投票,直至选出一个领导者为止)

3)跟随者follower
负责从领导者那里获得一致且正确的状态共识结果(日志),当等待领导者心跳信息超时的时候,就主动推荐自己当候选者

2、流程:当领导者处于稳定状态时,省略掉准备阶段,直接进入接受提案阶段

3、任期

英文单词是 term,领导者是有任期的。

1)自动增加:跟随者在等待领导者心跳信息超时后,推荐自己为候选人,会增加自己的任期号。比如A、B、C最早term都为0,A的计时器最早超时,就将自己的任期+1,置为1,自己给自己投一票,然后向其他节点发送请求选举的消息。

2)更新为较大值:当节点发现自己的任期编号比其他节点小时,会更新到较大的编号值。比如节点 A 的任期为 1,请求投票,

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值