想成为分布式高手?那就先把协议和算法烂熟于心吧
你好,我是韩健,你叫我“老韩”就可以了。
在正式介绍本书内容之前,我想先和你聊聊我自己的经历,以加深你对我的了解。从重庆大学的软件工程专业毕业之后,我就开始和分布式系统打交道,至今有十多年了。早期,我使用的是电信级分布式系统,比如内核态HA Cluster,现在使用的是互联网分布式系统,比如名字服务、NoSQL存储、监控大数据平台。
我曾经做过创业公司的CTO,加入腾讯之后,负责过QQ后台海量服务分布式中间件以及时序数据库InfluxDB自研集群系统的架构设计和研发工作。
你可能会问我,为什么要单独讲分布式协议和算法呢?为简洁起见,我们下面都将其简称为分布式算法。在我看来,分布式算法其实就是决定分布式系统如何运行的核心规则和关键步骤,所以,如果一个人想真正搞懂分布式技术,开发出一个分布式系统,最先需要掌握的就是这部分知识。
举个例子,学数学的时候,我们总是会学到很多公式或者定理,开始时也会觉得这些定理枯燥至极。但渐渐地,我开始明白这些定理和公式是前人花了很长时间思考、验证、总结出来的规律,能够帮助我们更快速地找到正确答案。同样,你学习这本书也是这个道理。
分布式算法是分布式技术的核心
可能有些读者会说:“老韩,你别忽悠我,我可是系统看过分布式领域的经典书的,比如《分布式系统:概念与设计》《分布式系统原理与范型》,这些书里介绍分布式算法的篇幅可不多啊!”
是的,这也是我觉得奇怪的地方。不过,你可以看看网上关于分布式的提问,其中点击量大的问题肯定是与分布式算法相关的问题,这是不是从侧面说明了它的重要性呢?
结合我多年的经验来看,很多读者读了那几本厚重的经典书之后,在实际工作中还是会不知所措。我想,如果他们来问我,我会建议他们先把各种分布式算法搞清楚。因为学习分布式系统时最最重要的事情,就是选择或设计合适的算法,解决一致性和可用性相关的问题。
尽管它是分布式技术的核心与关键,但实际掌握它的人或者公司却很少。下面我来说个真实的事儿。
我刚刚提到的InfluxDB其实是一个开源的时序数据库系统,当然,开源的只是单机版本,如果你要使用集群功能,要么基于开源版本自研,要么购买别人开发的企业版本。
而这里面,企业版本一个节点一年License授权费就是1.5万美元,是不是很贵?那贵在哪里呢?相比单机版本,企业版本的技术壁垒又是什么?
结合我的亲身经验来看,企业版本的护城河就是以分布式算法为核心的分布式集群能力。
我知道有很多技术团队曾经试图自己实现InfluxDB企业版本的功能,但最后还是放弃了,因为这里面问题太多了。比如,在实现集群能力的时候,我们应该怎样支持基于时序进行分片?怎样支持水平扩展?再比如,有些人在接入性能敏感、应该使用反熵(Anti-Entropy)算法的场景中使用了Raft算法,使得集群性能约等于单机性能。
可以看到,分布式系统的价值和意义的确很大,如果不能准确理解分布式算法,我们不仅无法保障开发实现的分布式系统的稳定运行,还会因为种种现网故障,逐渐影响到职业发展,丧失职场竞争力。
再说点儿更实际的,现阶段,掌握分布式算法也是你在面试架构师、技术专家等高端岗位时的敲门砖。你可以搜索看看,那些知名公司在招聘架构师或者高级工程师时,是不是在岗位要求中写着熟悉分布式算法相关理论等内容?不过从我作为面试官的经验来看,懂这部分的候选人实在是少之又少。
说了这么多,我只是想强调,不管你是基于技术追求的考虑,还是基于长期职业发展和提升职场竞争力的考量,分布式算法都是你在这个时代应该掌握的基本功。
当然,我也知道分布式算法确实比较难学,主要原因有以下几点。
除了算法本身比较抽象、不容易理解之外,即使是非常经典的论文也存在一些关键细节没有讲清楚的情况。以你比较熟悉的拜占庭将军问题为例,在阅读口信消息型拜占庭问题之解时,你是不是感到很吃力呢?关于这部分内容,论文并没有讲清楚,不过我会在本书的第1章带你了解这些内容。
信息时代资料丰富,但质量参差不齐,甚至有错误。网上信息大多是“复制粘贴”的结果,而且因为分布式领域的论文多以英文论文的形式出现,论文的中文翻译版本难免有错误或者与原文有出入的地方,这也给自主学习带来很多不必要的障碍和误导。如果你没有足够的好奇心和探究精神,很难完全吃透关键细节。
很多资料是为了讲解理论而讲解理论,无法站在“用”的角度,将理论和实战结合。最终,你只能在“嘴”上理解,而无法动手。
方法得当,知识并不难学
在我看来,要想掌握这部分内容,我们不仅要能理解常用算法的原理、特点和局限,还要能根据场景特点选择合适的分布式算法。
所以,为了更好地帮助你轻松、透彻地搞懂分布式技术,理解其中最核心、最精妙的内容,我会在本书中将自己支撑海量互联网服务中的分布式算法的实战心得分享给你。
全书一共15章,结合内容可划分为理论篇、协议与算法篇以及实战篇。
理论篇(第1、2章),会带你了解分布式架构设计核心且具有实践指导性的基础理论,这里面会涉及典型的分布式问题,以及如何认识分布式系统中相互矛盾的特性,帮助你在实战中根据场景特点选择合适的分布式算法。
协议与算法篇(第3~12章),会带你了解并掌握常用协议与算法的原理、特点、适用场景和常见误区等。比如,你以为开发分布式系统使用Raft算法就可以了,但是其实它比较适合性能要求不高的强一致性场景;又比如在面试时,如果被问到Paxos算法和Raft算法的区别,你可以结合这篇内容给出答案。
实战篇(第13~15章),会带你掌握分布式基础理论和分布式算法在工程实践中的应用,教你将所学知识真正落地。比如,剖析InfluxDB企业版的CP架构和AP架构的设计与背后的思考,以及Raft、Quorum NWR、Anti-Entropy等分布式算法的具体实现。
从实战篇中,你可以掌握如何根据场景特点选择适合的分布式算法,以及使用和实现分布式算法的实战技巧。这样,当需要根据场景特点选择合适的分布式算法时,你就能举一反三、独立思考了。
除此之外,我还会带你剖析Hashicorp Raft的实现,并以一个分布式KV系统的开发实战为例,来聊聊如何使用Raft算法实际开发一个分布式系统,以此让你全面拥有分布式算法的实战能力。
总体来说,读完本书,你会有以下几点收获:
可落地的4个分布式基础理论;
10个最常用的分布式协议和算法;
3个实战案例手把手教学;
以实战为中心的分布式内容体系;
破除你对分布式协议和算法的困惑,帮助你建立信心。
c***t 2022-10-24 21:51:16
好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好