返回

文章详情

Cloudflare 猫鼬 - 全球分布式共识

Hacker News2026年7月8日 13:18

2026-07-08 12分钟阅读 许多 Cloudflare 的内部服务需要从我们 330 多个全球数据中心读取和修改相同的控制平面状态。它们需要保证不同的读取者从未看到不一致的状态,并且即使某些数据中心或链路发生故障,系统仍然可以保持可用以进行写入。但是,Cloudflare 的网络跨越整个互联网,而互联网是一个不可预测的地方。服务器和数据中心可能会宕机,队列可能会被填满,链路和电缆可能会被切断。这些条件使得在全球可用的数据系统中运行强一致性变得困难(例如,所有读取者都保证读取到所有先前的写入),因为敌对条件妨碍了分布式系统副本可靠地同步数据的能力。尽管网络条件不利,一种安全同步数据的方法是通过共识算法,它允许一组机器就相同的值序列达成一致,例如键值存储的写入和读取操作,只要大多数机器仍然在线且能够通信。不幸的是,像 Raft 这样的常用共识算法在像 Cloudflare 这样的广域网络中表现不佳,因为它们依赖于领导者和超时。领导者是唯一被允许进行写入的副本,如果它因崩溃或网络降级而失败,系统将在另一个副本超时并选举新的领导者之前变得不可用。而且在具有不可预测延迟的网络中,超时值很难配置。我们经历了多起因共识驱动系统中不可用领导者而导致的事件。因此,在过去的一年里,Cloudflare 的研究团队一直在构建一种新的分布式共识服务,称为猫鼬(Meerkat),它是由 EPFL 的研究人员于 2023 年发布的共识算法 QuePaxa 驱动。QuePaxa 与 Raft 不同,在于所有副本在任何时候都可以执行写入,进展不会因超时而停止,这使其非常适合 Cloudflare 的网络。我们在猫鼬的共识日志上构建应用程序,如事务性键值存储和租赁系统。根据我们的知识,这将是 QuePaxa 在全球范围内的首次工业部署。猫鼬是一个仍在开发中的实验性共识服务,初步设计用于管理小块的控制平面状态(例如,复制数据库的领导权),因此在短期内将保持内部使用。本文介绍了猫鼬,并为未来与猫鼬相关的博客文章奠定基础。 我们对全球控制平面数据系统的需求 许多 Cloudflare 服务从分布在全球各地的多个机器读取和写入控制平面数据,这些数据有助于这些服务正常运行。控制平面数据的一个示例是放置信息:某些资源(如 AI 模型实例)存储的位置。另一个示例是领导信息:当前允许哪个机器对数据库进行写入。控制平面数据必须在特定类型的故障下也具有强一致性和可访问性。在这一部分,我们精确描述了 Cloudflare 共识服务的强一致性和容错要求。我们使用键值存储作为在共识服务上运行的应用程序的示例,尽管其他应用程序(例如,分布式租约/锁)也是可能的。 强一致性 分布式数据系统的一致性级别描述了当系统接收到并发的读取和写入时,它允许表现出什么样的奇怪行为。考虑一个在多个节点上存储单个数值 x = 6 的分布式键值存储。还考虑以下写入序列。这些写入以尽力而为的方式提交到不同的节点,可能以任何顺序到达:x = x + 1 x = x / 2 系统的一致性级别告诉你在这些写入后,如果客户端读取 x,可能会看到什么值。考虑以下操作序列和在不同一致性级别下的可能执行顺序:在弱一致性级别中,写入可能会被重新排序。在更强的一致性模型中,写入不能被重新排序,但读取可以。在最强的一致性级别,操作的顺序严格遵循实际发生的时间顺序。这个属性称为线性化(linearizability)。在 Cloudflare,许多服务希望具有线性化的特性。与较弱的一致性形式不同,线性化解除了程序员思考数据系统可能表现出的所有奇怪行为的负担。相反,他们可以像在单线程机器上考虑本地内存那样考虑分布式系统:所有在写入之后的读取都会看到该写入。有关弱一致性的危险的更多阅读材料,请查看 Marc Brooker 的这篇文章。(如果你想知道,猫鼬的键值存储还提供可串行化性,我们将在未来的文章中讨论。)容错

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡