首页>参考读物>计算机科学与技术>软件与程序设计

分布式协议与算法实战:攻克分布式系统设计的关键难题
作者 : 韩健 著
出版日期 : 2022-08-05
ISBN : 978-7-111-71022-6
定价 : 99.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 248
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

内容介绍
这是一本以实战为导向、系统讲解分布式协议与算法、深刻揭示分布式系统精髓与本质的著作。作者以自己在腾讯和Intel的多年分布式系统工程经验为基础,用图文并茂、通俗易懂的方式详细讲解了分布式的基础理论、协议、算法,以及它们如何在工程实践中落地。
通过本书,你将掌握如下核心知识:
(1)4大分布式基础理论
详细讲解分布式架构设计的核心基础理论,包括拜占庭将军问题、CAP理论、ACID理论、BASE理论,这些理论能指导你在实战中根据场景特点选择合适的分布式算法。
(2)10种常用的分布式协议和算法
详细讲解了Paxos算法、Raft算法、一致哈希算法、ZAB协议、Gossip协议、Quorum NWR协议、MySQL XA规范、TCC、PBFT算法、PoW算法等常用分布式协议和算法的的原理、特点、适用场景和常见误区等。
(3)3大综合实战案例
通过3个综合案例讲解了分布式基础理论和分布式算法在工程实践中的应用,教你将所学知识真正落地。包括InfluxDB企业版的CP架构和AP架构的设计和背后思考,以及Raft、Quorum NWR、Anti-Entropy等分布式算法的具体实现。

图书特色

资深分布式技术专家在腾讯和Intel10余年经验总结,
华为、腾讯、阿里等企业10余位专家力荐
涵盖4大分布式系统基础理论、10种常用分布式协议与算法、
100余条互联网大规模系统实战心得、3个综合案例
作者在极客时间同内容专栏超20000人付费学习

图书前言

想成为分布式高手?那就先把协议和算法烂熟于心吧
你好,我是韩健,你叫我“老韩”就可以了。
在正式介绍本书内容之前,我想先和你聊聊我自己的经历,以加深你对我的了解。从重庆大学的软件工程专业毕业之后,我就开始和分布式系统打交道,至今有十多年了。早期,我使用的是电信级分布式系统,比如内核态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个实战案例手把手教学;
以实战为中心的分布式内容体系;
破除你对分布式协议和算法的困惑,帮助你建立信心。
写在最后
希望大家都能在学完本书之后,顺利攻下分布式系统设计这一关。具体来说,希望大家能够在工作中根据场景特点,灵活地设计架构和使用分布式算法,开发出适合该场景的分布式系统,同时更深入地理解架构设计。姑且把这段话当作我们的学习目标吧!期待与你在这本书中碰撞出更多的思维火花,做时间的朋友,携手同行,共同进步!

专家评论

随着互联网和信息产业在中国的蓬勃发展,越来越多在中国本土成长起来的工程师开始接触到计算机科学技术领域中的顶尖理论和技术,并积攒了大量的实战经验,本书作者韩健便是其中值得骄傲的代表之一。曾几何时,中国的工程师要想获得有关计算机科学和技术的一手资料,就不得不阅读引进版图书。现在,这样的情况正在改变——中国工程师开始用中文撰写与计算机相关的技术著作。这本书总结了作者十多年的分布式系统开发和运维经验,并融入了自己的思考,通过理论联系实践,系统地展现了分布式系统设计中的关键要素。本书行文流畅,用词幽默,术语准确,符合中国工程师的阅读习惯。相信本书的内容对所有致力于构造复杂、高效的分布式软件系统的工程师都会非常有帮助!
——魏永明 飞漫软件创始人,MiniGUI及HVML开发者
经过多年技术发展,基础设施支撑大规模服务已不是难题,而以云计算为代表的基础设施革命,对技术有了更高的诉求:弹性伸缩、知识驱动、成本优势等。要满足这些诉求,我们需要掌握核心技术,而分布式技术就是核心技术之一。希望精心写就的这本书能给读者带来更多启发,帮助更多的读者掌握并持续精进硬核的分布式技术。
——汪乾荣 深圳微播创始人兼CTO
大多数分布式经典图书都是在介绍基本概念、原理等,即使看完了这些书,对一些概念的理解依然不到位,到了真正实操时还是无从下手。本书作者韩健从分布式协议与算法这一独特角度开始,对常用的协议与算法进行了细致的分析与讲解,并结合工程实践引领读者将学到的分布式算法落地。纸上谈来终觉浅,绝知此事要躬行。从理论到工程实践,相信读者包括我自己对分布式系统都会有更深入的认识。最后感谢韩健分享自己的知识和经验。
——高峰 华为技术专家、《Linux环境编程:从应用到内核》作者
分布式协议与算法是分布式系统中非常关键的部分。本书由浅入深,通过形象的案例深度剖析了 Raft、Paxos、Gossip 等协议的精髓,并配合具体系统里的实现进行讲解,干货满满,是了解分布式系统关键技术不可多得的好书。
——张友东 阿里云数据库专家
这本书深入浅出地讲述了分布式系统的设计理念以及核心算法,可以帮助读者了解并掌握这些理论知识并付诸实现。我曾与作者在同一个团队工作过,他不仅技术功底深厚、拥有丰富的分布式系统开发经验,而且对待未知事物总是充满着好奇心。相信在阅读本书时读者可以深刻地体会到他的技术修养和功力。
——陈良 奇点安全实验室主任
拜读完这本书,第一印象是非常实用。分布式系统中的一个核心问题就是数据一致性问题。作者通过深入浅出的案例解析,系统且完整地介绍了与分布式一致性相关的协议与算法知识。对于希望学习或者参与分布式系统开发、维护的读者来说本书具有很大的实战参考价值。
——李震东 华为SRE技术专家
做互联网系统最难的就是如何支撑海量请求,而支撑海量请求的关键在于分布式系统,如果我们想深刻理解或者开发实现分布式系统,协议与算法是必须掌握的。本书以实战为中心,语言生动、图文结合,是深刻理解分布式协议与算法、掌握分布式系统开发能力的绝佳资料。
——唐聪 腾讯资深工程师/极客时间“etcd实战课”讲师
随着新基建(云、5G、AI、IoT、区块链等)的快速落地,传统中心化架构向着去中心化发展已经成为竞争力构筑的关键,甚至是唯一方向。我们作为个体身处其中,需要感知到这些大势的变化。而这些变化中最核心的点就是分布式能力的建设,重中之重是分布式协议与算法在工程化角度的研究和落地。这本书不仅有理论、有算法,更可贵的是结合工程落地,以演绎故事的方式系统介绍了与分布式相关的技术知识,值得认真一读。
——杨晓峰 云计算技术专家

上架指导

计算机\程序设计

封底文字

在移动互联网时代,用户规模和平均用户时长都较十多年前有了数十倍甚至更多倍的增长。现在,做任何互联网上层应用或底层支撑平台,都必须考虑系统的横向平滑扩展能力,以应对随时可能出现的突发式增长带来的“幸福烦恼”,而该能力的基础就是分布式算法。作者将其在分布式算法方面的多年学习和实践经验全面总结并通过形象的现实场景类比方式呈现给读者,本书是系统性学习分布式协议与算法的很好的参考书。
——赵建春 腾讯云副总裁

企业数字化、智能化转型,除了需要机器学习、知识图谱等技术,还需要端、管、云,而实现端、管、云,就离不开各种各样的可用性、一致性技术。本书图例丰富、文字风趣,是作者多年一线实战的经验总结,无论是初学者还是从业者,都能从中获益。
——李旭阳 富途证券研发副总裁

数据是工业革命的重要原料,数据驱动“万物”,但如何实时、高可用、数据高可靠、低成本地支撑海量数据的分析,仍是业界努力的方向。而要解决这些问题,活学活用分布式技术就非常重要。丰富的实践经验、对分布式协议与算法的深入思考,是本书的两大特点,也是韩健严谨工作、对技术深入研究的体现。希望本书能帮助更多读者掌握分布式技术,在日常工作中创造更大价值。
——苏元明 UCloud(优刻得)技术副总裁

一部互联网发展史,就是一部解决可用性、一致性问题的历史,以“简洁、有效”为中心的腾讯经验就是其中的代表。这本书包含了在实际场景中克服种种技术挑战而凝结的腾讯经验,可帮助广大同行在设计和实现大规模分布式系统时举一反三、活学活用。
——傅鸿城 腾讯音乐技术副总裁

作者简介

韩健 著:作者简介
韩健
资深架构师,现就职于腾讯,担任监控大数据平台技术负责人,曾先后担任创业公司CTO、Intel资深工程师。既对分布式系统、InfluxDB的架构设计和开发有深刻的理解,又在海量服务分布式组件架构设计、高性能架构设计、高质量代码编写等方面有深厚的积累,经验丰富。
在腾讯先后负责了监控大数据平台、QQ后台海量服务分布式组件(微服务开发框架、名字服务、配置中心等)等项目的相关工作。曾经主导和参与了多个高并发分布式系统、Linux内核、高性能网络操作系统等大型项目。
当前专注于下一代具有成本优势的高性能监控大数据平台、海量服务分布式组件、DPDK高性能TCPIP协议栈的创新和研发。
维护有微信订阅号influxdb-dev。

图书目录

赞誉

前言
理论篇
第1章 拜占庭将军问题2
1.1 什么是拜占庭将军问题2
1.1.1 苏秦的困境3
1.1.2 二忠一叛难题3
1.2 口信消息,我们该如何处理呢5
1.3 如何解决n>(3f +1)的限制8
1.3.1 什么是签名消息8
1.3.2 签名消息型拜占庭问题之解10
1.4 拜占庭容错算法和非拜占庭容错算法,该如何选择呢16
1.5 本章小结17
第2章 CAP理论19
2.1 CAP理论:分布式系统的ph试纸,用它来测酸碱度20
2.1.1 CAP三指标20
2.1.2 CAP不可能三角24
2.1.3 如何使用CAP理论25
2.2 ACID理论:CAP的“酸”,追求一致性28
2.2.1 二阶段提交协议30
2.2.2 TCC32
2.3 BASE理论:CAP的“碱”,追求可用性35
2.3.1 实现基本可用的4板斧36
2.3.2 最终一致性37
2.3.3 如何使用BASE理论39
2.4 本章小结40
协议与算法篇
第3章 Paxos算法44
3.1 Basic Paxos:如何在多个节点间确定某变量的值45
3.1.1 你需要了解的3种角色46
3.1.2 如何达成共识48
3.2 Multi-Paxos:Multi-Paxos不是一个算法,而是统称52
3.2.1 兰伯特关于Multi-Paxos的思考53
3.2.2 Chubby是如何实现Multi-Paxos算法的55
3.3 本章小结58
第4章 Raft算法59
4.1 Raft是如何选举领导者的60
4.1.1 有哪些成员身份60
4.1.2 选举领导者的过程61
4.1.3 选举过程四连问64
4.2 Raft是如何复制日志的68
4.2.1 如何理解日志68
4.2.2 如何复制日志69
4.2.3 如何实现日志的一致性71
4.3 Raft是如何解决成员变更问题的73
4.3.1 成员变更问题74
4.3.2 如何通过单节点变更解决成员变更问题75
4.4 Raft与一致性79
4.5 本章小结80
第5章 一致哈希算法82
5.1 使用哈希算法有什么问题83
5.2 如何使用一致哈希算法实现哈希寻址85
5.3 本章小结90
第6章 ZAB协议92
6.1 如何实现操作的顺序性93
6.1.1 为什么Multi-Paxos无法保证操作的顺序性93
6.1.2 ZAB协议是如何实现操作的顺序性的97
6.2 主节点崩溃了,怎么办101
6.2.1 ZAB协议是如何选举领导者的101
6.2.2 ZooKeeper是如何选举领导者的107
6.3 如何从故障中恢复111
6.3.1 ZAB集群如何从故障中恢复112
6.3.2 ZooKeeper如何从故障中恢复119
6.4 ZAB协议:如何处理读写请求125
6.4.1 ZooKeeper处理读写请求的原理126
6.4.2 ZooKeeper处理读写请求的代码实现127
6.5 ZAB协议与Raft算法134
6.6 本章小结136
第7章 Gossip协议137
7.1 Gossip的三板斧138
7.2 如何使用反熵实现最终一致性141
7.3 本章小结144
第8章 Quorum NWR算法145
8.1 Quorum NWR的三要素146
8.2 如何实现Quorum NWR149
8.3 本章小结150
第9章 MySQL XA151
9.1 什么是XA规范152
9.2 如何通过MySQL XA实现分布式事务155
9.3 本章小结157
第10章 TCC158
10.1 什么是TCC159
10.2 如何通过TCC实现指令执行的原子性161
10.3 本章小结163
第11章 PBFT算法165
11.1 口信消息型拜占庭问题之解的局限166
11.2 PBFT算法是如何达成共识的167
11.3 如何替换作恶的主节点171
11.3.1 主节点作恶会出现什么问题171
11.3.2 如何替换作恶的主节点172
11.4 PBFT算法的局限、解决办法和应用176
11.5 本章小结177
第12章 PoW算法178
12.1 如何理解工作量证明179
12.2 区块链是如何实现PoW算法的181
12.3 本章小结183
实战篇
第13章 InfluxDB企业版一致性实现剖析186
13.1 什么是时序数据库186
13.2 如何实现META节点一致性188
13.3 如何实现DATA节点一致性188
13.3.1 自定义副本数188
13.3.2 Hinted-handoff189
13.3.3 反熵190
13.3.4 Quorum NWR191
13.4 本章小结192
第14章 Hashicorp Raft194
14.1 如何跨过理论和代码之间的鸿沟195
14.1.1 Hashicorp Raft如何实现领导者选举195
14.1.2 Hashicorp Raft如何复制日志201
14.2 如何以集群节点为中心使用API205
14.2.1 如何创建Raft节点205
14.2.2 如何增加集群节点208
14.2.3 如何移除集群节点209
14.2.4 如何查看集群节点状态210
14.3 本章小结211
第15章 基于Raft的分布式KV系统开发实战213
15.1 如何设计架构214
15.1.1 如何设计接入协议215
15.1.2 如何设计KV操作216
15.1.3 如何实现分布式集群218
15.2 如何实现代码220
15.2.1 如何实现接入协议220
15.2.2 如何实现KV操作222
15.2.3 如何实现分布式集群224
15.3 本章小结229

教学资源推荐
作者: Patrick Henry Winston, Sundar Narasimhan
作者: 顾治华 陈天煌 孙珊珊 编著
作者: [美]约翰·R. 莱文(John R. Levine) 著
参考读物推荐
作者: 李相国
作者: 张秀宏 著
作者: (美)Ian F. Darwin 编