一些分布式基础论文
1978 Time, Clocks
1982 Byzantine Generals
1998 Paxos
2001 Paxos Made Simple
2007 Paxos Made Live
2012 VRR
2014 Raft
前言
推荐一些分布式基础理论的论文,尽量按照发展顺序排序,并使用一句话总结。
分布式理论
Time, Clocks, and the Ordering of Events in a Distributed System
审视了分布式中的时间关系,第一部分提出分布式系统中不存在时间关系,存在因果关系,提出了逻辑时钟,第二部分指出在物理时钟漂移有上限,系统最大容忍时间误差,并且知道消息传递延迟的情况下,可以计算出同步间隔的上限。
The Byzantine Generals Problem
拜占庭错误,分布式系统中存在$f$个恶意节点的情况下,使用口头算法至少需要$3f+1$个节点才能达成一致,使用签名算法需要$f+1$个节点就能达成一致。
Brewer’s Conjecture and the Feasibility of Consistent, Available, Parition-Tolerant Web Service
这篇论文提出了CAP理论,分布式系统只能满足CAP中的两项。
CAP:Twelve years Later
对上一篇CAP论文的回顾,重新明确了分布式系统必须满足P,那么剩下的只能从C和A中选择。
BASE: An Acid Alternative
BASE理论其实是AP模型,通过牺牲强一致性(C),满足A和P。提出了基本可用、软状态和最终一致性。
A simple Totally Ordered Broadcast Protocol
提出了ZAB模型,是一个全序广播
Virtual Time and Global States of Distributed System
提出了向量时钟,用于解决Lamport提出的逻辑时钟无法判断两个事件是否并发。
On Distributed Computations Global States and Observation of Global States
为什么能做到无停机快照
Paxos Made Simple
提出了Paxos,分布式的经典理论
In Search of an Understandable Consensus Algorithm
提出了Raft,Paxos的经典工程实现
Impossibility of Distributed Consensus with One Faulty Process
FLP不可能性,为什么在最多一个故障节点的完全异步系统中不能设计出完全可用的一致性协议。
设计模式
End-to-End Arguments in System Design
提出端到端原则,与其在底层构建一个庞大、复杂且依然不够完美的可靠系统,不如让底层保持“尽力而为”的简洁,然后将最终的完整性责任交由应用端来承担。
The Cathedral and the Bazaar
当源代码公开接受无数开发者的审视和测试时,发现和修复bug的效率会成倍提高
No Silver Bullet
没有银弹(没有一个工具或方法)能解决软件设计的复杂性,我感觉这类似于数学中的形式不变性。
大数据
MapReduce: Simplified Data Processing on Large Clusters
Google 大数据起点
Hadoop 来源
Day 11
《Brewer’s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services》
核心:
CAP
Day 12
《Dynamo》
公司:Amazon Web Services
核心:
eventual consistency
consistent hashing
vector clock
现代 NoSQL 起源。
Day 13
《Bigtable》
公司:Google Research
核心:
LSM
SSTable
Tablet
HBase / TiKV 系祖宗。
Day 14
《The Google File System》
核心:
GFS
大规模存储
第 3 周:数据库与工业系统
Day 15
《Spanner: Google’s Globally Distributed Database》
核心:
TrueTime
全球事务
外部一致性
这是 Lamport 物理时钟真正工业化。
Day 16
《Dremel》
核心:
列存
OLAP
Parquet 起源
Day 17
《The Log-Structured Merge-Tree》
作者:Patrick O’Neil
核心:
LSM Tree
理解 RocksDB / LevelDB 基础。
Day 18
《Kafka: a Distributed Messaging System for Log Processing》
公司:Apache Kafka
核心:
append-only log
MQ 与流处理
Day 19
《Chubby Lock Service》
公司:Google Research
核心:
分布式锁
lease
master
和你最近看的 lease 很相关。
Day 20
《ZooKeeper: Wait-free Coordination for Internet-scale Systems》
核心:
ZAB
watch
元数据协调
Day 21
《Megastore》
核心:
Paxos + 数据库
分区事务
第 4 周:现代分布式系统
Day 22
《Spark: Cluster Computing with Working Sets》
公司:Apache Spark
核心:
RDD
内存计算
Day 23
《Bitcoin: A Peer-to-Peer Electronic Cash System》
作者:Satoshi Nakamoto
核心:
PoW
区块链共识
Day 24
《Ethereum Whitepaper》
作者:Vitalik Buterin
核心:
智能合约
Day 25
《Cassandra》
核心:
AP 数据库
Dynamo + Bigtable
Day 26
《SWIM: Scalable Weakly-consistent Infection-style Process Group Membership Protocol》
核心:
gossip
failure detector
和 Consul 很相关。
Day 27
《FaRM》
核心:
RDMA
内存分布式数据库
Day 28
《Snowflake Elastic Data Warehouse》
公司:Snowflake
核心:
云原生数仓
存算分离
Day 29
《F1: A Distributed SQL Database That Scales》
核心:
Google 分布式 SQL
Day 30
《The Tail at Scale》
作者:Jeffrey Dean
核心:
长尾延迟
为什么分布式系统会突然变慢
这是现代大型系统优化核心。
Day 1: Leslie Lamport - 《Time, Clocks, and the Ordering of Events in a Distributed System》 (1978)
核心:就是你刚刚啃下来的这篇。奠定了逻辑时钟和因果序。
Day 2: Diego Ongaro, John Ousterhout - 《In Search of an Understandable Consensus Algorithm》 (2014)
核心:Raft 算法。分布式共识的工程首选,比 Paxos 好懂 100 倍。
Day 3: Leslie Lamport - 《The Part-Time Parliament》 (1998)
核心:Paxos 算法的诞生。用希腊小岛议会的故事讲述最硬核的共识机制。
Day 4: Eric Brewer - 《CAP Twelve Years Later: How the “Rules” Have Changed》 (2012)
核心:CAP 定理。分布式系统避不开的“大山”,看作者本人在 12 年后如何重新定义它。
Day 5: Seth Gilbert, Nancy Lynch - 《Brewer’s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services》 (2002)
核心:用严谨的数学公式定理,正式证明了 CAP 猜想。
Day 6: Werner Vogels - 《Eventually Consistent》 (2009)
核心:AWS 首席技术官写的最终一致性。告诉你工程落地时,怎么对 BASE 理论进行妥协。
Day 7: 第一周总结与消化日(梳理 Paxos/Raft/逻辑时钟的演进线索)。
第二周:工业界的三驾马车(Google 大数据基石)
这周看理论如何变成改变世界的工业产品。大名鼎鼎的 Hadoop、HBase 都是这周论文的开源实现。
Day 8: Sanjay Ghemawat, Howard Gobioff, and Shun-Tak Leung - 《The Google File System》 (2003)
核心:GFS。如何在成千上万台烂机器上,构建一个永不丢失数据的分布式文件系统。
Day 9: Jeffrey Dean, Sanjay Ghemawat - 《MapReduce: Simplified Data Processing on Large Clusters》 (2004)
核心:分布式计算的启蒙。用简单的 Map 和 Reduce 两个函数横扫海量数据。
Day 10: Fay Chang 等 - 《Bigtable: A Distributed Structured Data Storage System》 (2006)
核心:列式存储的鼻祖。理解稀疏的、分布式的、持久化的多维排序映射表。
Day 11: Patrick O’Neil 等 - 《The Log-Structured Merge-Tree (LSM-Tree)》 (1996)
核心:LSM-Tree 树。Bigtable 和你笔记里 RocksDB 的底层存储引擎核心,理解为什么它写数据可以这么快。
Day 12: Giuseppe DeCandia 等 - 《Dynamo: Amazon’s Highly Available Key-value Store》 (2007)
核心:去中心化(P2P)存储的巅峰。引入了一致性哈希、向量时钟(Vector Clocks)和默克尔树。
Day 13: Michael Burrows - 《The Chubby Lock Service for Loosely-Coupled Distributed Systems》 (2006)
核心:Google 的分布式锁。看他们如何用 Paxos 做出一个高可用的协调服务(ZooKeeper 的前身)。
Day 14: 第二周总结与消化日(对比 GFS/Bigtable 与传统单机存储的底层差异)。
第三周:现代分布式数据库的进化(物理时钟的逆袭与高并发)
这周我们将看到物理时钟如何被重新利用,以及传统数据库如何走向全球分布式。
Day 15: James C. Corbett 等 - 《Spanner: Google’s Globally-Distributed Database》 (2012)
核心:GPS + 原子钟!利用 TrueTime 强行对齐物理时钟,在全球实现外部一致性。
Day 16: Peng Huang 等 - 《Grey-box Anomaly Detection in Cloud Service Systems》 (2017)
核心:分布式系统的雪崩与灰度故障。偏工程实战,看大厂如何应对各种诡异的系统微弱故障。
Day 17: Michael Stonebraker 等 - 《”C-Store: A Column-oriented DBMS”》 (2005)
核心:现代 OLAP 数据库(如 ClickHouse)的理论起点,深入理解列存和向量化执行。
Day 18: Michael Stonebraker - 《The End of an Architectural Era (It’s Time for a Complete Rewrite)》 (2007)
核心:图灵奖得主痛批传统关系型数据库,断言旧架构已死,开启 NewSQL 时代。
Day 19: H. T. Kung, John T. Robinson - 《On Optimistic Methods for Concurrency Control》 (1981)
核心:OCC(乐观并发控制)。高并发下除了加锁(Pessimistic),怎样通过版本校验实现更高的吞吐。
Day 20: Alistair Cockburn - 《Hexagonal Architecture (Ports and Adapters)》 (2005)
核心:六边形架构。从分布式跳出来看工程,怎么写出高内聚低耦合的现代高业务复杂度代码(对你写 VO/DTO 很有启发)。
Day 21: 第三周总结与消化日(梳理从 Bigtable 到 Spanner 的架构演进)。
第四周:计算机底层、操作系统与网络缓存(硬核内核修炼)
最后一周,我们回归单机内核与网络底层。分布式跑得快,离不开单机性能的压榨。
Day 22: Ulrich Drepper - 《What Every Programmer Should Know About Memory》 (2007)
核心:长达 100 多页的奇书(这天建议读精简版)。深入 CPU 缓存(L1/L2/L3)、内存伪共享,Java 高性能多线程的物理底层。
Day 23: Kirk McKusick 等 - 《A Fast File System for UNIX》 (1984)
核心:FFS。Linux 文件系统的基石,看操作系统如何优雅地在磁盘上组织数据块和 Inode。
Day 24: Butler W. Lampson - 《Hints for Computer System Design》 (1983)
核心:计算机大师给出的系统设计圣经。“不要做不必要的事”、“尽量用缓存”,字字珠玑。
Day 25: Ion Stoica 等 - 《Chord: A Scalable Peer-to-peer Lookup Service for Internet Applications》 (2001)
核心:一致性哈希的数学实现。在 P2P 网络里,怎么用最优雅的数学方法定位一个数据在哪个节点。
Day 26: Jeffrey Dean, Luiz André Barroso - 《The Tail At Scale》 (2013)
核心:长尾延迟(Tail Latency)。在高并发分布式系统里,怎么解决那“最后 1%”拖慢全盘的请求(解决高并发响应慢的绝佳指导)。
Day 27: Mendel Rosenblum, John K. Ousterhout - 《The Design and Implementation of a Log-Structured File System》 (1992)
核心:LFS 文件系统。将所有写操作转换为顺序追加,单机版的 LSM-Tree 思想。
Day 28: 第 28-30 天:全月总复习、知识图谱串联与笔记归档。