English →
博客精读 · 17 · muratbuffalo.blogspot.com

Murat Demirbas
脑子是普通的,所以要造器械

2007 年至今 · 839 篇 · 跨度 16 年(2010 年 9 月起稳定周更)· 一次明显转折:2020 年前后从终身教授转入工业界(AWS 三年,现 MongoDB Research)· 仍在更新,最新一篇 2026 年 9 月 12 日 · 全站免费公开,无付费墙 · 本页通读 19 篇,跨度 2011 年 1 月至 2026 年 9 月,其中 4 篇来自最早期,转折两侧各有取样

为了写这一页,我爬了 Murat Demirbas 全部 839 篇博客的正文,统计站内互相链接——想看看这个写了十六年的博客,哪几篇是承重墙。

排第一的不是 Paxos,不是任何一篇论文精读。是一篇 2018 年元旦写的、讨论问号这个符号从哪来、以及猩猩到底会不会提问的文章。46 次回链。

第二名才是他自己发明的混合逻辑时钟(41 次)。第三名是同一个话题的续篇(33 次)。前十名里有六篇讲的是怎么提问、怎么读论文、怎么写作、怎么讲自己的思考过程——只有四篇是技术。

一个分布式系统领域的顶级专家,博客的地基居然是关于怎么想问题的。

这不是意外。2017 年年底,当了十几年教授、写了七年博客的他坐下来,给自己下了一个很不留情的诊断:他觉得自己的问题变钝了,"often come out as shallow/predictable"。然后是那句最要命的自我怀疑:

But yeah, I cannot be sure whether I have gone compliant/docile recently, can I?但话说回来,我没法确定我最近是不是已经变得顺从、听话了,对吧?Mad questions,2018 年 1 月 2 日

他的新年决心不是"多提问"。他知道决心没用。他的做法是装一个系统:从此每篇博客末尾强制加一节"MAD questions"(疯问题),并且新开一个标签专门收它们。

一年后他复盘:70 篇下来,这一节平均占正文篇幅的 25%,经常比正文还长;更意外的是,很多本来烂在草稿箱里的半成品,正是因为要凑这一节才被写成了成品。而他给出的解释,是这整件事里最漂亮的一下——这个办法之所以几乎不费力气就有效,是因为

our default mode is to not question things. We have been implicitly taught this at our family, school, and work.我们的默认模式就是不提问。这是家庭、学校和工作场所暗中教给我们的。Master your questioning skills,2018 年 12 月 17 日

所以"MAD"这个名字不是装饰,是许可证:叫它疯问题,他就获得了不受传统假设约束地发疯的豁免权。他还给了一条特别实用的操作建议:别嫌自己一开始的问题蠢。"Bad questions lead to good questions."(坏问题通向好问题。)把蠢问题耗光,好问题才出得来。怎么知道碰到好问题了?好问题像好笑话——有意外,有视角切换,而且你身体会有反应。

这套东西看起来像自助读物,但它挂在一个非常硬的前提上,那个前提才是理解这个人的钥匙。他在 2012 年就把它写死了:

We all have humble brains; don't let anybody tell you differently. Falling short of superpowers (genius/giftedness), we invent processes/systems to succeed, and the good thing about these processes are they are replicable (unlike being genius/gifted).我们的脑子都是普通的,别让任何人告诉你不是这样。既然没有超能力(天才、天赋),我们就发明流程和系统来取胜,而这些流程的好处在于它们可复制——天才可不行。Tell me about your thought-process, not just your results,2012 年 1 月 11 日

六年后他把同一句话说得更短、更狠,用在了完全不同的地方:"Being smart does not scale."(聪明这东西不可扩展。)那是在讲为什么设计分布式协议时不能靠"我想了想应该没问题",得上穷举式的模型检验。

一旦你握住这把钥匙,他那些看起来八竿子打不着的题目就连成了一条线。它们全都是同一个动作的不同版本:一个普通的脑子,怎么可靠地搞懂一个大到装不进脑子的东西?答案永远不是"更聪明",而是"造一件器械"。

他自己最有名的那件器械,是 2014 年的混合逻辑时钟(Hybrid Logical Clocks,HLC)。当时时间这件事在分布式系统里是个死局:Lamport 1978 年的逻辑时钟能记录因果先后,但和真实世界的时间完全脱钩,你没法问"上周二的快照长什么样";靠 NTP 同步的物理时钟有真实时间,但跨地域同步不准,还有闰秒和回拨这些脏活;Google 2012 年的 Spanner 干脆砸钱上 GPS 和原子钟,把误差压到 6 毫秒——代价是要建一整套硬件基础设施,而且每次提交事务还得白白等掉那个误差区间。

三条路,每条都要你交学费。他和 Sandeep Kulkarni 的提问方式换了个方向:为什么一定要选? 能不能造一个时间戳,同时做到保因果、只占常数空间、而且永远贴着物理时钟不超过一个上界?

朴素的做法(照抄 Lamport 但每次取最大值)会失控——逻辑部分会无限地跑到物理时钟前面去。HLC 的技巧是加一个小计数器 c,并且保证它会被反复清零:要么你收到一个更大的逻辑时间,c 归零;要么物理时钟追上来把它顶上去,c 还是归零。于是逻辑时间和物理时间的差距被平凡地卡住了。工程上他们再狠一手:逻辑部分只跟踪物理时钟的高 48 位(仍然有微秒精度),剩下 16 位全给 c。而括号里那句实测结果才是这个设计真正的说服力所在——

(In our experiments c mostly stayed in single digits.)(在我们的实验里,c 基本上停留在个位数。)Hybrid Logical Clocks,2014 年 7 月 27 日

留了 65536 个坑,实际只用掉个位数。今天 CockroachDB、MongoDB、YugabyteDB 都在用它。

十年后他写了五篇的总结系列,结论比 HLC 本身更值钱,因为它把"时间"重新定义了一遍:同步时钟的本质不是"知道几点了",而是一个共享参照系。

When nodes operate independently, they essentially exist in their own temporal universes.当各个节点独立运行时,它们本质上活在各自的时间宇宙里。Use of Time in Distributed Databases (part 5),2025 年 1 月 14 日

参照系一对齐,很多原本要靠来回通信才能谈成的事——一致性快照、冲突检测、租约(lease)——就不用谈了,各节点自己算就行。但他同时守着一条从 Barbara Liskov 1991 年那里继承来的红线,而且他认为这条线至今没变:时间用来提性能,不用来保正确性。时钟坏了你该只是变慢,不该是算错。

他最近、也最锋利的一个判断是 2026 年 5 月的。他教了很多年 TLA+(一种把系统设计写成数学模型再让机器穷举检查的工具),每次都说"抽象"是最重要也最难学的那一步。但有个认知失调一直折磨他:计算机系的人不是本来就该擅长抽象吗? 抽象数据类型、API、分层设计,是每一份 CS 课表上的主食。那为什么每一个搞形式化方法的人,都说学生不会抽象?

他的答案是:同一个词底下藏着两种方向相反的东西。

Modularity abstraction hides. Modeling abstraction reduces.模块化抽象是把东西遮起来。建模抽象是把东西削下去。The Two Abstractions of System Design: Hide or Reduce,2026 年 5 月 8 日

模块化抽象画边界、做封装,竖着切一刀,把下面那层遮住,目标是让人好用——它想把并发藏起来,假装每个操作都是原子的。Joel Spolsky 那句著名的"所有抽象都是漏的",抱怨的全是这一种。

建模抽象反过来。它横着切,为你关心的那一条性质把系统削到最小的行为骨架,扔掉一切不相干的东西。而且——这是最反直觉的一句——它故意让东西漏出来:把细粒度动作和所有可能的交错全部暴露,然后证明不变式在每一种交错下都成立。回报不是好用,是"榨出系统里最大限度的安全并发"。

他随手给的例子串本身就是一份分布式系统简史,每一个都可以读成"扔掉了什么":Lamport 逻辑时钟扔掉墙上时间、只留先后;HLC 留下真实时间和因果、扔掉其余;TrueTime 把时间变成一个有界的不确定区间;线性一致性扔掉复制、缓存和重试;"日志即数据库"扔掉物化状态这个真相来源;MapReduce 扔掉编排、并行、调度和容错,只留一串确定性变换。

如果非要给这个人一句总结,那就是他 2023 年写给分布式系统设计者的那条建议——出自一个把半辈子花在共识协议上的人:

Even as a distributed coordination researcher and Paxos expert, my advice is to reduce coordination.尽管我是研究分布式协调的、是 Paxos 专家,我的建议依然是:少协调。Hints for Distributed Systems Design,2023 年 10 月 2 日

而他造的那件最有效的器械,说到底就是这个博客本身。他给自己定了周更配额,理由不是产量,是"noticing"——保持在一种会注意到东西的状态里。他说这个配额降低了他的写作标准,而这恰恰反过来抬高了标准。他回头读自己七年前的旧文,说那能"refires the same neurons",让他快速把当年那个理解状态重新装载回来。

博客成了他的外部存储器。839 篇,五百多万次阅读,一个人的、可复制的、不靠天赋的挖井记录。