分布式协议与算法实战

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

韩健

腾讯资深工程师

你好,我是韩健,你叫我“老韩”就可以了。

在专栏开始之前,我想先和你聊聊自己的经历,加深彼此的了解。在重庆大学的软件工程专业毕业之后,我就开始和分布式系统打交道,至今有十多年了。早期,我接触了电信级分布式系统,比如内核态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算法实际开发一个分布式系统,以此让你全面拥有分布式算法的实战能力。

总体来说,学完这次课程,你会有以下几个收获:

  1. 破除你对分布式协议和算法的困惑,帮助你建立信心;
  2. 可落地的 4 大分布式基础理论;
  3. 8 个最常用的分布式协议和算法;
  4. 3 大实战案例手把手教学;
  5. 以实战为中心的分布式内容体系。

写在最后

我承诺课程的每一讲都是干货,也会第一时间和你交流答疑,也请你监督。只要你紧跟脚步,不懂就问,课后多加思考和练习,相信你一定会学有所成。

与此同时,我希望所有对技术有追求的工程师,都能在学完课程之后,顺利攻下这一关。再具体一点说,就是能够在工作中根据场景特点,灵活地设计架构和使用分布式算法开发出适合该场景的分布式系统,并且对架构设计的理解更上一层。姑且把这段话当成我们的教学目标吧。

最后,欢迎你在留言区说一说自己在技术上的困惑,或者想通过这个专栏收获些什么,这样可以方便我在后续的备课中,针对性地讲解内容。重要的是,也能帮你在学完之后回顾这些疑难问题,感受到自己切实的进步和能力的提升。

期待与你在这个课程中碰撞出更多的思维火花,未来的两个月里,让我们成为朋友,携手同行,共同进步!

教程推荐

Kotlin在线教程

MariaDB在线教程

MongoDB在线教程

Erlang在线教程

Socket.io在线教程

Go 设计模式在线教程

随机推荐

巴拉巴拉儿童T恤是否值得入手?评测教你怎么选?

可心柔婴童乳霜纸可靠性如何?详细评测报告!

ZMIQB818评价怎么样?详细评测报告!

云蕾一次性用品可靠性如何?来看看图文评测!

法丽兹饼干-膨化选购技巧有哪些?评测不看后悔!

松下ES-ERT3评测性价比高吗?专业老用户评测?