Cloudflare的许多内部服务需要从我们的330多个全球数据中心读取和修改相同的控制平面状态。他们需要保证不同的读者永远不会看到不一致的状态,并且即使在某些数据中心或链接发生故障时,系统仍然可用于写入。但是Cloudflare的网络遍布整个互联网,互联网是一个不可预测的地方。服务器和数据中心出现故障。队列排满了。
链路和电缆被切断。这些条件使得难以运行保证强一致性的全局可用数据系统(例如,保证所有读取器读取所有先前的写入),因为恶劣条件阻碍了分布式系统副本相互可靠地同步数据的能力。
尽管存在不利的网络条件,但安全地同步数据的一种方法是通过共识算法,该算法允许一组机器就相同的值序列达成一致,例如键值存储PUT和GET操作,只要大多数人保持活跃并能够进行通信。不幸的是,像Raft这样的普遍部署的共识算法在像Cloudflare这样的广域网中受到影响,因为它们依赖于领导者和超时。
领导者是唯一允许写入的副本,如果由于崩溃或网络降级而失败,系统将变得不可用,直到其他一些副本超时并选出新的领导者。在延迟不可预测的网络中,这些超时值很难配置。我们经历了多起由共识驱动系统中无法提供服务的领导者引起的事件。
因此,在过去的一年中, Cloudflare的研究团队一直在构建一种名为Meerkat的新型分布式共识服务,该服务由EPFL的研究人员于2023年发布的一种名为QuePaxa的共识算法提供支持。QuePaxa与Raft的不同之处在于,所有副本都可以随时执行写入,并且进度不会因超时而停止,这使其非常适合Cloudflare的网络。