当前位置:   article > 正文

2021-06-01_pbft共识算法 设计的原理 为什么要广播

pbft共识算法 设计的原理 为什么要广播

五、有人作恶怎么办?

 

在第2章中,所有的节点都是好人,会不打折扣的执行领导者的指令。如果集群中出现了坏人,就需要其他办法了。

 

是最复杂的一种分布式故障场景,除了存在故障行为,还存在恶意行为的一个场景。在存在恶意节点行为的场景中(比如在数字货币的区块链技术中),必须使用拜占庭容错算法(Byzantine Fault Tolerance,BFT)。常用的拜占庭容错算法有:PBFT 算法,PoW 算法。

 

1、PBFT 算法

 

PBFT 算法非常实用,是一种能在实际场景中落地的拜占庭容错算法。在这个算法中,所有的消息都是签名消息,也就是说,消息发送者的身份和消息内容都是无法伪造和篡改的。

 

 

上图中:

  • 将赵、魏、韩、楚理解为分布式系统的四个节点,其中赵是主节点(Primary node),魏、韩、楚是从节点(Secondary node);
  • 将苏秦理解为业务,也就是客户端;
  • 将消息理解为网络消息;
  • 将作战指令“进攻”,理解成客户端提议的值,也就是希望被各节点达成共识,并提交给状态机的值。

 

如上图,PBFT算法使用三阶段提交:预准备阶段、准备阶段、提交阶段,每个阶段都有包含指令的对应的消息,每个阶段的指令都应该是一样的,不同阶段的消息中的指令是可以累加的。这么多阶段的最终目的是某个节点想要提交各种消息中指令指定的操作,必须收到2f + 1 个验证通过的提交消息后(包括自己,其中 f 为叛徒数)才可以,这样PBFT 算法才能做到能容忍 (n - 1)/3 个恶意节点 (也可以是故障节点)。

 

主要过程简化为:

  • 主节点收到客户端请求后,就会进入预准备阶段,向从节点发送预准备消息;
  • 从节点收到预准备消息后,进入准备阶段,并向其他节点广播包含指令的准备消息;
  • 当节点收到的预准备消息和准备消息中的指令一致(节点收到2f 个一致的指令),就可以进入提交阶段,并再次将指令放入提交消息中进行广播;
  • 某个节点在进行完上面三个阶段后,会收到三个版本的指令,相同指令的数量累加后,如果超过2f + 1 ,就可以执行了。

 

PBFT算法,自己的理解就是通过多次广播消息,提高信号的信噪比,从而让恶意指令无法被执行。

 

而PoW算法的核心是提高一次处理的难度。

 

2、PoW算法

 

不在此描述了。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号