猜你喜欢
分布式协议与算法实战

分布式协议与算法实战

书籍作者:韩健 ISBN:9787111710226
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:3389
创建日期:2023-05-10 发布日期:2023-05-10
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
内容简介

这是一本以实战为导向、系统讲解分布式协议与算法、深刻揭示分布式系统精髓与本质的著作。作者以自己在腾讯和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等分布式算法的具体实现。

作者简介

作者:韩健
资深分布式技术专家,拥有10余年技术研发和管理经验。曾就职于腾讯(前腾讯QQ后端基础设施技术负责人)和Intel,从事与大规模分布式系统和云计算相关的工作。
在大规模分布式系统领域有非常深厚的积累,擅长分布式、高性能、高并发、高可用的海量服务中间件的架构设计和开发,尤其是与大数据中间件相关的各种技术。在操作系统和计算机网络领域也有非常丰富的实践经验,对Linux内核、TCP/IP等技术有深入的理解。
热衷于技术分享,是FreeTSDB(业界第一个补齐了InfluxDB分布式能力的开源时序数据库)的发起人和核心贡献者。极客时间专栏作家,《分布式协议与算法实战》专栏作者,著有畅销书《InfluxDB原理与实战》。
维护有微信公众号influxdb-dev。 

技术审校:朱仪姣
腾讯资深架构师,腾讯监管业务研发负责人。对分布式设计、海量服务之道、高性能架构设计有深刻的理解和丰富的实战经验,主导了万亿级安全监测大数据分析平台的分布式架构设计和性能优化等项目。

编辑推荐
适读人群 :所有开发工程师都需要看这本书,因为分布式系统无处不在,每一个开发工程师都应该了解分布式系统的底层支撑——分布式协议和算法。

(1)作者背景:作者先后就职于Intel、腾讯等互联网大厂,担任重要工作。
(2)作者经验丰富:作者在大规模分布式系统领域有10余年工作经验,曾担任腾讯QQ后端基础设施技术负责人。
(3)理论直指核心:深刻、详细剖析分布式的4大基础理论和10种常用协议和算法,帮助读者透彻理解分布式的本质和精髓。
(4)实战工程落地:通过10余个小案例和3大综合案例,详细演示了如何在工程实践中将分布式的基础理论和协议与算法落地。
(5)12位专家推荐:来自腾讯、华为、阿里等企业的12位专家高度评价并一致推荐。

前言

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


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

在正式介绍本书内容之前,我想先和你聊聊我自己的经历,以加深你对我的了解。从重庆大学的软件工程专业毕业之后,我就开始和分布式系统打交道,至今有十多年了。早期,我使用的是电信级分布式系统,比如内核态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个实战案例手把手教学;

以实战为中心的分布式内容体系;

破除你对分布式协议和算法的困惑,帮助你建立信心。



目录

【理论篇】

第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

短评

好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好好

2022-10-24 21:51:16

内容不错,终于见到有人将拜占庭将军问题讲明白了。

2022-09-20 11:13:17

很新的研究工作,值得学习和参考

2022-09-15 23:38:26

产品特色