分布式协议与算法实战 / 攻克分布式系统设计的关键难题

韩健
腾讯资深工程师
  • 课程目录
  • 课程介绍
  • 开篇词 | 想成为分布式高手?那就先把协议和算法烂熟于心吧

    如果一个人想真正搞懂分布式技术,开发出一个分布式系统,最先需要掌握的就是分布式协议和算法这部分知识。

  • 学习路径 | 分布式协议与算法你应该这么学

    如何才能掌握一个相对新、而且又在蓬勃快速发展的技术知识呢?

  • 01 | 拜占庭将军问题:有叛徒的情况下,如何才能达成共识?

    如果当时苏秦能够具备分布式系统设计的思维,掌握这几种算法,应该就不用担心作战计划被干扰了吧。

  • 加餐 | 拜占庭将军问题:如何基于签名消息实现作战计划的一致性?

    签名消息型拜占庭问题之解,解决的是忠将们如何就作战计划达成共识的问题,也就只要忠将们执行了一致的作战计划就可以了。

  • 02 | CAP理论:分布式系统的PH试纸,用它来测酸碱度

    CAP理论是一个很好的思考框架,它对分布式系统的特性做了高度抽象(一致性、可用性和分区容错性)并对特性间的冲突做了总结。

  • 03 | ACID理论:CAP的酸,追求一致性

    在开发实现分布式系统,如果不是必须,尽量不要实现事务,可以考虑采用强一致性或最终一致性。

  • 04 | BASE理论:CAP的碱,追求可用性

    BASE理论支持的是大型分布式系统,通过牺牲强一致性,来获得高可用性。

  • 05 | Paxos算法(一):如何在多个节点间确定某变量的值?

    在过去几十年里,Paxos算法基本上是分布式共识的代名词,因为当前最常用的一批共识算法都是基于它改进的。

  • 06 | Paxos算法(二):Multi-Paxos不是一个算法,而是统称

    Multi-Paxos算法是指基于Multi-Paxos思想,通过多个Basic Paxos实例实现一系列值共识的算法。

  • 07 | Raft算法(一):如何选举领导者?

    从本质上说,Raft算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。

  • 08 | Raft算法(二):如何复制日志?

    跟随者中的不一致日志项会被领导者的日志覆盖,而且领导者从来不会覆盖或者删除自己的日志。

  • 09 | Raft算法(三):如何解决成员变更的问题?

    联合共识不好实现,绝大多数Raft算法的实现,采用的都是单节点变更的方法(比如Etcd、Hashicorp Raft)。

  • 10 | 一致哈希算法:如何分群,突破集群的“领导者”限制?

    一致哈希本质上是一种路由寻址算法,适合简单的路由寻址场景,比如在KV存储系统内部,它的特点是简单,不需要维护路由信息。

  • 11 | Gossip协议:流言蜚语,原来也可以实现一致性

    当集群节点是变化的,或者集群节点数比较多时,这时要采用谣言传播的方式,同步更新数据实现最终一致。

  • 12 | Quorum NWR算法:想要灵活地自定义一致性,没问题!

    Quorum NWR非常实用,能有效地弥补AP型系统缺乏强一致性的痛点,给业务提供按需选择一致性级别的灵活度。

  • 13 | PBFT算法:有人作恶,如何达成共识?

    PBFT算法与Raft算法类似,也存在一个“领导者”(就是主节点),同样,集群的性能也受限于“领导者”。

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

    视图变更除了能解决主节点故障和作恶的问题,还能避免备份节点长时间阻塞等待客户端请求被执行。

  • 14 | PoW算法:有办法黑比特币吗?

    即使攻击者只有30%的算力,他也有可能连续计算出多个区块的哈希值,挖掘出更长的攻击链,发动攻击。

  • 15 | ZAB协议:如何实现操作的顺序性?

    很多同学应该使用过ZooKeeper,它是一个开源的分布式协调服务,比如你可以用它进行配置管理、名字服务等等。

  • 加餐 | ZAB协议(一):主节点崩溃了,怎么办?

    领导者选举,关乎着节点故障容错能力和集群可用性,是ZAB协议非常核心的设计之一。

  • 加餐 | ZAB协议(二):如何从故障中恢复?

    成员发现和数据同步不仅让新领导者正式成为领导者,确立了它的领导关系,还解决了各副本的数据冲突,实现了数据副本的一致性。

  • 加餐 | ZAB协议(三):如何处理读写请求?

    在ZooKeeper中,写请求只能在领导者节点上处理,读请求可以在所有节点上处理,实现的是最终一致性。

  • 加餐 | MySQL XA是如何实现分布式事务的?

    MySQL XA性能不高,适合在并发性能要求不高的场景中使用。

  • 加餐 | TCC如何实现指令执行的原子性?

    TCC的难点不在于理解TCC的原理,而在于如何根据实际场景特点来实现预留、确认、撤销三个操作。

  • 16 | InfluxDB企业版一致性实现剖析:他山之石,可以攻玉

    InfluxDB企业版一年的License费高达1.5万美刀,为什么它值这个价钱?就是因为技术带来的高性能和成本优势。

  • 17 | Hashicorp Raft(一):如何跨过理论和代码之间的鸿沟?

    高效阅读源码的关键在于抓住重点,要有“底线”,不要芝麻和西瓜一把抓,什么都想要,最终陷入到枝节琐碎的细节中出不来。

  • 18 | Hashicorp Raft(二):如何以“集群节点”为中心使用API?

    在Hashicorp Raft中,通过哪些API接口能创建、增加、移除集群节点,查看集群节点状态?

  • 19 | 基于Raft的分布式KV系统开发实战(一):如何设计架构?

    分布式KV系统的代码比较少,相对纯粹聚焦在技术本身,涉及的KV业务层面的逻辑少,适合入门学习,是一个很好的学习案例。

  • 20 | 基于Raft的分布式KV系统开发实战(二):如何实现代码?

    我们将系统划分为三大功能块(接入协议、KV操作、分布式集群),这节课,我会讲每块功能的实现,帮你掌握架构背后的细节代码。

  • 结束语 | 静下心来,享受技术的乐趣

    我真心希望你是分布式系统的架构师、开发者,而不仅仅是开源软件的使用者。

  • 结课测试 | 这些分布式协议与算法的知识,你都掌握了吗?

    为了帮助你检验自己的学习效果,我特别给你准备了一套结课测试题

你将获得

  • 可落地的 4 大分布式基础理论;
  • 8 个最常用的分布式协议和算法;
  • 3 大实战案例手把手教学;
  • 以实战为中心的分布式内容体系。

讲师介绍

韩健,腾讯资深工程师,主要负责监控大数据平台的研发工作,从业十余年,他一直在跟分布式系统打交道,负责过QQ 后台海量服务分布式中间件,以及时序数据库 InfluxDB 自研集群系统的架构设计和研发工作。

课程介绍

在这个人人都喊着“高并发”“高可用”的时代里,分布式系统的重要性不言而喻。从整个行业的招聘趋势就能看出来,大型互联网公司在招聘后端工程师的时候,都会要求候选人有分布式相关的工作经验。

可分布式不是一两句话就能说清楚的,分布式架构、分布式存储、分布式中间件、分布式应用等等这些名词背后都会涉及一连串的技术,如果你不分主次,挨个去学习这些技术,肯定会疲惫不堪,得不偿失。

那么换个角度,又有哪些知识是分布式领域的基石呢?

如果你参与设计过分布式系统的话,应该不难理解这样一句话:分布式系统里最重要或者最核心的事情就是如何选择或设计适合的算法,以解决一致性和可用性相关的问题。 这正是本专栏的设计初衷,虽然分布式领域的知识繁杂且抽象,但我们希望能够带你搞定其中最核心、最难啃的算法和协议部分。

在韩健看来,分布式协议和算法是决定分布式系统如何运行的核心规则和关键步骤,是每一个工程师都应该具备的硬核知识。但与此同时,又因着算法本身比较抽象、知识碎片化、信息不准确等原因,提高了掌握这部分知识的门槛,

在这个专栏中,作者将自己多年来,支撑海量互联网服务中的分布式协议和算法的实战心得凝结成20篇文章。从理论到算法再到实战,带你建立学习信心,一步步将核心的算法深化为自己的知识体系,逐渐攻克分布式系统设计的关键难题。

理论篇: 将会为你讲解分布式架构设计的核心理论,让你学完就能落地实践。比如,如何根据场景特点进行CAP的权衡,是选择CP架构或者AP架构?如何使用二阶段提交协议和TCC,实现分布式系统的ACID特性?

协议和算法篇: 是关键重点,这里会重点讲解具体协议和算法的原理、特点、适用场景和常见误区。比如,你以为开发分布式系统使用 Raft 算法就足够了,其实它更适合性能要求不高的强一致性场景;又比如类似“Paxos 和 Raft 的区别在哪里”等常见面试题,你都会在这部分找到答案。

实战篇:主要帮你掌握分布式基础理论和分布式算法在工程实践中的应用。比如,剖析 InfluxDB 企业版的 CP 架构和 AP 架构的设计,以及 Raft、Quorum NWR、Anti-Entropy 等分布式算法的具体实现。

课程目录

特别放送

订阅须知