Hacker News 中文摘要

RSS订阅

Cloudflare Meerkat - 全球分布式共识 -- Cloudflare Meerkat - Globally distributed consensus

文章摘要

Cloudflare推出Meerkat实验项目,旨在解决全球330多个数据中心间控制平面状态的一致性问题。通过共识算法,Meerkat确保在部分节点或链路故障时,系统仍能保持强一致性和写入可用性,克服了传统算法如Raft在广域网环境下的性能局限。

文章总结

好的,这是根据您的要求,对原文进行的中文重述:

标题:介绍Meerkat——一项全球共识的实验

Cloudflare的众多内部服务需要在其全球330多个数据中心间读取和修改相同的控制平面状态。系统必须保证不同读取者永远不会看到不一致的状态,并且即使在部分数据中心或链路故障时,写入操作仍可用。

然而,Cloudflare的网络运行在不可预测的互联网上。服务器宕机、链路中断等情况时有发生,这使得运行一个保证强一致性(例如,所有读取者都能读到之前的所有写入)的全球可用数据系统变得困难。

一种在恶劣网络条件下安全同步数据的方法是使用共识算法。它允许一组机器就相同的值序列达成一致,只要多数派机器存活且能通信。但常用的共识算法(如Raft)在广域网中表现不佳,因为它们依赖领导者超时机制。领导者是唯一允许写入的副本,一旦它因崩溃或网络问题失效,系统将不可用,直到其他副本超时并选出新领导者。在延迟不可预测的网络中,超时值很难配置。Cloudflare曾多次因共识驱动系统中的领导者不可用而引发事故。

因此,过去一年,Cloudflare研究团队基于一种名为QuePaxa的新共识算法,构建了名为Meerkat的分布式共识服务。与Raft不同,QuePaxa的所有副本在任何时候都能执行写入,且不会因超时而停止,非常适合Cloudflare的网络。我们在Meerkat的共识日志之上构建了事务性键值存储和租约系统等应用。据我们所知,这将是QuePaxa首次在全球范围内的工业部署。

Meerkat目前仍是一个实验性服务,主要设计用于管理小规模的控制平面状态(如复制数据库的领导权),短期内仅供内部使用。

我们对全球控制平面数据系统的需求

许多Cloudflare服务需要读取和写入控制平面数据,例如资源放置信息和数据库写入权限信息。这些数据必须同时满足强一致性特定故障下的可访问性

  • 强一致性:许多服务需要线性一致性。这意味着所有操作都按真实时间顺序执行,程序员可以像在单线程机器上一样推理分布式系统,无需考虑弱一致性可能带来的各种怪异行为。
  • 容错性:系统应满足以下条件:
    1. 只要多数派机器存活且能通信,且客户端能联系到与多数派相连的任意机器,系统就应保持可用。这意味着单个机器故障或单条链路问题不影响可用性,这是Raft系统无法提供的。
    2. 只要系统内没有恶意行为者,系统就保持正确,即没有两个最新的机器会对世界状态产生分歧。

Meerkat介绍

Meerkat是一个共识服务,开发者可以请求一个由多个副本组成的集群。每个副本都参与共识算法,并能接收读写请求。客户端向集群中任意副本发送应用请求(如键值存储的getput),副本会返回应用响应。

  • Meerkat的日志:副本将应用请求转换为日志事件,并通过共识算法分发给所有其他副本,确保所有副本维护完全相同的日志。Meerkat应用(如键值存储)读取日志事件并构建状态。例如,键值存储应用从日志事件中构建内存中的键值存储。get请求也会创建分布式日志事件,以实现线性一致性。
  • 如何实现强一致性:Meerkat的日志是一个序列的槽位。已包含事件的槽位称为已决槽位。Meerkat的一个关键不变量是:任何两个副本对同一个槽位的已决值都相同。为了决定日志中最后一个空槽位的值,副本运行分布式共识算法。例如,一个客户端提交put k1 v11,另一个提交put k1 v111,共识算法确保只有一个提案胜出。这保证了线性一致性:一个写操作后的读操作,总能读到最新的值。
  • 如何提供比Raft更高的可用性:Raft依赖权威领导者,这带来了两个问题:1)领导者宕机时,系统不可用,直到选出新领导者;2)领导者变慢时,性能下降。在广域网中,领导者故障问题因超时机制而加剧:超时设置过短会导致频繁超时阻塞写入,过长则反应迟钝。Cloudflare的广域网延迟变化剧烈,使得调整超时尤为困难。

Meerkat选择了QuePaxa算法,旨在避免Raft的“超时暴政”。其核心优势在于: 1. 客户端可以联系任意副本,该副本即可驱动共识。没有强制要求的领导者,因此系统永远不会因单个副本故障而不可用。 2. 没有领导者选举,不同副本的并发提案会建设性地相互协作,而非像Raft那样相互干扰。 3. QuePaxa专为不可靠网络环境设计,在类似条件下,其吞吐量远高于Raft。

Meerkat的性能评估

Meerkat并非为通用数据库设计。所有共识算法都有通信开销,QuePaxa决定一个提案通常需要1到3次往返。提案决策延迟与多数派副本间的延迟成正比,副本相距越远,延迟越高。

但可以通过以下方式提升性能: 1. 开发者可控制副本位置,将其靠近放置以减少延迟。 2. 写入可以批量处理。 3. 如果接受读取过时数据,可以不触发共识轮次。 4. 多个操作可以捆绑到一次共识轮次中。

尽管如此,Meerkat的延迟限制依然存在,这使其短期内非常适合用于写入不频繁但必须保持一致的控制平面信息

未来展望

Meerkat尚未投入生产,但已在全球多达50个副本的概念验证中取得成功。验证集群中的领导者不断故障,但集群持续运行,错误率没有增加。 未来一年,我们将发布更多关于Meerkat的文章,探讨QuePaxa的工作原理、Rust实现的正式验证、集群管理、副本放置优化、确定性模拟测试等内容。

评论总结

根据评论内容,总结如下:

主要观点与论据:

  1. 对Meerkat的实用性持肯定态度(评论1,评分None):认为在恶劣网络环境下(如领导者频繁切换、选举风暴、延迟飙升),Meerkat的表现并不差,对处理复杂网络的人很有用。关键引用:"if youve ever fought a raft cluster on a bad network... this genuinely doesnt seem that bad" / "i believe this will be very useful to those dealing with messy networks"

  2. 对文章内容与标题的质疑(评论2,评分None):认为文章未清晰传达核心创新,与Raft的比较令人困惑,因为Raft本身就是强领导者协议,而Meerkat是无领导者,应对比Paxos类算法。关键引用:"Comparing to Raft and saying it's better because Meerkat is leaderless is confusing" / "I don't see what's unique here"

  3. 对工程实践的谨慎态度(评论3,评分None):怀疑多数人自行实现分布式共识的能力,但认可Cloudflare的推动。指出Meerkat尚未投入生产,多轮往返可能成本高昂,且不适合数据库。关键引用:"I'm doubtful of most people building their own crypto libs and distributed consensus implementations" / "it's not in prod yet... those many round trips are going to get expensive"

  4. 对实际需求的反思(评论4,评分None):认为多数“需要分布式协调”的场景实际只需单写入器和锁,单区域主节点加跨区域读延迟通常优于共识协议。关键引用:"Most 'we need distributed coordination' turns out to be 'we need one writer and a lock'" / "a single-region primary plus accepting cross-region read latency beats eating a consensus round-trip"

  5. 对文章结构的批评(评论6,评分None):建议文章应聚焦QuePaxa算法(不依赖超时的新思路),而非未成熟的Meerkat,并对比其他无领导者或多领导者协议。关键引用:"it would be much better if the article focused on QuePaxa... not relying on timeouts" / "The Paxos family of algorithms are a much closer fit here"

平衡性总结: - 支持方:认可Meerkat在恶劣网络下的潜力,认为对复杂网络场景有价值。 - 质疑方:批评文章内容与标题不符,创新点不清晰;对工程实现持谨慎态度;认为多数场景无需复杂共识协议;建议聚焦更成熟的QuePaxa算法并全面对比同类协议。