Cloudflare 在博客里承认了一件不太常在官方文章里看到的事:过去他们的生产事故里,有好几次是自家共识系统的 leader 掉线引发的。跨越 330 多个数据中心去同步谁能写数据库、模型实例放在哪个节点这类控制面信息,靠的正是传统共识算法 Raft——而 Raft 的软肋,恰恰被广域网的不确定性放大了。

于是 Cloudflare 研究团队花了一年时间,做出一个叫 Meerkat 的实验性共识服务,底层换成 2023 年才发表的算法 QuePaxa。按 Cloudflare 的说法,这是 QuePaxa 第一次被用在工业级全球规模的部署里。听起来是个漂亮的技术选型故事,但读完全文你会发现:这篇稿子讲清楚了“为什么换”,却完全没讲“换了之后怎么样”。

Raft 的老毛病,卡在了广域网上

Raft 靠一个唯一 leader 驱动写入,简单、好理解,也因此被 etcd、Consul 这类系统广泛采用。但它有个前提:leader 挂了,得靠超时机制触发重新选举,期间系统写入全部阻塞。

在同一机房里,超时阈值好调;但在跨大洲的广域网上,延迟本身就忽高忽低,超时值定短了容易误判抖动、定长了故障恢复变慢。Cloudflare 说自己因此吃过“多次事故”的亏——具体规模没公开,但这是他们换算法的直接动因。

QuePaxa 的卖点正对着这个痛点:所有副本随时都能接受写入,进度不会因为等超时而停摆。

Meerkat 想解决的,就是这个阻塞窗口

Meerkat 的架构本身不复杂:一个集群里的每个副本互相连接,客户端可以把读写请求发给任意一个副本,副本再把操作变成日志事件,通过 QuePaxa 分发给所有人,保证大家最终看到同一份日志顺序,从而实现线性一致性。

关键差别在 leader 掉线之后发生了什么。

leader 掉线之后,两条算法怎么走 Raft QuePaxa leader 宕机 等待超时判定 重新选举新 leader 期间写入全部阻塞 各副本继续接受写入 不依赖固定超时值 多数派持续达成一致 写入不中断

这张对照图是 Cloudflare 想传达的核心叙事:Raft 有一段“必然不可用”的窗口,QuePaxa 没有。


学术圈的说法没这么干脆

QuePaxa 这篇论文出自 EPFL 和 UCL 的研究者,标题直译过来就是“逃离共识里超时机制的暴政”。但看过论文的人会补一句:QuePaxa 不是全程无差别对待所有副本

它在稳态运行时,其实仍然保留了一条类似 Raft、Multi-Paxos 的“快速路径”——有一个偏好的提案者在跑,效率才高。真正体现“无 leader”的地方,是这个偏好提案者出问题之后的恢复阶段:不需要靠固定超时去触发一次正式选举,其他副本可以直接顶上继续写。

换句话说,QuePaxa 解决的不是“要不要 leader”,而是“leader 挂了之后要不要死等超时”。这个区别不算大,但足以说明 Cloudflare 博客里“所有副本随时可写”这句话,是一种简化表达,不是对底层机制的精确描述。至于 Meerkat 自己的实现是不是完全照搬了这套“稳态快路径 + 无 leader 化恢复”的结构,Cloudflare 目前没有细讲——按博客说法,这属于后续文章要展开的部分。

缺的那块:一个数字都没有

Cloudflare 的博客把动机、模型、一致性定义都讲得很细,唯独没有交出任何实测数据

  • 结论.Meerkat 目前只在内部管理“小块”控制面数据(比如复制数据库的领导权),还没有大范围生产验证。

QuePaxa 论文本身在其研究场景下给出过参考基准,可以当作日后对照的起点:

Meerkat 目前拿出的证据清单 7.5万 论文吞吐基准 req/s,非生产实测 380ms 论文场景延迟 非 Cloudflare 环境 0 Cloudflare 实测数据 本文未公布

这两个数字来自论文更广泛的研究场景,不是 Cloudflare 自己跑出来的结果,只能当参照系,不能当承诺。而右边那个“0”才是真正的信息量:目前没有任何 Meerkat 自己的吞吐、延迟或故障演练结果被公开,也没有和现有 Raft 系统的直接对比。

外部技术社区的反应也印证了这一点——目前只有零星转发,没有出现实质性的技术拷问。这意味着 Meerkat 现在处于一个自证阶段:可信度暂时靠的是 Cloudflare 的品牌信用,而不是独立验证过的数据。

论文证明了算法能跑,工业部署要证明的是它能扛。

“其兴也勃焉”说的是势头,不是结果。Cloudflare 这次的势头做得很足——动机讲得清楚,架构讲得利落,唯独离“扛得住”还差一份自己的成绩单。这份成绩单什么时候补上,比这篇开篇博客本身更值得盯着看。