讲一个

Story Me

用故事讲清楚一个概念。
首期 20 篇讲分布式系统的核心概念——每篇先讲一个故事,再解析它背后的技术。未来会延伸到其他领域。

第一辑

Book I

共识、一致性、状态:系统由此构成。

  1. 流银之国

    分布式快照算法Chandy–Lamport Distributed Snapshot

    从前,在河谷之间有一个王国,名叫流银。这里商贾云集,城邑之间日夜奔驰着无数快马信使,驮着沉甸甸的银袋往来交易。银子从一城流向另一城,…

    约 5 分钟
  2. 万香谱

    CRDT 与强最终一致性Conflict-Free Replicated Data Types

    在南洋诸岛之间,有七座小岛,岛上各有一座"香肆"——调香师世代居于此。每当有商船带来一种新的花瓣、木屑、果皮,香肆中的老师傅便会亲手蒸馏,…

    约 5 分钟
  3. 守夜人誓约

    拜占庭容错Byzantine Fault Tolerance

    北境雪原之上有一座古老的城堡,名曰寒垣。城堡外是无垠的荒野,荒野之中时有异兽出没。城中住着一百零一位守夜人,彼此以誓约为纽带,世代戍守。

    约 5 分钟
  4. 两座钟楼

    CAP 定理The CAP Theorem

    在阿尔卑斯山深处的一条峡谷里,住着两座相邻的小镇:东镇与西镇。两镇之间隔着一道幽深的峡谷,谷上横着一座独木吊桥,吊桥年久失修,…

    约 5 分钟
  5. 两个抄经人

    原子性与隔离性Atomicity & Isolation in ACID

    在敦煌莫高窟的深处,有一间幽暗的经堂。堂中终年燃着两盏油灯,灯下坐着两位老抄经人——东龛的慧明与西龛的慧远。…

    约 6 分钟
  6. 传灯人

    Paxos 与 Raft 共识Paxos & Raft Consensus

    在江南水乡,有一种古老的行当,称作传灯人。每逢除夕之夜,万家灯火将次第燃起,而最早的那一盏"母灯",必须由宗祠的长者亲手点燃,…

    约 8 分钟
  7. 九叠屏

    分层索引与分布式哈希表Hierarchical Indexing & DHT

    在宋朝,汴梁有一位深居简出的画匠,名叫周子安。周子安以画山水著称,但他的名作从不示人,只绘于九叠屏风之上,藏于自家书斋深处。

    约 8 分钟
  8. 河伯调水

    可观测性与自适应调节Observability & Adaptive Load Shedding

    古时黄河岸边有一座河神庙,庙中供奉的是一位年轻的河伯。这位河伯并非传说中那威严的老者,而是个相貌清秀的少年神祇,日日坐在庙中,…

    约 9 分钟
  9. 两位信使

    消息传递语义Message Delivery Semantics

    在古代波斯,有一座横跨丝绸之路的驿城,名曰帕萨尔加德。驿城之中设有一座信使总部,专司将大汗的诏令送往帝国各地——从西陲的拜占庭边境,…

    约 9 分钟
  10. 玉匣

    不可篡改的分布式账本Immutable Distributed Ledgers

    在大唐开元年间,长安城中有一位名扬天下的玉匠,姓苏,人称苏老玉匠。苏老玉匠一生所做之物,只有一样——玉匣。

    约 12 分钟

第二辑

Book II

时间、信息流动、协调的边界:系统由此立足。

  1. 十一

    时辰簿

    逻辑时钟与因果序Logical Clocks & Causal Order

    唐贞观年间,朝廷设有太史局,下辖七处史馆,分置于长安、洛阳、成都、广陵、幽州、凉州、交州。每馆各有一位史官,日日执笔,…

    约 11 分钟
  2. 十二

    传谣记

    流言协议与反熵Gossip Protocols & Anti-Entropy

    宋徽宗时,汴京城中有一茶肆,名"清风茗"。清风茗之主人乃一老者,姓沈。沈老汉年过七旬,鬓发皆白,终日坐在茶肆门前一张旧藤椅上,…

    约 10 分钟
  3. 十三

    两位将军

    协调的不可能性The Two Generals Problem

    战国末年,秦将王翦率大军攻楚。楚地广袤,楚将项燕以主力驻郢城南面的云梦泽中,凭借湖沼之险据守。

    约 10 分钟
  4. 十四

    旧符新令

    栅栏令牌与脑裂防御Fencing Tokens & Split-Brain

    汉元狩年间,边郡朔方设一军镇,常年驻军万人,抵御匈奴。军镇之主为镇守使,由朝廷委派。镇守使持一方**铜印虎符**,…

    约 12 分钟
  5. 十五

    雾中无回音

    FLP 不可能性Fischer–Lynch–Paterson Impossibility

    一九四二年十一月,大西洋。

    约 14 分钟
  6. 十六

    转山

    一致性哈希Consistent Hashing

    五月初,塔钦的雪还没全化。

    约 14 分钟
  7. 十七

    双厨

    尾部延迟与对冲请求Tail Latency and Hedged Requests

    唐开元二十三年,腊月二十九,长安大明宫。

    约 13 分钟
  8. 十八

    土匪走了怎么算账

    预写日志Write-Ahead Log

    民国八年,秋。浦市。

    约 18 分钟
  9. 十九

    时间缝隙里的贼

    线性一致性Linearizability

    一九六七年四月的纽约下着冷雨。

    约 21 分钟
  10. 二十

    悬心

    两阶段提交Two-Phase Commit

    一九九八年深秋,上海。心脏专科医院的协调办公室在六楼,窗对着一条空旷的街。午夜将近。老周坐在一张漆色斑驳的木桌前,…

    约 12 分钟

第三辑

Book III

边界之后的工程选择:时钟、原则与妥协继续展开。

  1. 二十一

    漏刻司

    物理时钟的失败模式 —— 为何我们不能相信墙上的钟

    崇祯十七年,漏刻司的两座钟,一座看星象,一座看水滴,各自走得稳当,却在一夜之间差出了一个时辰。

    约 5 分钟
  2. 二十二

    驿路三千里

    端到端原则可靠性该放在哪一层

    开元年间,长安到安西的驿道全长七千二百里,共设一百六十三座驿站。每隔三十里一驿,驿卒换马不换人,日行五百里,…

    约 6 分钟
  3. 二十三

    守陵人

    活性 vs 安全性坏事永不发生 vs 好事终将发生

    乾陵的守陵人分两种:不动的石头在神道两侧站了千年,动的活人在地宫里一代一代死绝。

    约 8 分钟
  4. 二十四

    百工堂

    USL协同成本如何吃掉你加进去的人

    万历年间,苏州有个织造衙门,专管江南贡缎。一匹云锦要经线、纬线、配色、提花四道工序,原先一个师傅从头到尾做,十日一匹。

    约 5 分钟
  5. 二十五

    回春堂

    Sagas补偿事务 · 长事务的撤销链

    乾隆年间,扬州回春堂做南北药材的批发生意。一单大买卖从辽东收人参起,要经漕运过淮安,再换船过江到扬州,最后分送苏杭两地的分号。全程两个月,…

    约 5 分钟
  6. 二十六

    并蒂莲

    Causal+ 一致性happens-before · 并发写入收敛

    苏州拙政园有株并蒂莲,一茎两花,同根而生。园艺师说,这种花没法人工培育,只能等它自己冒出来——两朵花从同一个节上长出,共享一脉养分,…

    约 6 分钟
  7. 二十七

    同一张戏单

    Sequential Consistency — 全进程同意某一顺序

    光绪末年,上海丹桂茶园换了新班主,从京城聘来一整班京角儿,要在沪上唱连台本戏《封神榜》。班主定了一条规矩:戏码可以变,但**变之前,…

    约 5 分钟
  8. 二十八

    双生记

    Primary–Backup Replication — 一主多从,简单但易瓶颈

    光绪年间,上海汇丰银行的分号开到了汉口、天津、广州三地。总账房设在黄浦江畔,各地分号每日把汇兑、放款、存取的数目抄成副本,…

    约 5 分钟
  9. 二十九

    铁匠铺的规矩

    CASCompare-and-Swap · 最基础的原子原语

    光绪年间,保定府有家铁匠铺,专给镖局打马掌。铺子里三个伙计,老周掌钳,小周抡锤,还有个学徒阿贵负责淬火。一匹马四只蹄,一套马掌十二枚钉子,…

    约 5 分钟
  10. 三十

    两座钟楼之后

    PACELCCAP 的延伸

    一九三七年,南京。两条铁路在此交汇:津浦线纵贯南北,沪宁线横连东西。调度室在站台西侧一座灰砖楼里,墙上挂两面钟——一面德国造,…

    约 6 分钟

第四辑

Book 4

第 31–40 则。

  1. 三十一

    三座钟楼

    CAP 的常见误读为什么"三选二"是错的

    泉州城里有过三座钟楼。

    约 5 分钟
  2. 三十二

    秋收

    Harvest 与 Yield收多少 vs 能收多久

    关中旱了三年。第一年,朝廷还按旧例征粮,各州县把仓底刮净,凑足数字押往长安。第二年,有些州县开始谎报灾情,说本地颗粒无收,…

    约 5 分钟
  3. 三十三

    旧印

    Viewstamped Replication主从复制中的共识 · 1988

    万历年间,南京刑部有一枚铜印,掌印郎中每日卯时亲启印匣,用印后钤盖"某年某月某日刑部之印"——这行字叫**印戳**,既是凭证,…

    约 5 分钟
  4. 三十四

    三票

    Multi-PaxosFast Paxos · Flexible Paxos · 轮次与 Quorum 之变

    光绪末年,上海租界里有个华商联合会,专管码头货栈的公共事务。会章规定:凡添设新栈、改换旧规,须得**会首**召集各商投票,…

    约 7 分钟
  5. 三十五

    热座

    HotStuff线性消息复杂度的领导者轮换共识

    长安城里有个老规矩,叫"热座"。

    约 5 分钟
  6. 三十六

    铁钎与桦皮册

    B-Tree vs LSM2010 年代最重要的存储架构之争

    黄河改道那年,测绘局和老河工陈三吵过一架。测绘局的洋学生姓杜,留过德,带回来一台水准仪和一套"断面测量法":每隔五十步打一根铁钎入河底,…

    约 5 分钟
  7. 三十七

    碎瓷与整器

    擦除编码冷数据省空间的代价

    景德镇有个规矩,龙窑烧出的贡品进京,一路上碎裂在所难免。早年间用老办法:一器一匣,匣里塞满稻草谷糠,碎了就补送。后来烧造量大了,…

    约 5 分钟
  8. 三十八

    漏刻与驿报

    事件时间 vs 处理时间乱序事件让朴素分析失效

    洪武年间,南京城设了一套水驿急递。各省灾荒、边警、漕运迟滞,都靠驿卒换马接力,昼夜兼程送入京师。兵部有位年轻主事姓周,…

    约 5 分钟
  9. 三十九

    退信局

    Dead-letter Queues消息重试耗尽 · 隔离与审计

    (may光绪末年,上海工部局书信馆设了一个退信股,专收无处可去的邮件。地址模糊、收件人逃亡、反复投递三次仍被退回的信,…

    约 5 分钟
  10. 四十

    更夫

    Heartbeat超时阈值 · 误报与慢恢复的永恒张力

    约 5 分钟

第五辑

Book 5

第 41–50 则。

  1. 四十一

    三声鼓

    三阶段提交 — 给 2PC 加一层缓冲,却挡不住网络分区

    光绪末年,京张铁路修到居庸关,总工程师詹天佑在关沟段设了三座号志站:南口、青龙桥、八达岭。火车要爬坡,三站必须同时扳道岔、对信号,…

    约 5 分钟
  2. 四十二

    铁算盘

    Jepsen 测试对抗性分区测试 · Kyle Kingsbury

    约 5 分钟
  3. 四十三

    碎杯

    Shuffle Sharding — 把用户随机撒进无数小单元,让故障撞不翻整桌

    道光年间,景德镇有个烧御瓷的官窑,每年要出十万件青花供宫廷采办。窑厂分作东西两区,每区五十座窑,一窑一火,各烧各的。按老规矩,…

    约 5 分钟
  4. 四十四

    同一封信

    Exactly-once幂等生产者、事务写入与检查点

    光绪年间,天津卫有个信局子叫"三元递",专做南北货商的汇票生意。商人在津门把银票交给三元递,局子誊抄一份留底,原件封火漆,…

    约 5 分钟
  5. 四十五

    堰口

    背压下游撑不住时,上游该主动减速

    万历年间,江南漕运改道,苏州府新凿了一条官河直通京师。河工们起初只顾掘深拓宽,把闸口开到最大,…

    约 5 分钟
  6. 四十六

    独占令

    领导者租约免 Quorum 读

    岭南有个盐场,分作七灶,每灶管着一口盐井、一堆盐工。七灶各自熬盐,各自记账,月底把盐包和账册一起运到总场,…

    约 6 分钟
  7. 四十七

    换班令

    Raft 联合共识重配置期间的安全性

    漕帮管着大运河上的七十二闸,每闸有闸丁十二人,按月轮值。闸丁不是散工,是入了帮册的正式帮众——帮册上谁的名字在,…

    约 6 分钟
  8. 四十八

    十三张投名状

    Quorum 交集R+W>N 的几何直觉

    光绪年间,直隶有十三家镖局,各自占着一条道。单家走单镖,十趟里总要丢两三趟——土匪不抢你抢谁。后来总镖头们坐下来喝了一顿酒,…

    约 5 分钟
  9. 四十九

    先画押后分田

    Calvin确定性数据库

    宣统二年,北方各省推行"均田令"。朝廷派下来的办法很老派:每县把地册报上去,户部核对,批文下来,才能丈量分地。一县一县串着办,三年过去了,…

    约 5 分钟
  10. 五十

    同一盏灯笼

    Session Guarantees — 自己点亮的灯,自己先看见

    同治年间,扬州有个灯市,每年元宵前后开集三日。灯市规矩古怪:卖灯的、买灯的、评灯的,各在一巷,三巷之间隔了半里青石路。买灯的人付完银子,…

    约 5 分钟