摘要
传统的容错分布式事务是在 Paxos 共识协议之上的传统并发控制协议。这种方法提供了可扩展性、可用性和强一致性。然而,当用于广域存储时,这种方法会引发两次跨数据中心的连续协调:一次用于并发控制,然后一次用于共识。在本文中,我们主要观察到并发控制和共识所需的协调高度相似。具体来说,每个都试图确保交易的序列化图是非循环的。我们在 Janus 的设计中利用了这种洞察力,这是一个统一的并发控制和共识协议。 Janus 的目标是编写为存储过程的一次性事务,这是一种常见但受限制的事务类。像 MDCC 和 TAIR 一样,Janus 可以在一次往返中提交此类中的不冲突事务。与 MDCC 和 TAPIR 不同,Janus 避免了由于争用而中止:只要网络运行良好并且每个服务器副本的大多数都处于活动状态,它最多在两次往返中提交此类中的冲突事务。
我们将 Janus 与分层设计和 TAPIR 在此类中的各种工作负载下进行比较。我们的评估表明,在无竞争的微基准测试中,Janus 的吞吐量是分层系统的 5 倍,是 TAPIR 吞吐量的 90%。当工作负载竞争时,Janus 提供比基线低得多的延迟和更高的吞吐量(高达 6.8 倍)。
简介
可扩展、可用且高度一致的分布式事务通常是通过在 Paxos 共识协议复制的数据存储分片之上分层传统并发控制协议来实现的。将数据分片成许多可以由不同服务器存储和服务的小子集提供了可扩展性。尽管服务器出现故障,但通过共识复制每个分片可提供可用性。尽管不同事务的数据访问存在冲突,但使用 USENIX 关联并发控制跨复制分片协调事务可提供强一致性。这种方法在实践中很常用。例如,Spanner 实现了两阶段锁定 (2PL) 和两阶段提交 (2PC),其中数据和锁都由 Paxos 复制。作为另一个例子,Percolator 实现了机会并发控制 (OCC) 的变体,它在 BigTable 之上使用 2PC,它依赖于主备份复制和 Paxos。