故事

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

七座岛上的调香师各自独立劳作,但每一位都希望自家的《香谱》能收尽天下之香。于是他们雇了些海鸟信使,鸟脚上系着写满香名的小筒,在各岛之间穿行。

然而南洋风浪难测。有时信鸟被海鹰所食,消息就此失传;有时善心的渔夫拾得旧信,重新放飞,同一份消息便在多日之后再次"归来";有时两只信鸟同日抵达,次序颠倒。岛上的年轻调香师常常发愁:

"老师傅,这般混乱,我们怎能确信各岛的香谱终究一致?"

老师傅笑而不答,只教给他们三条戒律:

一曰:只录不删。 任何香气,一经录入,便永不抹去。

二曰:见异则合。 收到他岛寄来的香谱,不是用来替换自家的,而是将两谱合为一谱——你有的留,他有的添,两家都有的,算作一条。

三曰:不问先后,不计多寡。 信鸟来了三回、五回,都只管与自家谱合一次;同一日来两封,或隔月来一封,都一视同仁。

年轻人不解:"这样我们的谱岂非越合越长,永无定日?"

老师傅说:"香谱会越来越长,这是自然——因为新香不断被发现。但若某日天下不再有新香可采,你们看着吧。"

数年之后,天下已尽识百花之香。信鸟仍在海上往返,有时遗失,有时重复,有时错乱。但若有人在七岛之间游历,取各岛的《香谱》相比——

一字不差。

那年轻调香师终于去请教老师傅:"我们从未约定何时对账,也从未派人统一登记,信鸟又如此不可靠——为何七谱竟分毫不差?"

老师傅取来两只瓷瓶,一红一青,缓缓道:

"你把红花的汁倒入青花,与把青花的汁倒入红花,所得颜色一样么?"

"一样。"

"你将两瓶合一,再将此合瓶与另一瓶合,与先合后两瓶再合第一瓶,所得一样么?"

"一样。"

"同一瓶你倒了十次进去,与倒一次进去,所得一样么?"

"一样——因为本就已在瓶中,再倒无益。"

老师傅点头:"香谱之'合',正是此理。合而不分先后,合而不分多寡,合而只增不减。故而无论信鸟走的是哪条路、丢了多少回、重了几遭——只要每一条路上至少还有一只鸟最终抵达,七岛之谱终将归于同一。"

年轻人怔然良久,轻声问:"所以,让众岛归一的,不是什么号令,也不是什么钟声——"

"——而是'合'这个动作本身的脾性。" 老师傅望向窗外的海,"世间真正稳固的秩序,从不靠发号施令,而靠每一次小小的动作都带着自洽的性子。"

概念解析

这则寓言讲的是分布式系统中的无冲突复制数据类型(Conflict-free Replicated Data Type,CRDT),以及与之紧密相关的强最终一致性(Strong Eventual Consistency, SEC)。

问题: 在地理分散的多个副本上,我们希望允许任何副本随时独立接受更新——不需要协调、不需要锁、不需要共识——同时保证所有副本最终收敛到相同状态。可是网络不可靠:消息可能丢失、重复、乱序。传统方案要么用分布式锁和两阶段提交强行协调,要么用 Paxos/Raft 达成共识,两者都代价高昂,且在网络分区时必须牺牲可用性。

核心洞察: 如果副本的状态是某个连接半格(join-semilattice)中的元素,而副本之间的"合并"操作恰是该半格的连接(join, ⊔),那么只要这个合并操作满足以下三条代数性质,收敛便是数学上必然的——

  • 交换律(commutativity):a ⊔ b = b ⊔ a ——寓言中"不问先后"
  • 结合律(associativity):(a ⊔ b) ⊔ c = a ⊔ (b ⊔ c) ——"先合谁、后合谁都可以"
  • 幂等律(idempotence):a ⊔ a = a ——"不计多寡",重复送达无害

而寓言中的"只录不删",对应的正是单调性(monotonicity):状态只能沿半格的偏序向上移动,永不倒退。

深刻之处: CRDT 把"一致性"的重担从协议层彻底移交给了数据结构本身。只要数据类型的合并操作天然具备上述代数性质,那么无论消息如何丢失、重复、乱序,无论副本何时互通有无,只要每对副本之间最终能互相传达(所谓"最终传递"假设),所有副本必然收敛到同一个状态——无需投票,无需选主,无需锁。

常见 CRDT: G-Counter(只增计数器)、PN-Counter(可增可减计数器)、G-Set(只增集合)、OR-Set(观察-移除集合)、LWW-Register(最后写入者胜寄存器)、RGA(序列 CRDT)等。寓言中的"香谱",就是最简单的 G-Set——只添不减的集合,合并即取并集(并集显然满足交换、结合、幂等)。

应用: CRDT 广泛用于多人协同编辑(Automerge、Yjs,以及 Figma、Notion 这类实时协作产品的底层)、地理分布式数据库(Riak、Redis)、离线优先的移动应用等场景。

它给我们的启发正如寓言所言:真正稳固的分布式秩序,未必靠集中号令,而可以源自每一次局部操作本身所携带的代数性质。 当你把"一致"的保证嵌进数据结构的骨子里,网络可以任意混乱,而世界仍然会归于同一。