写点什么

从事分布式工作 10 余年,这本书颠覆了我的认知!

  • 2022-11-01
    北京
  • 本文字数:4616 字

    阅读完需:约 15 分钟

我从事分布式系统架构相关工作十余年了,不仅熟悉常见的诸如 Zookeeper 等分布式框架,对于脑裂问题、CAP 理论、Paxos 和 Raft 算法也很熟悉,所以自认为略懂分布式系统。但江峰老师的著作《分布式高可用算法》让我对分布式系统和算法的理解更加系统、更加深入。



01


首先,自动机这个概念让我重新认识了分布式算法。

以前我以为所谓分布式算法就是为了解决一系列分布式问题而设计出来的一系列技巧,算法之间是独立的,并没有太多的内在联系,也从未想过所谓的算法模型。

而本书从基础的点到点链路开始,循序渐进地增加复杂度,逐步构建出共享内存、共识、信号量、事务等更为复杂而实用的分布式抽象,使我明白了分布式问题和算法之间的内在联系,加深了我对分布式算法的理解。

在学习本书之前,我也曾零零散散地学习过一些分布式算法,例如两次提交、三次提交、Paxos、Raft 等,但这些算法看起来只是在描述不同角色之间是如何交互的。

而本书阐述的算法模型指出,分布式系统可以看成一些自动机的集合,这些自动机根据预设的算法来响应所接收的事件,从而达到协同的目的。

这给了我醍醐灌顶的感觉,原来,设计分布式算法就是在设计自动机如何处理事件啊!

这让我想起了分布式开源框架 Akka 及其采用的 Actor 模型。原来 Actor 模型就是本书所述的自动机模型!

不看这本书,我大概只能基于 Akka 框架工作,而学习了这本书之后,我不用看 Akka 的源码或架构文档,也能大概猜得出 Akka 框架的工作原理和定位——Akka 框架就是一套自动机运行时环境,基于 Akka 框架编程就是在定义自动机如何处理事件(消息)。等哪天有空了,我自己应该也可以实现一个类似的分布式框架来玩玩了。


02


其次,本书指出的系统模型对于分布式系统架构非常重要。

在学习本书之前,我能隐隐约约地感觉到一个分布式系统最难的就是如何在可用性和一致性之间取得平衡。

在学习本书之后,我才明白我们通常说的一致性就是安全性(safety),可用性就是活性(liveness),任何一个有实际用处的分布式抽象都必须同时具备安全性和活性。这对我们定义一个分布式抽象(原语)起到了很好的指导作用。

坦率地说,我们之前定义过一些只有安全性或只有活性的分布式抽象,当初感觉哪里不对劲,现在终于明白了。

不仅如此,本书所指出的失败模型、同步系统、异步系统等概念加深了我对分布式系统的理解。

以前我们总是假设服务器会宕机、网络会断开,我们简单地把这称为单点故障。

学了这本书之后,我发现失败原来可以有那么多种,时间假设对一个分布式系统竟然如此重要!

例如,以前我只知道 Paxos 和 Raft 协议可以解决共识问题,读完本书之后,才明白原来 Paxos、Raft 只是在部分同步系统下解决共识问题的两种算法而已。

如果是同步系统,则还有其他效率更高的算法;如果是异步系统,则不存在任何确定性算法解决共识问题。

真是感谢本书的作者,让我欣赏到隐藏在复杂表象之下的精妙之处!


03


最后,网络同步和时钟同步的等价性原理是一个重要的发现。

做分布式系统的人,最熟悉的就是各种单点故障。

读了本书之后,我意识到,除了进程的失败模型,一个分布式系统的时间假设或许是更本质的。

例如,著名的“FLP 不可能结论”证明了在消息耗时无上限的系统中,不存在确定性算法可以解决共识问题。

而作者发现了网络同步和时钟同步的等价性原理,不仅给出了算法证明,还给出了直观理解。

这一等价性原理使得看似无解的问题变得有解。例如,尽管一个系统是网络异步的,即消息耗时无上限,但是如果该系统是时钟同步的,即系统的时钟漂移率有上限,仍然可以设计出确定性算法来解决共识问题。并且,等价性原理的证明过程已经给出了方法。

这是一个很重要也很实用的发现。

随着分布式系统越来越普及,分布式系统的规模越来越大,我们很难确保网络的时延有已知且有实用意义(较小)的上限。但我们可以让系统的时钟相对稳定,从而将一个网络异步系统转化成时钟同步系统,进而实现共识。

这对于复杂环境下实现分布式系统的可靠是至关重要的。作者为我们打开了这扇门,这是非常了不起的。

本书内容

本书尝试以通俗易懂的方式从理论的角度系统性地介绍分布式系统和算法,使读者:

  • 不仅从算法层面知道诸如共享内存、共识、信号量等分布式抽象背后的工作原理;

  • 还知道分布式系统是如何被建模的;

  • 进而知道这些算法是怎么来的、为什么是对的、适用场景是什么,为将来自行设计分布式算法打下基础。

本书对算法的描述与具体的编程语言无关,掌握任何一种编程语言、学习过《操作系统》和《计算机网络》两门课程的人,都能学懂本书绝大部分内容。



第 1 章介绍什么是分布式系统,分布式算法的用处,以及设计分布式算法面临的主要挑战,让读者对本书所介绍的分布式系统和算法的范围有初步认识。

第 2 章介绍算法模型。分布式算法是一种并发执行算法,与顺序执行算法在模型上有很大的差异。

本章首先介绍 I/O 自动机,这是描述分布式系统的理论模型;然后介绍基于 I/O 自动机的编程模型,后续章节的所有算法都基于这套编程模型描述。

通过本章的学习,读者将意识到设计分布式算法就是在定义自动机与外界的交互行为,并且能够阅读分布式算法。

第 3 章介绍系统模型。分布式系统十分复杂,我们需要从复杂的现象中抽象出本质,这个过程就是系统建模。

本章主要介绍进程、消息、链路和时钟等组成分布式系统的关键组件,并对它们的行为特性进行抽象。这些行为特征包括进程和链路会如何失败、网络时延和时钟快慢对系统有什么影响等。

本章还会介绍一些重要的概念,包括同步系统、异步系统等时间假设,安全性和活性这两个既对立、又统一的特性,以及如何评价分布式算法的性能等。

通过本章的学习,读者将掌握设计一个分布式系统主要的关注点。

第 4 章介绍链路,从基础的公平丢包链路开始,依次定义和实现顽固链路、可靠链路、先进先出可靠链路、日志可靠链路等,为后续章节的学习打下基础。

这部分算法看起来很简单,但深入理解却不容易,例如,为什么链路抽象中会存在这种看似性能低效的顽固链路,等等。

通过本章的学习,读者不仅会更熟悉编程模型,而且将更深入地理解自动机和它的生命周期。

第 5 章介绍失败检测和选主。之所以把失败检测和选主单独作为一章来介绍,是因为它们是分布式算法的基础,刻画了分布式系统的时间假设。

通过本章的学习,读者将知道如何进行失败检测和选主,什么系统能够进行失败检测和选主,什么系统无法进行失败检测和选主。

第 6 章介绍广播,从基础的尽力广播开始,依次介绍正则可靠广播、统一可靠广播、顽固广播、概率广播、先进先出广播和因果可靠广播。

不同的广播有不同的特性,例如尽力广播是代价最低的广播,也是能力最有限的广播;统一可靠广播最大的特点是,所有进程要么都接收消息,要么都不接收消息,有很好的统一性;概率广播,即 Gossip 协议,则适合于超大规模的分布式系统;而因果广播能确保接收进程看到的消息符合因果顺序。

通过本章的学习,读者将可以根据需要灵活地选择不同的广播。

第 7 章介绍共享内存,也叫注册器。本章主要介绍多种不同一致性要求的注册器,包括正则注册器、原子注册器、顺序注册器、因果注册器和先进先出注册器。同时,根据读写进程数量的不同,还介绍了单写多读、多写多读等不同的注册器。

本章最后介绍和证明了 CAP 理论,并揭示了它的独特之处。注册器在分布式系统中有着极为广泛的应用,例如分布式缓存、内存、存储、数据库等,都是注册器的应用。

第 8 章介绍共识。共识是分布式系统得以实现高可用和一致性的关键技术。

根据统一性的不同,本章主要介绍正则共识、统一共识这两种共识。同时,又根据不同的时间假设和进程失败假设,针对正则共识和统一共识介绍了多种实现算法,其中包括 Paxos 协议、随机共识,以及统一快速共识等。最后介绍了序列共识,并对 Multi-Paxos 和 Raft 协议进行了对比。

通过本章的学习,读者将对共识的本质有更深刻的认识。

第 9 章介绍基于共识的应用,包括全序广播、复制状态机、信号量、原子提交(事务)、组成员关系等。最后还会介绍复制状态机的重配技术,实现进程动态地加入和离开系统。

在 ZooKeeper、etcd 等开源分布式框架中的 Reconfiguration 功能的背后,其实就是复制状态机的重配技术。

第 10 章介绍基于时钟的算法。本章介绍如何利用时钟同步系统构造网络同步系统,以及如何利用网络同步系统构造时钟同步系统,从而证明了时钟同步与网络同步的等价性。

基于这一等价性,读者可以利用现代计算机的本地时钟、时钟同步协议以及原子钟等技术弥补网络的不足,即使在网络异步的情况下,也可以实现同步系统。


作者简介

江峰

教授级高工,中国电信集团云计算专业首席专家,中国计算机学会信息存储专委会委员。长期在分布式存储领域从事理论研究和工程实践工作。

受内容分发网络(CDN)的启发,在业内首次提出和设计了“为写而生”的内容存储网络(CSN)——CTOOS。CTOOS 实现了广域分布式海量数据存储服务的高可用、低时延和强一致,达到了单命名空间跨池数十个、实存容量过 EB 的规模,并长期稳定运行,为企业创造了可观的收益,技术水平达到了国内领先。

以第一作者在国际期刊会议上发表论文多篇,以第一发明人申请专利十多件,以第一完成人获得省部级、中国电信集团科技进步奖多次。


精彩书评

本书从算法与系统模型开始,详细论述了分布式系统涉及的链路、失败检测和选主、可靠广播、共享内存、共识、基于时钟的算法等核心内容,这些知识是构建大型分布式系统的底层架构时需要使用的,也是比较有难度和复杂性的内容。

本书以算法为主线组织内容,提供了各个算法的原理解释和伪码,具有较高的实用性和方便性。

CAP 理论是我的导师、美国国家工程院院士 Eric Brewer 教授提出来的,也是分布式系统领域最著名的定理之一。本书作者从分布式系统模型的角度指出 CAP 定理与其他分布式抽象的不同之处,令我耳目一新,这说明作者对分布式系统已经有了独到的见解。

该书既适合分布式领域的初学者阅读,也能引起分布式领域专家的诸多思考,是不可多得的高质量分布式系统书籍。

现阶段,国内关于分布式框架背后算法和原理的书籍很少,希望该书的出版能够促进国内更多的研究者关注分布式框架的创新,促进我国分布式计算领域的发展。

——周枫  网易集团高级副总裁,网易有道首席执行官、首席架构师


本书是分布式系统的理论体系类书籍,在第一次阅读时也许会觉得略为抽象,但一旦进入实际场景,就会发现遇到的各类问题其实都和理论的不同层面相关。此时再来拜读,就会发现先贤们其实已经整理好了各类解法——因此,只要熟练掌握体系框架,就一定能找到最符合业务实际需要的最优解——这就是本书的重要价值。

根据我自己这十几年在互联网行业解决各类实际问题的经历,大部分技术问题的解决,归根结底,都是一个依托于分布式系统理论范式、根据实际业务需求做取舍的过程。

本书洞悉了这一本质,它从整个分布式系统的理论根基出发,阐述分布式系统中会面临的各类问题及其解法,非常有助于工程师在实践中找到问题症结并迅速解决之。

相信每一位有志于在分布式领域内有所建树的读者都会从中获益。

——沈询  阿里巴巴资深技术专家,阿里分布式数据层、分布式消息服务负责人


很荣幸,提前拜读了江峰老师这本《分布式高可用算法》前三章的内容,本以为分布式系统会非常复杂,算法会非常枯燥,没想到读完第 1 章后,这个刻板的印象就完全被颠覆了,一个通俗易懂的“两将军”就让我感受到了分布式共识算法的巨大威力!

本书兼顾深度和广度,由浅入深地介绍了分布式系统的方方面面,非常值得一读!

——沉默王二  《Java 程序员进阶之路》作者,CSDN 两届博客之星




扫码查看本书详情

用户头像

还未添加个人签名 2019-10-21 加入

还未添加个人简介

评论

发布
暂无评论
从事分布式工作10余年,这本书颠覆了我的认知!_博文视点Broadview_InfoQ写作社区