分布式协议与算法实战
韩健
腾讯资深工程师
23193 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 31 讲
分布式协议与算法实战
15
15
1.0x
00:00/00:00
登录|注册

加餐 | PBFT算法:如何替换作恶的领导者?

替换作恶的主节点
选举新的主节点
无法达成共识
集群处理写请求能力
适应场景
结合其他算法
公有链
联盟链
数字签名和消息验证码混合使用
检查点机制
避免备份节点阻塞
处理异常状态
触发机制
客户端参与
替换作恶的主节点
选举新的主节点
PBFT算法
Raft算法
容错能力
视图变更
主节点作恶问题
防止备份节点作恶
课堂思考
PBFT算法应用
PBFT算法优化
视图变更原理
视图变更实现
领导者选举
PBFT算法
PBFT算法视图变更

该思维导图由 AI 生成,仅供参考

你好,我是韩健。
上一讲,我们了解到,PBFT 可以防止备份节点作恶,因为这个算法是主节点和备份节点组成的,那你想象一下,如果主节点作恶(比如主节点接收到了客户端的请求,但就是默不作声,不执行三阶段协议),这时无论正常节点数有多少,备份节点肯定没办法达成共识,整个集群都没办法正常运行。这么大的问题,你该怎么解决呢?
答案是视图变更(View Change),也就是通过领导者选举,选举出新的主节点,并替换掉作恶的主节点。(其中的“视图”你可以理解为领导者任期的,不同的视图值对应不同的主节点。比如,视图值为 1 时,主节点为 A;视图值为 2 时,主节点为 B。)
对于领导者模型算法而言,不管是非拜占庭容错算法(比如 Raft),还是拜占庭容错算法(比如 PBFT),领导者选举都是它们实现容错能力非常重要的一环。比如,对 Raft 而言,领导者选举实现了领导者节点的容错能力,避免了因领导者节点故障导致整个集群不可用。而对 PBFT 而言,视图变更,除了能解决主节点故障导致的集群不可用之外,还能解决主节点是恶意节点的问题。
对你来说,理解视图变更,可以理解拜占庭容错算法如何处理领导者故障和作恶。这样一样,从 07 讲到 13 讲(非拜占庭容错场景到拜占庭容错场景),你就能更全面地理解领导者选举的原理,和能解决的问题了,这样当你后续熟悉其他领导者选举算法,或设计自己的领导者选举算法时,也能更加的得心应手了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

PBFT算法是一种拜占庭容错算法,旨在防止主节点和备份节点的作恶行为。当主节点作恶时,整个集群会陷入无法正常运行的状态,因此需要通过视图变更来选举新的主节点,以替换作恶的主节点。视图变更是PBFT算法稳定运行的关键,通过轮流上岗的方式选出新的主节点,确保共识的达成。在视图变更过程中,备份节点会暂时停止接收和处理消息,以应对异常状态。除了解决主节点故障和作恶问题,视图变更还能避免备份节点长时间阻塞等待客户端请求被执行。与Raft算法不同的是,PBFT中客户端也参与了拜占庭容错的实现,通过实现定时器等待接收来自备份节点的响应。通过理解视图变更,读者能更全面地理解拜占庭容错算法如何处理领导者故障和作恶,从而更好地应用于设计自己的领导者选举算法。 此外,文章还介绍了PBFT算法中的检查点机制,用于定时清理节点本地缓存的不再需要的历史数据,以节省存储空间。同时,文章提到了PBFT算法中数字签名和消息验证码的混合使用,以优化性能开销。最后,文章探讨了PBFT算法在实际场景中的应用,包括与区块链的结合以及在联盟链和公有链中的应用。 总的来说,本文深入介绍了PBFT算法的视图变更机制、检查点机制以及性能优化方法,同时探讨了其在实际场景中的应用。对于读者来说,通过阅读本文可以全面了解PBFT算法的特点和应用,为设计和应用拜占庭容错算法提供了重要参考。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式协议与算法实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • laugh
    PBFT 全称 Practical Byzantine-Fault-Tolerant

    作者回复: 加一颗星:),是的,实用拜占庭容错算法。

    2020-06-18
    6
  • hello
    专栏更新完了,老师还在给我们加餐,为老师的付出点赞!老师,六一快乐!

    作者回复: 感谢一路相伴,一起多交流学习:)

    2020-06-01
    4
  • CRT
    不能处理客户端请求,因为此时主节点已经出问题了,无法进入预准备阶段。

    作者回复: 加一颗星:)

    2020-06-02
    3
  • 梦想的优惠券
    当恶意节点为主节点的时候,当客户端请求的时候,主节点有有可能传递恶意信息给其他节点,然后返回给客户端吗?
    2021-01-07
    1
    2
  • Geek_c7118e
    f是怎么知道的,怎么知道叛将的数量
    2021-08-06
    1
  • 要努力的兵长
    13讲说,客户端未收到 f+1 个一致响应消息,认为集群发生故障 重新发起请求。 这个地方说, 同样的情况 是怀疑 主节点叛变 然后向 所有节点发送消息 触发视图变更选举新 主节点。 老师 能详细说说 这两种区别吗??? 还是说 是决定重新请求还是 去触发视图变更, 全看 客户端自己的意愿?
    2020-09-08
  • kylexy_0817
    韩老师,“给不同的预准备请求分配不同的序号“不是应该的吗?给不同的预准备请求分配相同的序号,才会导致混乱吧?
    2020-08-16
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部