分布式协议与算法实战
韩健
腾讯资深工程师
立即订阅
3626 人已学习
课程目录
已更新 4 讲 / 共 22 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 想成为分布式高手?那就先把协议和算法烂熟于心吧
免费
理论篇 (3讲)
01 | 拜占庭将军问题:有叛徒的情况下,如何才能达成共识?
02 | CAP理论:分布式系统的PH试纸,用它来测酸碱度
03 | ACID理论:CAP的酸,追求一致性
分布式协议与算法实战
登录|注册

开篇词 | 想成为分布式高手?那就先把协议和算法烂熟于心吧

韩健 2020-02-10
00:00
09:16
讲述:于航 大小:7.44M
你好,我是韩健,你叫我“老韩”就可以了。
在专栏开始之前,我想先和你聊聊自己的经历,加深彼此的了解。在重庆大学的软件工程专业毕业之后,我就开始和分布式系统打交道,至今有十多年了。早期,我接触了电信级分布式系统,比如内核态 HA Cluster,现在是互联网分布式系统,比如名字服务、NoSQL 存储、监控大数平台。
我曾经做过创业公司的 CTO,后来加入腾讯之后,负责过 QQ 后台海量服务分布式中间件,以及时序数据库 InfluxDB 自研集群系统的架构设计和研发工作。
你可能会问我,为什么要单独讲分布式协议和算法呢?(为了不啰嗦,咱们下文都简称分布式算法)在我看来,它其实就是决定分布式系统如何运行的核心规则和关键步骤。 如果一个人想真正搞懂分布式技术,开发出一个分布式系统,最先需要掌握的就是这部分知识。
举个例子,学数学的时候,我们总是会学到很多公式或者定理,我上学的时候,还觉得这些定理枯燥至极。但后来我明白了,这些定理和公式其实就是前人花了很长时间思考、验证、总结出来的规律,如果我们能在这之上做事情,更容易快速地找到正确答案。同样,你学习咱们这个专栏也是这个道理。

分布式算法是分布式技术中的核心

可能有些同学会说:“老韩,你别忽悠我,我可是系统看过分布式领域的经典书的,比如《分布式系统:概念与设计》《分布式系统原理与范型》,这些书里分布式算法的篇幅可不多啊。”
是的,这也是我奇怪的地方。不过,你可以看看网上关于分布式的提问,这里面点击量大的肯定与分布式算法有关,这是不是侧面说明了它的重要性呢?
而且从我多年的经验来看,很多同学读了那几本厚重的经典书之后,在实际工作中还是云里雾里。我想,如果他们来问我,我会建议他们先把各种分布式算法搞清楚。因为分布式系统里,最重要的事情,就是如何选择或设计适合的算法,解决一致性和可用性相关的问题了。
可尽管它是分布式技术中的核心与关键,但实际掌握的人或者公司却很少。我来说个真实的事儿。
我刚刚提到的 InfluxDB 其实是一个开源的时序数据库系统,当然,开源的只是单机版本,如果你要使用集群功能,要么就是基于开源版本自研,要么就是购买人家的企业版本。
而这里面,企业版本一个节点一年 License 授权费就是 1.5 万美刀,是不是很贵?那贵在哪里呢?相比于单机版本,企业版本的技术壁垒又是什么?
在我自己折腾了一番 InfluxDB 系统后,我捂着胸口和你说,它的护城河就是以分布式算法为核心的分布式集群能力。
我知道有很多技术团队曾经试图自己实现 InfluxDB 的企业版本功能,但最后还是放弃了,因为这里面坑太多了。比如,实现集群能力的时候,怎么支持基于时序进行分片?怎么支持水平扩展?甚至还有些人在接入性能敏感的场景,该使用反熵(Anti-Entropy)算法的时候,却用了 Raft 算法,使得集群性能约等同于单机。
可以看到,分布式系统的价值和意义的确很大,但如果不能准确理解分布式算法,可能不仅开发实现的分布式系统无法稳定运行,而且你还会因为种种现网故障,逐渐影响到职业发展,丧失职场竞争力。
再说点儿更实际的,现阶段,掌握分布式算法也是你面试架构师、技术专家等高端岗位时的敲门砖。 你可以搜索看看,知名的公司在招聘架构师或者高级工程师时,岗位要求中是不是写着熟悉分布式算法相关理论等内容?不过从我作为面试官的经验来看,懂这部分的候选人实在是少之又少。
别看啰嗦了这么多,我只是想强调,不管你是基于技术追求的考虑,还是基于长期职业发展和提升职场竞争力的考量,“分布式算法”都是你在这个时代应该掌握的基本功。
当然了,我也知道,分布式算法虽然很重要,但是也比较难学,原因有这样几点。
除了算法本身抽象,不容易理解之外,即使是非常经典的论文,也存在在一些关键细节上没有讲清楚的情况。比如,你比较熟悉的拜占庭将军问题,在阅读口信消息型拜占庭问题之解时,你是不是感到很吃力呢?那是因为论文没有说透彻,而我会在01 讲带你了解这些内容。
信息时代资料丰富,但质量参差不齐,甚至有错误。网上信息大多是“复制粘贴”的结果,而且因为分布式领域的研究多以英文论文的形式出现,中文翻译内容的错误非常多,这也给自主学习带来很多不必要的障碍和误导。如果你没有足够的好奇心和探究精神,很难完全吃透关键细节。
很多资料是为了讲解理论而讲解理论,无法站在“用”的角度,将理论和实战结合。最终,你只能在“嘴”上理解,而无法动手。

方法得当,知识并不难学

在我看来,要想掌握这部分内容,不仅要理解常用算法的原理、特点和局限,还要能根据场景特点选择适合的分布式算法。
所以,为了更好地帮你轻松、透彻地搞懂分布式技术,理解其中最核心和最为精妙的内容,我希望将自己支撑海量互联网服务中的分布式算法实战心得分享给你。
我将课程划分了三个模块,分别是理论篇、协议和算法篇以及实战篇。
其中,理论篇,我会带你搞懂分布式架构设计核心且具有“实践指导性”的基础理论,这里面会涉及典型的分布式问题,以及如何认识分布式系统中相互矛盾的特性,帮助你在实战中根据场景特点选择适合的分布式算法。
协议和算法篇,会让你掌握它们的原理、特点、适用场景和常见误区等。比如,你以为开发分布式系统使用 Raft 算法就可以了,其实它比较适合性能要求不高的强一致性场景;又比如在面试时,如果被问到“Paxos 和 Raft 的区别在哪里”,你都会在第二部分中找到答案。
实战篇,教你如何将所学知识落地,我会带你掌握分布式基础理论和分布式算法在工程实践中的应用。比如,剖析 InfluxDB 企业版的 CP 架构和 AP 架构的设计和背后的思考,以及 Raft、Quorum NWR、Anti-Entropy 等分布式算法的具体实现。
从实战篇中,你可以掌握如何根据场景特点选择适合的分布式算法,以及如何使用和实现分布式算法的实战技巧。这样,当你需要据场景特点选择适合的分布式算法时,就能举一反三,独立思考,设计开发了。
除此之外,我还会带你剖析 Hashicorp Raft 的实现,并以一个分布式 KV 系统的开发实战为例,来聊聊如何使用 Raft 算法实际开发一个分布式系统,以此让你全面拥有分布式算法的实战能力。
总体来说,学完这次课程,你会有以下几个收获:
破除你对分布式协议和算法的困惑,帮助你建立信心;
可落地的 4 大分布式基础理论;
8 个最常用的分布式协议和算法;
3 大实战案例手把手教学;
以实战为中心的分布式内容体系。

写在最后

我承诺课程的每一讲都是干货,也会第一时间和你交流答疑,也请你监督。只要你紧跟脚步,不懂就问,课后多加思考和练习,相信你一定会学有所成。
与此同时,我希望所有对技术有追求的工程师,都能在学完课程之后,顺利攻下这一关。再具体一点说,就是能够在工作中根据场景特点,灵活地设计架构和使用分布式算法开发出适合该场景的分布式系统,并且对架构设计的理解更上一层。姑且把这段话当成我们的教学目标吧。
最后,欢迎你在留言区说一说自己在技术上的困惑,或者想通过这个专栏收获些什么,这样可以方便我在后续的备课中,针对性地讲解内容。重要的是,也能帮你在学完之后回顾这些疑难问题,感受到自己切实的进步和能力的提升。
期待与你在这个课程中碰撞出更多的思维火花,未来的两个月里,让我们成为朋友,携手同行,共同进步!
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《分布式协议与算法实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(19)

  • 业余草
    分步试 ——> 分布式

    一、分布式锁
    数据库的唯一索引
    Redis 的 SETNX 指令
    Redis 的 RedLock 算法
    Zookeeper 的有序节点
    二、分布式事务
    2PC
    本地消息表
    三、CAP
    一致性
    可用性
    分区容忍性
    权衡
    四、BASE
    基本可用
    软状态
    最终一致性
    五、Paxos
    执行过程
    约束条件
    六、Raft
    单个 Candidate 的竞选
    多个 Candidate 竞选
    数据同步

    作者回复: 加油!细节是魔鬼,一起吃透细节,彻底掌握。

    2020-02-10
    20
  • 约书亚
    所有编程的技术点里最喜欢的就是分布式系统一致性和可用性相关的部分。但个人感觉面架构师时分布式算法提到的不是非常多...我在挺长时间里积累了相当多的多分布式的问题:
    我们也在用InfluxDB免费版,也为单机问题感到苦恼。企业版不是不开源么?您是怎样研究的呢?
    看过某云的InfluxDB服务高可用版的架构图,应该就是基于raft实现一主两从的数据复制,这样会否对InfluxDB原本非常高的写吞吐量造成很大的影响?
    不仅仅是etcd此类中间件,现在连要支持极高吞吐量的MQ中间件,有的都开始使基于raft算法了,到底raft经过改造后对整体吞吐量的拖累能降到多低?哪个实现的代码更典型更适合来学习呢?
    一直想实现一个集群之间复制数据的功能,想基于gossip,但看到gossip很多都使用在集群成员管理上,不知道在多大流量的尺度上,使用gossip是合适的?erlang的OTP和支持分布式一致性的数据库,底层使用的是什么算法?
    像eureka,redis sentinel等中间件的分布式算法,有没有什么理论依据?还是纯“瞎蒙”?

    还有很多问题,希望随着此门课程的学习能得到答案。

    最后,20节太短,如果老师还有个人博客/公众号/或者其他作品能让我持续学习就更好了。

    作者回复: 有些问题,我会在后续内容中具体说说,比如如何研究闭源的InfluxDB企业版,Gossip协议的使用场景。有些问题,学习完相关内容后,你应该能独立分析,比如,Raft对集群性能的限制,eureka、redis的一致性实现。在内容中找不到答案的问题,或者学习完内容后,大家仍无法举一反三独立分析的典型问题,我会以加餐篇的形式,详细说说。20节,是浓缩、反复打磨的最核心内容,后续会以加餐篇的形式,加入更多的内容,日常工作中会用到的,比如分布式事务、架构设计、工程实践、性能优化等。

    授人以鱼不如授人以渔,生有涯知无涯,只有掌握了最核心的“道”,才能以不变应万变,突破性的解决系统痛点和打造业界领先的产品。
    我们一同努力,加油!相信你一定会学有所成。

    2020-02-10
    2
    16
  • 蓝魔丶
    不再被各种算法名词术语打败,知晓它们之间的联系与区别,举一反三,加深分布式算法的理解,了解适用场景和常见误区。同时在阅读开源项目的源码时能够很快掌握其中使用的算法技巧,加深理解和思考,希望自己有朝一日也能重复造轮子,还能造更好的轮子

    作者回复: 加油!创造出业界领先的轮子:)

    2020-02-11
    2
  • Frank
    为了走的更远,分布式这块硬骨头得啃下来。希望借助作者分享的内容,自己能对分布式基本轮廓和重要的“公式定理”有一个准确清晰的理解。

    作者回复: 加油!一定可以的。

    2020-02-11
    2
  • 一步
    理解分布式协议和算法,设计出更适合的出分布式系统

    作者回复: 加油!你可以的。

    2020-02-10
    2
  • 忆水寒
    原来只是对概念、一些名称很熟悉,对算法内容看着明白,但是讲不出来、讲不清楚。希望学完这个专栏,我能全局讲清楚每个算法的原理和过程,借助这些知识用于优化我们产品的系统、甚至开发分布式组件(因为我们也是分布式架构)。

    作者回复: 加油!我们一同努力,一定可以的。

    2020-02-10
    1
  • 老王的老李头
    在学习区块链的时候学了几章,算法的知识,希望跟着老师有质的理解
    2020-02-17
  • 盘胧
    来悟一下分布式的道,还是很期待的。
    2020-02-17
  • Geek_Erdore
    老师您好,我想问下您课程中的分布式KV这个项目,KV存储是基于的开源存储系统吗

    作者回复: 示例:)

    2020-02-16
  • 陆徐刚
    喜欢作者在文章中黑体加粗的写作方式
    2020-02-16
  • 死磕到底

    作者回复: 加油!彻底吃透掌握:)

    2020-02-15
  • fcb的鱼
    之前在做监控系统的时候,用的graphite的whisper数据库,也是一款时序数据库。在使用的时候,单机版的数据库确实在数据量大的时候有严重的写入延迟问题,想着能不能搭个whisper的集群,但是实际操作下来真的太难了,最后也没成功。希望通过这个课程的学习,能把这个数据库搭建成功!

    作者回复: 加油!一定可以的:),有疑问,欢迎留言,咱们一起讨论:)。

    2020-02-15
  • Ezra_Xu
    希望能跟随老师的步伐顺利入门分布式领域- -

    作者回复: 加油!你可以的:)

    2020-02-14
  • Daiver
    如果能将下fabric基于kafka排序共识的算法就更好了
    2020-02-13
  • 想知道怎么针对具体场景选择合适的分布式协议。

    作者回复: 加油!吃透理论,掌握架构设计,和根据场景特点进行妥协折中的技巧;吃透算法,理解算法的特点和适用场景。

    2020-02-13
  • 刘宝明
    老师,项目都是用什么语言开发的呢?

    作者回复: 一般多语言混合,不同特性的系统,采用不同的语言,比如,性能敏感的系统,使用C/C++,功能性系统,Golang,脚本,Python。

    2020-02-13
  • wusiration
    没怎么接触过分布式算法,学习中

    作者回复: 加油!

    2020-02-12
  • Geek_57e103
    老师你好,分布式研究经历了比较长时间,像拜占庭将军问题,共识机制等都是比较老的东西。而目前,区块链是分布式系统的新成果,在讲理论和实践时,可以结合区块链来讲吗

    作者回复: 在日常工作中,理论,也就是“道”,容易被忽视,之所以在前4篇,集中讲理论,是因为,授人以鱼不如授人以渔,希望大家能掌握思考方法、分析方法,后续能举一反三,独立思考和解决问题。
    在设计课程时,考虑到区块链已有单独课程(陈浩老师的《深入浅出区块链》),所以,本课程主要专注于后端的分布式系统开发,也就是非拜占庭容错场景。其实,可以把两个课程结合着学习。

    2020-02-12
  • 囊子
    希望学习后能将老师的知识转化为自己的知识,并且能融入自己的理解。

    作者回复: 加油!

    2020-02-11
收起评论
19
25
返回
顶部