《分布式协议与算法实战:攻克分布式系统设计的关键难题》是由机械工业出版社出版的一本关于分布式算法方面的书籍,作者是韩健,主要介绍了关于分布式协议、算法实战方面的知识内容,目前在分布式算法类书籍综合评分为:7.5分。
书籍介绍
编辑推荐
(1)作者背景权威:作者先后就职于Intel、腾讯等互联网大厂,担任重要工作。
(2)作者经验丰富:作者在大规模分布式系统领域有10余年工作经验,曾担任腾讯QQ后端基础设施技术负责人。
(3)理论直指核心:深刻、详细剖析分布式的4大基础理论和10种常用协议和算法,帮助读者透彻理解分布式的本质和精髓。
(4)实战工程落地:通过10余个小案例和3大综合案例,详细演示了如何在工程实践中将分布式的基础理论和协议与算法落地。
(5)12位专家推荐:来自腾讯、华为、阿里等企业的12位专家高度评价并一致推荐。
内容简介
这是一本以实战为导向、系统讲解分布式协议与算法、深刻揭示分布式系统精髓与本质的著作。作者以自己在腾讯和Intel的多年分布式系统工程经验为基础,用图文并茂、通俗易懂的方式详细讲解了分布式的基础理论、协议、算法,以及它们如何在工程实践中落地。
通过本书,你将掌握如下核心知识:
(1)4大分布式基础理论
详细讲解分布式架构设计的核心基础理论,包括拜占庭将军问题、CAP理论、ACID理论、BASE理论,这些理论能指导你在实战中根据场景特点选择合适的分布式算法。
(2)10种常用的分布式协议和算法
详细讲解了Paxos算法、Raft算法、一致哈希算法、ZAB协议、Gossip协议、Quorum NWR协议、MySQL XA规范、TCC、PBFT算法、PoW算法等常用分布式协议和算法的的原理、特点、适用场景和常见误区等。
目录
- 赞誉
- 序
- 前言
- 理论篇
- 第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.1CAP理论:分布式系统的ph试纸,用它来测酸碱度20
- 2.1.1CAP三指标20
- 2.1.2CAP不可能三角24
- 2.1.3如何使用CAP理论25
- 2.2ACID理论:CAP的“酸”,追求一致性28
- 2.2.1二阶段提交协议30
- 2.2.2TCC32
- 2.3BASE理论:CAP的“碱”,追求可用性35
- 2.3.1实现基本可用的4板斧36
- 2.3.2终一致性37
- 2.3.3如何使用BASE理论39
- 2.4本章小结40
- 协议与算法篇
- 第3章Paxos算法44
- 3.1Basic Paxos:如何在多个节点间确定某变量的值45
- 3.1.1你需要了解的3种角色46
- 3.1.2如何达成共识48
- 3.2Multi-Paxos:Multi-Paxos不是一个算法,而是统称52
- 3.2.1兰伯特关于Multi-Paxos的思考53
- 3.2.2Chubby是如何实现Multi-Paxos算法的55
- 3.3本章小结58
- 第4章Raft算法59
- 4.1Raft是如何选举领导者的60
- 4.1.1有哪些成员身份60
- 4.1.2选举领导者的过程61
- 4.1.3选举过程四连问64
- 4.2Raft是如何复制日志的68
- 4.2.1如何理解日志68
- 4.2.2如何复制日志69
- 4.2.3如何实现日志的一致性71
- 4.3Raft是如何解决成员变更问题的73
- 4.3.1成员变更问题74
- 4.3.2如何通过单节点变更解决成员变更问题75
- 4.4Raft与一致性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.2ZAB协议是如何实现操作的顺序性的97
- 6.2主节点崩溃了,怎么办101
- 6.2.1ZAB协议是如何选举领导者的101
- 6.2.2ZooKeeper是如何选举领导者的107
- 6.3如何从故障中恢复111
- 6.3.1ZAB集群如何从故障中恢复112
- 6.3.2ZooKeeper如何从故障中恢复119
- 6.4ZAB协议:如何处理读写请求125
- 6.4.1ZooKeeper处理读写请求的原理126
- 6.4.2ZooKeeper处理读写请求的代码实现127
- 6.5ZAB协议与Raft算法134
- 6.6本章小结136
- 第7章Gossip协议137
- 7.1Gossip的三板斧138
- 7.2如何使用反熵实现终一致性141
- 7.3本章小结144
- 第8章Quorum NWR算法145
- 8.1Quorum 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.2PBFT算法是如何达成共识的167
- 11.3如何替换作恶的主节点171
- 11.3.1主节点作恶会出现什么问题171
- 11.3.2如何替换作恶的主节点172
- 11.4PBFT算法的局限、解决办法和应用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.2Hinted-handoff189
- 13.3.3反熵190
- 13.3.4Quorum NWR191
- 13.4本章小结192
- 第14章Hashicorp Raft194
- 14.1如何跨过理论和代码之间的鸿沟195
- 14.1.1Hashicorp Raft如何实现领导者选举195
- 14.1.2Hashicorp 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