Go 进阶 · 分布式爬虫实战
郑建勋
Go 语言技术专家,《Go 语言底层原理剖析》作者
15839 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 58 讲
Go 进阶 · 分布式爬虫实战
15
15
1.0x
00:00/00:00
登录|注册

13|智慧之火:详解分布式容错共识算法

你好,我是郑建勋。
上节课,我们说分布式系统总是需要在可用性和数据一致性之间找到平衡,也就是既要确保当少部分节点发生故障时,程序仍然能够正确且正常地运行,又要保证分布式节点之间对某一事件达成共识。其实这并不是一件容易的事情,好在许多容错共识算法为我们提供了经过检验的解决方案。
可用性衡量了系统面对网络延迟、网络分区、系统故障时的容错能力。显然,如果我们遇到了极端的事件,例如地球毁灭了,我们是无法保证系统可用的。因此,大多数容错共识算法都会有一个前提,也就是至少需要大部分节点是正常的,这样系统才可以正常运行。
此外,大多数容错共识算法还有第二个前提,就像我在上节课提到的,不考虑节点中可能混入了攻击者,这样才能保证系统不会出现拜占庭问题。
而要保证数据一致性,当前比较有名的算法是:Paxos、Raft 和 Zab。我将其称为分布式容错共识算法,容错代表了在异常情况下仍然具有可用性和正确性,而共识代表的是数据的一致性,它意味着即便是在并发、异常等情况下也能达成共识。
Raft 在现代分布式系统中有着重要的地位,K8s 和课程中用到的 etcd 组件底层都采用了 Raft 算法。这节课,我就以 Raft 算法为例讲解容错共识算法是如何实现数据的一致性与可用性的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

分布式系统中的容错共识算法是解决可用性和数据一致性之间平衡的关键。本文详细介绍了Paxos和Raft算法,重点讲解了Raft算法的原理和实现。Raft算法通过维护复制日志和节点状态转换来保证数据一致性,其简单易懂的特点使其成为现代多数分布式系统采用的算法。文章还探讨了Raft算法在异常情况下保证数据一致性的方法,以及在容错方面的应用。总的来说,本文详细介绍了分布式容错共识算法的原理和实现,对于想要深入了解分布式系统的读者来说,是一篇值得阅读的文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 进阶 · 分布式爬虫实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • Realm
    1 猜测一下,在结果返回给请求方之前,查下自己有没有收到新leader的心跳包,有的话,重新向新leader请求最新数据;没有的话,就把结果返回给请求者,这可能也还是有概率拿不到最新数据; 2 要成为 Leader 必须要包含过去所有的 Committed Entry;
    2022-11-09归属地:浙江
    3
  • 志豪
    raft算法实践中都是采用单数节点,当网络出现分区,某区域内节点数不过半则区域内的node无法通过选举产生leader,客户端也就无法读取数据;网络恢复后,节点交少的分区域term会小于其他分区域,作为follower加入到集群中,并且复制leader的日志,保持数据一致性
    2022-11-30归属地:广东
    2
  • 我记得 如果读请求到达 follow 节点,follow会请求 leader 节点 来判断 commit index 是否是最新的, 如果不是就会进行同步,在进行响应
    2022-11-17归属地:广东
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部