+
95
-

PBFT共识算法是啥?

PBFT共识算法是啥?

网友回复

+
15
-

PBFT算法是状态机复制(state machine replication)的一种形式,将服务建模成状态机在分布式系统的不同节点间复制。这里需要理解一个视图(View)的概念:client将request发给一个主节点(primary),然后主节点将request多播到其他节点(backups),当主节点出错或成为恶意节点时,就需要进行视图更换(view change),也就是选择(轮换法)下一个backup作为主节点,共识过程进入下一个view。

总体算法流程如下: client向primary发起request primary将request多播到backups 节点发送reply给client client等待F+1F+1F+1个结果相同的reply作为最终结果 该算法成立的两个前提条件: 节点的行为必须是确定的,也就是在相同的状态下输入相同的参数,必须返回相同的结果

每个节点都必须从同一个状态开始

拜占庭容错能够容纳将近1/3的错误节点误差,IBM创建的Hyperledger 0.6版本就是使用了该算法作为共识算法(1.0版本已弃用,使用kafka)。 这个机制下有一个叫视图view的概念,在一个视图里,一个是主节点,其余的都叫备份节点。主节点负责将来自客户端的请求给排好序,然后按序发送给备份节点们。但是主节点可能会是拜占庭的:它可能会给不同的请求编上相同的序号,或者不去分配序号,或者让相邻的序号不连续。备份节点应当有职责来主动检查这些序号的合法性,并能通过timeout机制检测到主节点是否已经宕掉。当出现这些异常情况时,这些备份节点就会触发视图更换view change协议来选举出新的主节点。 视图是连续编号的整数。主节点由公式p = v mod |R|计算得到,这里v是视图编号,p是副本编号,|R|是副本集合的个数。当主节点失效的时候就需要启动视图更换(view change)过程。 预准备阶段 在预准备阶段,主节点分配一个序列号n给收到的请求,然后向所有备份节点群发预准备消息,预准备消息的格式为<,m>,这里v是视图编号,m是客户端发送的请求消息,d是请求消息m的摘要。 请求本身是不包含在预准备的消息里面的,这样就能使预准备消息足够小,因为预准备消息的目的是作为一种证明,确定该请求是在视图v中被赋予了序号n...

点击查看剩余70%

我知道答案,我要回答