区块链四:共识机制区块链四:共识机制——PBFT算法深入讲解算法深入讲解
@TOC
背景介绍背景介绍
共识机制是区块链一大知识领域, 作用就是维持分布式节点间的一致性,从而支撑去中心化中心,早在区块链之前,分布式
系统就存在各种分布式的共识机制,共识机制不是区块链所发明,但区块链却对共识机制推广和进步有着重要影响。
共识算法分类共识算法分类
按应用场景分,共识算法可以分成两大类, 1、有坏人节点, 2、无坏人节点。
1、 有坏人节点,典型拜占庭问题,即系统中可能出现故意传送假结果的节点导致分布式系统结果错误,这种场景重点是在存
在坏人的情况下能达成大家认可的一致结果。 其中BFT,PBFT, POW,POS都属于这类。
2、 无坏人几点,此类分布式共识算法,只需要保证各节点行动一致,并在部分节点down后能继续工作,一般在封闭式的分
布系统使用,其中有Raft,Paxos。
对几种常见共识算法,大都类似的思路, 就是 一个组长(primary)带着N个成员(backup)干活,由组长派活收集各节点的
状态,再确定结果是否一致, 类似分布式事务的二段提交。
其中不同算法主要解决这几个问题思路不一样,
系统判断达成一致?
组长down了或部分节点down了怎样保持系统可用性?
出现分叉了怎样处理两边的结果?
PBFT
这部分就讲解PBFT算法,怎样解决以上几个问题。
PBFT的算法思想, 以状态机运作,包括节点状态,消息状态, 由组长带领大家统一步调处理消息,而消息的是否继续迁移
下一个状态,则通过多少节点达成一致,最后消息达到处理完的状态。
消息处理:消息处理:
消息状态迁移路径: request -> pre-prepare -> prepare-> commit -> reply
C 代表Client, 客户端向系统主节点(0:组长)发送一请求request, 请求开始进入处理阶段
pre-prepare : 主节点参与把request分配一个唯一的编号 request-number n, 并把request跟n一起组成pre-prepare消息广播给
所有成员(backup节点)
prepare : 所有成员(backup节点),收到pre-prepare消息, 依靠签名字段检查消息是否来源于主节点,确认无误,将request
编号和本节点签名组成prepare消息,广播给其他所有成员,表示自己认可这请求编号和准备好了。
Commit :所有节点,若收到的prepare消息,依靠签名检查是否正确,若prepare消息数量超过全部节点数量的3分之二, 则
认为系统达成一致认可该请求和请求编号,对所有节点广播commit消息,表示该节点可以进行request的业务。
Reply : 所有节点, 若收到commit消息,依靠签名检查消息是否正确,若commit的消息数量超过所有节点的3分之一,则完成
request要求的业务,并构建reply消息,直接回复给client。Client根据是否收到超过3分之1个节点的正确回复,判断系统是否
完成了请求request。
评论0