Cloudflare 最近宣布推出 Meerkat,这是一项实验性分布式共识服务,旨在管理我们的内部全球控制平面。它由研究人员Tennage & Băsescu等人发布的一种名为QuePaxa(2023)的新共识算法提供支持。QuePaxa是一个不寻常的选择;大多数共识系统都使用成熟的共识算法,如Raft、(多)Paxos或Viewstamped Replication。
这些算法已被人们熟知,具有成熟的实现方式,通常效果良好。遗憾的是,常见的共识算法在网络连接和延迟不稳定的广域网(即像互联网这样的网络,Meerkat 就是在这样的网络上运行)中往往表现不佳。这些算法依赖于单个主进程可用且具有可预测的延迟。
如果主节点宕机、延迟高于平常或断开连接,整个共识系统就会变慢或不可用,直到主节点被替换。对于Meerkat来说,这是不可接受的。Meerkat的全球部署环境促使我们采用了更新的共识算法QuePaxa,该算法在很大程度上不依赖于主节点来推进共识,因此即使在波动的情况下也能提供更好的稳定性。
在本文中,我们将解释我们为什么选择QuePaxa,以及QuePaxa算法是如何运作的。我们正在构建什么,以及为什么它独一无二Meerkat是一个分布式系统,其中的副本就一个有序的事件日志达成一致,每个事件都由共识算法决定。共识算法使一组机器能够就一个共同的真相达成一致,即使其中一些机器发生故障或断开连接。
共识算法提供了一项重要保障:机器永远不会决定相互冲突的值。这确保了Meerkat副本的日志绝不会出现分歧。Meerkat 使用其基于共识的日志来公开应用程序,就像一个键值存储一样,其中日志中的每个条目都是一个“get”或“put”操作。由于共识算法保证副本的日志绝不会出现分歧,因此它们都构建相同的键值(KV)状态。