2021-06-01

五、有人作恶怎么办?

 

在第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算法

 

不在此描述了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值