22 KiB
经典图书
首先,我推荐几本分布式架构方面的经典图书。
[Scalable Web Architecture and Distributed Systems](http://www.aosabook.org/en/distsys.html),
这是一本免费的在线小册子,其中文翻译版 [可扩展的Web架构和分布式系统](http://nettee.github.io/posts/2016/Scalable-Web-Architecture-and-Distributed-Systems/)。本书主要针对面向互联网(公网)的分布式系统,但其中的原理或许也可以应用于其他分布式系统的设计中。作者的观点是,通过了解大型网站的分布式架构原理,小型网站的构建也能从中受益。本书从大型互联网系统的常见特性,如高可用、高性能、高可靠、易管理等出发,引出了一个类似于Flickr的典型的大型图片网站的例子。
经典论文
分布式事务
想了解分布式模型中最难的“分布式事务”,你需要看看Google App Engine联合创始人瑞恩·巴雷特(Ryan Barrett)在2009年的Google I/O大会上的演讲《Transaction Across DataCenter》(YouTube视频)。
在这个演讲中,巴雷特讲述了各种经典的解决方案如何在一致性、事务、性能和错误上做平衡。而最后得到为什么分布式系统的事务只有Paxos算法是最好的。
下面这个图是这个算法中的结论。

你也可以移步看一下我在Coolshell上写的这篇文章《分布式系统的事务处理》。
Paxos一致性算法
Paxos算法,是莱斯利·兰伯特(Lesile Lamport)于1990年提出来的一种基于消息传递且具有高度容错特性的一致性算法。但是这个算法太过于晦涩,所以一直以来都属于理论上的论文性质的东西。其真正进入工程圈,主要是来源于Google的Chubby lock——一个分布式的锁服务,用在了Bigtable中。直到Google发布了下面这两篇论文,Paxos才进入到工程界的视野中来。
- Bigtable: A Distributed Storage System for Structured Data
- The Chubby lock service for loosely-coupled distributed systems
Google与Bigtable相齐名的还有另外两篇论文。
不过,这几篇文章中并没有讲太多的Paxos算法上的细节,反而是在Paxos Made Live - An Engineering Perspective 这篇论文中提到了很多工程实现的细节。这篇论文详细解释了Google实现Paxos时遇到的各种问题和解决方案,讲述了从理论到实际应用二者之间巨大的鸿沟。
Paxos算法的原版论文比较晦涩,也不易懂。这里推荐一篇比较容易读的—— Neat Algorithms - Paxos 。这篇文章中还有一些小动画帮助你读懂。还有一篇可以帮你理解的文章是 Paxos by Examples。
Raft一致性算法
因为Paxos算法太过于晦涩,而且在实际的实现上有太多的坑,并不太容易写对。所以,有人搞出了另外一个一致性的算法,叫Raft。其原始论文是 In search of an Understandable Consensus Algorithm (Extended Version) ,寻找一种易于理解的Raft算法。这篇论文的译文在InfoQ上,题为《Raft一致性算法论文译文》,推荐你读一读。
这里推荐几个不错的Raft算法的动画演示。
- Raft - The Secret Lives of Data
- Raft Consensus Algorithm
- Raft Distributed Consensus Algorithm Visualization
Gossip一致性算法
后面,业内又搞出来一些工程上的东西,比如Amazon的DynamoDB,其论文Dynamo: Amazon’s Highly Available Key Value Store 的影响力非常大。这篇论文中讲述了Amazon的DynamoDB是如何满足系统的高可用、高扩展和高可靠的。其中展示了系统架构是如何做到数据分布以及数据一致性的。GFS采用的是查表式的数据分布,而DynamoDB采用的是计算式的,也是一个改进版的通过虚拟结点减少增加结点带来数据迁移的一致性哈希。
这篇文章中有几个关键的概念,一个是Vector Clock,另一个是Gossip协议。
用来做数据同步的Gossip协议的原始论文是 Efficient Reconciliation and Flow Control for Anti-Entropy Protocols。Gossip算法也是Cassandra使用的数据复制协议。这个协议就像八卦和谣言传播一样,可以“一传十、十传百”传播开来。但是这个协议看似简单,细节上却非常麻烦。
Gossip协议也是NoSQL数据库Cassandra中使用到的数据协议,你可以上YouTube上看一下这个视频介绍: Understanding Gossip (Cassandra Internals)。
关于Gossip的一些图示化的东西,你可以看一下动画 Gossip Visualization。
分布式存储和数据库
除了前面的Google的BigTable和Google File System那两篇论文,还有Amazon的DynamoDB的论文,下面也有几篇也是要读一下的。
[CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data](http://www.ssrc.ucsc.edu/Papers/weil-sc06.pdf), 这里提到的算法被应用在了Ceph分布式文件系统中,其架构可以读一下 RADOS - A Scalable, Reliable Storage Service for Petabyte-scale
Storage Clusters 以及 [Ceph的架构文档](http://docs.ceph.com/docs/jewel/architecture/)。
分布式消息系统
日志和数据
分布式监控和跟踪
- Google的分布式跟踪监控论文 - Dapper, a Large-Scale Distributed Systems Tracing Infrastructure, 其开源实现有三个 Zipkin、Pinpoint 和 HTrace。我个人更喜欢Zipkin。
数据分析
与编程相关的论文
- Distributed Programming Model
- PSync: a partially synchronous language for fault-tolerant distributed algorithms
- Programming Models for Distributed Computing
- Logic and Lattices for Distributed Programming
其它的分布式论文阅读列表
除了上面上的那些我觉得不错的论文,下面还有三个我觉得不错的分布式系统论文的阅读列表,你可以浏览一下。
- Services Engineering Reading List
- Readings in Distributed Systems
- Google Research - Distributed Systems and Parallel Computing
小结
今天分享的内容是分布式架构方面的经典图书和论文,并给出了导读文字,几乎涵盖了分布式系统架构方面的所有关键的理论知识。这些内容非常重要,是学好分布式架构的基石,请一定要认真学习。
下篇文章中,我们将讲述分布式架构工程设计方面的内容,包括设计原则、设计模式以及工程实践等方面的内容。敬请期待。
下面是《程序员练级攻略》系列文章的目录。