猜你喜欢
深入理解分布式系统

深入理解分布式系统

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

《深入理解分布式系统》主要讲解分布式系统常用的基础知识、算法和案例,经笔者对文献海洋中晦涩艰深的原理和算法进行提炼,辅以图示和代码,并结合实际经验进行分析总结而成。通过阅读本书,读者可以快速、轻松地掌握分布式系统的基本原理,以及Paxos或Raft共识算法,并通过典型的案例学习如何设计大型分布式系统。

《深入理解分布式系统》首先介绍什么是分布式系统、分布式系统带来的挑战,以及如何对分布式系统进行建模,这部分内容偏向概念性介绍。接着介绍了分布式数据的基础知识,包括数据分区技术、数据复制技术、CAP定理、一致性模型和隔离级别,尝试厘清一些十分容易混淆的术语,比如一致性、线性一致性、最终一致性和一致性算法等。本书还介绍了分布式系统的核心算法——Paxos和Raft算法,不仅补充了大量图示进行讲解,还从零实现了一个Paxos算法。此外,本书分析了常见的分布式事务,并讨论了分布式系统中的时间问题,整理了一些实际发生的编程陷阱。最后结合一些对工业界产生重大影响的论文或开源系统,学习前人在设计大型分布式系统时的思路、取舍和创新。


作者简介

唐伟志,曾任网易游戏、腾讯基础架构工程师。毕业后一直从事分布式系统相关工作,在知乎和公众号“多颗糖”上分享对分布式系统论文的解读和算法的讲解。开源爱好者、TiDB Reviewer和Kubernetes Contributor。


编辑推荐

面向初学者:通过理论和实践结合的方式介绍分布式系统,帮助读者夯实分布式基础知识;

面向实践者:实现简单的Paxos共识算法,分析HDFS、ZooKeeper、etcd、Kubernetes等分布式系统案例。


前言

本书写作目的

本书面向对分布式系统感兴趣的技术人员,无论初次接触分布式系统的新手、拥有工作经验的行家,还是分布式系统方面的专业人士,都可以根据自身所需阅读本书各个章节。

目前国内对分布式系统的学习非常依赖于国外课程和资源,其中的佼佼者如MIT的课程代号为6.824的经典分布式系统课程。然而,国内在分布式系统方面仍缺乏成体系的学习材料,缺乏对Paxos和Raft算法进行深入剖析同时包含实际代码实战的图书。更糟糕的是,分布式系统领域有的词语被过度复用,再加上翻译的影响,导致许多概念和术语混淆,最具代表性的便是“一致性”和“一致性算法”,读者可以就这两个概念与周围的朋友交流,应该会得到各种不同的答案。

因此,本书的写作目的还包括:

能解释清楚各种分布式原理、算法和系统“是什么”“为什么”“如何实现”,以及优缺点。同时,本书会穿插介绍许多分布式技术相关的有趣故事。

能够讲清楚算法背景,尝试解决什么问题,如何解决,以及如何优化算法。

能够尽量展示伪代码。笔者信奉“代码胜过千言”,虽然对于分布式系统来说,代码经常会比较复杂,但本书会尽量展示代码或伪代码。

能够对每个原理举例并画图说明,并结合实际案例和经验进行分析。

能够深度剖析各个案例,让读者无惧系统设计。

本书结构

本书内容涵盖常见的分布式系统基础知识,包括分布式系统定义和基本原则、分布式数据基础、分布式共识算法(以Paxos和Raft为主)、分布式事务、分布式系统中的时间问题及案例分享。

第1章主要介绍什么是分布式系统,为什么需要分布式系统,以及分布式系统带来的挑战,最后给出一些设计分布式系统时非常有用的数字。有基础的读者可以选择性阅读。

第2章主要介绍分布式系统模型,本章从两个著名的思想实验(两将军问题和拜占庭将军问题)开始,然后从网络链路、节点故障和时间三个方面对分布式系统进行分类,可作为读者日常工作中进行系统建模的引子。

第3章主要介绍分布式数据基础。为了满足分布式系统对高性能、可用性、容错性和可扩展性的需求,通常底层数据存储系统会对数据进行分散存储,常见的技术有数据分区和数据复制。然而,这也带来了一致性问题:上层应用如何理解分布式数据的不一致?什么样的数据是不一致的?什么是 CAP 定理?更深入地讲,我们该如何区分线性一致性、强一致性、弱一致性和最终一致性等容易混淆的词汇?什么是隔离级别?它和一致性又有什么不同?本章尝试厘清分布式系统中这些概念,帮助读者更好地理解和构建一个分布式数据存储系统。

第4章主要介绍分布式共识算法,即Paxos和Raft等算法。共识算法通常作为一个分布式系统的基础库被其他应用调用,各大互联网厂商如Google、Meta、Amazon、腾讯、阿里巴巴、百度和字节跳动都实现了自己的Paxos或Raft基础库。但共识算法的难以理解可谓“臭名昭著”,笔者周围许多人都被Paxos晦涩的论文和数不尽的变体“劝退”。虽说Raft更为容易理解,但想要实现一个“工业级”的Raft,仍需许多必不可少的优化,并不像大多数人想象的那么简单。因此,本章毋庸置疑是本书重点,笔者将带领读者深入浅出地理解共识算法,让读者不再畏惧Paxos和Raft算法。

第5章主要介绍常见的分布式事务实现,主要分为原子提交和并发控制两部分。原子提交算法包括两阶段提交、三阶段提交、Paxos提交、Saga事务等,并发控制包括两阶段锁、乐观并发控制和多版本并发控制。最后具体分析Google的Percolator——一个结合了两阶段提交和快照隔离的分布式事务解决方案。虽说分布式事务解决方案层出不穷,但基本离不开本书介绍的这几种类型。

第6章主要介绍分布式系统中的时间和事件顺序问题。由于分布式系统没有一个统一的时钟服务,所以诞生了许多单体系统中不存在的时钟问题,本章介绍了物理时钟、时钟同步、逻辑时钟、向量时钟和分布式快照。

第7章介绍了一些经典分布式系统的案例,这些案例的设计精妙且经久不衰,巧妙结合了前几章许多分布式系统的技术,成为人们争相模仿的对象,影响了无数的开发者和开源软件。本章重新审视这些案例,希望给读者带来新的灵感,能够帮助读者解决工作或面试中遇到的难题。

为了照顾初次接触分布式系统的读者,也为了循序渐进地展开主题,本书前两章会从基础概念讲起,有基础的读者可以选择跳过前两章的内容。

表达约定

介于不同的参考资料或不同的上下文语境,在本书中,对以下术语可能有不同的表述方式,例如:

节点:也叫进程、计算机、服务器、组件甚至副本。

分片:有时会叫分区或水平分区,本书不考究其概念上的细微差别。

共识(Consensus):国内许多博客会把Paxos或Raft等算法称为“一致性”算法,这容易与一致性(Consistency)混淆,因此,本书将其统称为共识算法。

代码与官方参考

相关链接请登录www.broadview.com.cn/42811中的下载资源处获取。

勘误和支持

笔者尽量保证书中的内容严谨,但限于笔者水平,无法保证内容百分之百全面与正确,本书可能出现的错误和不受欢迎的观点都是本人的原因,与笔者引用的参考资料没有任何关系。若读者在阅读过程中发现书中存在失误和不足,或者有任何建议,都可以通过本书源码仓库提交Issue或PR,还可以关注我的公众号“多颗糖”直接与我交流。我会把每一位读者都当作良师益友,你们的批评和意见我都会十分重视与感激,我会在本书后续版本和勘误中及时更新。


目录

产品特色