讲一个
Story Me
用故事讲清楚一个概念。
首期 20 篇讲分布式系统的核心概念——每篇先讲一个故事,再解析它背后的技术。未来会延伸到其他领域。
第一辑
Book I共识、一致性、状态:系统由此构成。
-
一
流银之国
分布式快照算法Chandy–Lamport Distributed Snapshot
从前,在河谷之间有一个王国,名叫流银。这里商贾云集,城邑之间日夜奔驰着无数快马信使,驮着沉甸甸的银袋往来交易。银子从一城流向另一城,…
-
二
万香谱
CRDT 与强最终一致性Conflict-Free Replicated Data Types
在南洋诸岛之间,有七座小岛,岛上各有一座"香肆"——调香师世代居于此。每当有商船带来一种新的花瓣、木屑、果皮,香肆中的老师傅便会亲手蒸馏,…
-
三
守夜人誓约
拜占庭容错Byzantine Fault Tolerance
北境雪原之上有一座古老的城堡,名曰寒垣。城堡外是无垠的荒野,荒野之中时有异兽出没。城中住着一百零一位守夜人,彼此以誓约为纽带,世代戍守。
-
四
两座钟楼
CAP 定理The CAP Theorem
在阿尔卑斯山深处的一条峡谷里,住着两座相邻的小镇:东镇与西镇。两镇之间隔着一道幽深的峡谷,谷上横着一座独木吊桥,吊桥年久失修,…
-
五
两个抄经人
原子性与隔离性Atomicity & Isolation in ACID
在敦煌莫高窟的深处,有一间幽暗的经堂。堂中终年燃着两盏油灯,灯下坐着两位老抄经人——东龛的慧明与西龛的慧远。…
-
六
传灯人
Paxos 与 Raft 共识Paxos & Raft Consensus
在江南水乡,有一种古老的行当,称作传灯人。每逢除夕之夜,万家灯火将次第燃起,而最早的那一盏"母灯",必须由宗祠的长者亲手点燃,…
-
七
九叠屏
分层索引与分布式哈希表Hierarchical Indexing & DHT
在宋朝,汴梁有一位深居简出的画匠,名叫周子安。周子安以画山水著称,但他的名作从不示人,只绘于九叠屏风之上,藏于自家书斋深处。
-
八
河伯调水
可观测性与自适应调节Observability & Adaptive Load Shedding
古时黄河岸边有一座河神庙,庙中供奉的是一位年轻的河伯。这位河伯并非传说中那威严的老者,而是个相貌清秀的少年神祇,日日坐在庙中,…
-
九
两位信使
消息传递语义Message Delivery Semantics
在古代波斯,有一座横跨丝绸之路的驿城,名曰帕萨尔加德。驿城之中设有一座信使总部,专司将大汗的诏令送往帝国各地——从西陲的拜占庭边境,…
-
十
玉匣
不可篡改的分布式账本Immutable Distributed Ledgers
在大唐开元年间,长安城中有一位名扬天下的玉匠,姓苏,人称苏老玉匠。苏老玉匠一生所做之物,只有一样——玉匣。
第二辑
Book II时间、信息流动、协调的边界:系统由此立足。
-
十一
时辰簿
逻辑时钟与因果序Logical Clocks & Causal Order
唐贞观年间,朝廷设有太史局,下辖七处史馆,分置于长安、洛阳、成都、广陵、幽州、凉州、交州。每馆各有一位史官,日日执笔,…
-
十二
传谣记
流言协议与反熵Gossip Protocols & Anti-Entropy
宋徽宗时,汴京城中有一茶肆,名"清风茗"。清风茗之主人乃一老者,姓沈。沈老汉年过七旬,鬓发皆白,终日坐在茶肆门前一张旧藤椅上,…
-
十三
两位将军
协调的不可能性The Two Generals Problem
战国末年,秦将王翦率大军攻楚。楚地广袤,楚将项燕以主力驻郢城南面的云梦泽中,凭借湖沼之险据守。
-
十四
旧符新令
栅栏令牌与脑裂防御Fencing Tokens & Split-Brain
汉元狩年间,边郡朔方设一军镇,常年驻军万人,抵御匈奴。军镇之主为镇守使,由朝廷委派。镇守使持一方**铜印虎符**,…
-
十五
雾中无回音
FLP 不可能性Fischer–Lynch–Paterson Impossibility
一九四二年十一月,大西洋。
-
十六
转山
一致性哈希Consistent Hashing
五月初,塔钦的雪还没全化。
-
十七
双厨
尾部延迟与对冲请求Tail Latency and Hedged Requests
唐开元二十三年,腊月二十九,长安大明宫。
-
十八
土匪走了怎么算账
预写日志Write-Ahead Log
民国八年,秋。浦市。
-
十九
时间缝隙里的贼
线性一致性Linearizability
一九六七年四月的纽约下着冷雨。
-
二十
悬心
两阶段提交Two-Phase Commit
一九九八年深秋,上海。心脏专科医院的协调办公室在六楼,窗对着一条空旷的街。午夜将近。老周坐在一张漆色斑驳的木桌前,…
第三辑
Book III边界之后的工程选择:时钟、原则与妥协继续展开。
-
二十一
漏刻司
物理时钟的失败模式 —— 为何我们不能相信墙上的钟
崇祯十七年,漏刻司的两座钟,一座看星象,一座看水滴,各自走得稳当,却在一夜之间差出了一个时辰。
-
二十二
驿路三千里
端到端原则可靠性该放在哪一层
开元年间,长安到安西的驿道全长七千二百里,共设一百六十三座驿站。每隔三十里一驿,驿卒换马不换人,日行五百里,…
-
二十三
守陵人
活性 vs 安全性坏事永不发生 vs 好事终将发生
乾陵的守陵人分两种:不动的石头在神道两侧站了千年,动的活人在地宫里一代一代死绝。
-
二十四
百工堂
USL协同成本如何吃掉你加进去的人
万历年间,苏州有个织造衙门,专管江南贡缎。一匹云锦要经线、纬线、配色、提花四道工序,原先一个师傅从头到尾做,十日一匹。
-
二十五
回春堂
Sagas补偿事务 · 长事务的撤销链
乾隆年间,扬州回春堂做南北药材的批发生意。一单大买卖从辽东收人参起,要经漕运过淮安,再换船过江到扬州,最后分送苏杭两地的分号。全程两个月,…
-
二十六
并蒂莲
Causal+ 一致性happens-before · 并发写入收敛
苏州拙政园有株并蒂莲,一茎两花,同根而生。园艺师说,这种花没法人工培育,只能等它自己冒出来——两朵花从同一个节上长出,共享一脉养分,…
-
二十七
同一张戏单
Sequential Consistency — 全进程同意某一顺序
光绪末年,上海丹桂茶园换了新班主,从京城聘来一整班京角儿,要在沪上唱连台本戏《封神榜》。班主定了一条规矩:戏码可以变,但**变之前,…
-
二十八
双生记
Primary–Backup Replication — 一主多从,简单但易瓶颈
光绪年间,上海汇丰银行的分号开到了汉口、天津、广州三地。总账房设在黄浦江畔,各地分号每日把汇兑、放款、存取的数目抄成副本,…
-
二十九
铁匠铺的规矩
CASCompare-and-Swap · 最基础的原子原语
光绪年间,保定府有家铁匠铺,专给镖局打马掌。铺子里三个伙计,老周掌钳,小周抡锤,还有个学徒阿贵负责淬火。一匹马四只蹄,一套马掌十二枚钉子,…
-
三十
两座钟楼之后
PACELCCAP 的延伸
一九三七年,南京。两条铁路在此交汇:津浦线纵贯南北,沪宁线横连东西。调度室在站台西侧一座灰砖楼里,墙上挂两面钟——一面德国造,…
第四辑
Book 4第 31–40 则。
-
三十一
三座钟楼
CAP 的常见误读为什么"三选二"是错的
泉州城里有过三座钟楼。
-
三十二
秋收
Harvest 与 Yield收多少 vs 能收多久
关中旱了三年。第一年,朝廷还按旧例征粮,各州县把仓底刮净,凑足数字押往长安。第二年,有些州县开始谎报灾情,说本地颗粒无收,…
-
三十三
旧印
Viewstamped Replication主从复制中的共识 · 1988
万历年间,南京刑部有一枚铜印,掌印郎中每日卯时亲启印匣,用印后钤盖"某年某月某日刑部之印"——这行字叫**印戳**,既是凭证,…
-
三十四
三票
Multi-PaxosFast Paxos · Flexible Paxos · 轮次与 Quorum 之变
光绪末年,上海租界里有个华商联合会,专管码头货栈的公共事务。会章规定:凡添设新栈、改换旧规,须得**会首**召集各商投票,…
-
三十五
热座
HotStuff线性消息复杂度的领导者轮换共识
长安城里有个老规矩,叫"热座"。
-
三十六
铁钎与桦皮册
B-Tree vs LSM2010 年代最重要的存储架构之争
黄河改道那年,测绘局和老河工陈三吵过一架。测绘局的洋学生姓杜,留过德,带回来一台水准仪和一套"断面测量法":每隔五十步打一根铁钎入河底,…
-
三十七
碎瓷与整器
擦除编码冷数据省空间的代价
景德镇有个规矩,龙窑烧出的贡品进京,一路上碎裂在所难免。早年间用老办法:一器一匣,匣里塞满稻草谷糠,碎了就补送。后来烧造量大了,…
-
三十八
漏刻与驿报
事件时间 vs 处理时间乱序事件让朴素分析失效
洪武年间,南京城设了一套水驿急递。各省灾荒、边警、漕运迟滞,都靠驿卒换马接力,昼夜兼程送入京师。兵部有位年轻主事姓周,…
-
三十九
退信局
Dead-letter Queues消息重试耗尽 · 隔离与审计
(may光绪末年,上海工部局书信馆设了一个退信股,专收无处可去的邮件。地址模糊、收件人逃亡、反复投递三次仍被退回的信,…
-
四十
更夫
Heartbeat超时阈值 · 误报与慢恢复的永恒张力
第五辑
Book 5第 41–50 则。
-
四十一
三声鼓
三阶段提交 — 给 2PC 加一层缓冲,却挡不住网络分区
光绪末年,京张铁路修到居庸关,总工程师詹天佑在关沟段设了三座号志站:南口、青龙桥、八达岭。火车要爬坡,三站必须同时扳道岔、对信号,…
-
四十二
铁算盘
Jepsen 测试对抗性分区测试 · Kyle Kingsbury
-
四十三
碎杯
Shuffle Sharding — 把用户随机撒进无数小单元,让故障撞不翻整桌
道光年间,景德镇有个烧御瓷的官窑,每年要出十万件青花供宫廷采办。窑厂分作东西两区,每区五十座窑,一窑一火,各烧各的。按老规矩,…
-
四十四
同一封信
Exactly-once幂等生产者、事务写入与检查点
光绪年间,天津卫有个信局子叫"三元递",专做南北货商的汇票生意。商人在津门把银票交给三元递,局子誊抄一份留底,原件封火漆,…
-
四十五
堰口
背压下游撑不住时,上游该主动减速
万历年间,江南漕运改道,苏州府新凿了一条官河直通京师。河工们起初只顾掘深拓宽,把闸口开到最大,…
-
四十六
独占令
领导者租约免 Quorum 读
岭南有个盐场,分作七灶,每灶管着一口盐井、一堆盐工。七灶各自熬盐,各自记账,月底把盐包和账册一起运到总场,…
-
四十七
换班令
Raft 联合共识重配置期间的安全性
漕帮管着大运河上的七十二闸,每闸有闸丁十二人,按月轮值。闸丁不是散工,是入了帮册的正式帮众——帮册上谁的名字在,…
-
四十八
十三张投名状
Quorum 交集R+W>N 的几何直觉
光绪年间,直隶有十三家镖局,各自占着一条道。单家走单镖,十趟里总要丢两三趟——土匪不抢你抢谁。后来总镖头们坐下来喝了一顿酒,…
-
四十九
先画押后分田
Calvin确定性数据库
宣统二年,北方各省推行"均田令"。朝廷派下来的办法很老派:每县把地册报上去,户部核对,批文下来,才能丈量分地。一县一县串着办,三年过去了,…
-
五十
同一盏灯笼
Session Guarantees — 自己点亮的灯,自己先看见
同治年间,扬州有个灯市,每年元宵前后开集三日。灯市规矩古怪:卖灯的、买灯的、评灯的,各在一巷,三巷之间隔了半里青石路。买灯的人付完银子,…