Programming with replicated objects is difficult. Developers must face the fundamental trade-off between consistency and performance head on, while struggling with the complexity of distributed storage stacks. We introduce Correctables, a novel abstraction that hides most of this complexity, allowing developers to focus on the task of balancing consistency and performance. To aid developers with this task, Correctables provide incremental consistency guarantees, which capture successive refinements on the result of an ongoing operation on a replicated object. In short, applications receive both a preliminary---fast, possibly inconsistent---result, as well as a final---consistent---result that arrives later. We show how to leverage incremental consistency guarantees by speculating on preliminary values, trading throughput and bandwidth for improved latency. We experiment with two popular storage systems (Cassandra and ZooKeeper) and three applications: a Twissandra-based microblogging service, an ad serving system, and a ticket selling system. Our evaluation on the Amazon EC2 platform with YCSB workloads A, B, and C shows that we can reduce the latency of strongly consistent operations by up to 40% (from 100ms to 60ms) at little cost (10% bandwidth increase, 6% throughput drop) in the ad system. Even if the preliminary result is frequently inconsistent (25% of accesses), incremental consistency incurs a bandwidth overhead of only 27%.
翻译:复制对象的编程是困难的。 开发者必须面对一致性和性能头头之间的根本权衡, 而同时要面对分布式存储堆叠的复杂性。 我们引入了修正性, 这是一种新颖的抽象抽象, 隐藏了大部分这种复杂性, 让开发者能够集中力量平衡一致性和性能。 为了帮助开发者完成这项任务, 校正性提供了递增一致性保障, 从而根据在复制对象上持续操作的结果, 获取连续的改进。 简言之, 应用程序既要面对一个初步的、 可能不一致的结果, 又要面对一个最终的、 一致的结果。 我们展示了如何通过对初步价值的猜测、 交换量和带宽来利用递增一致性保证, 以便改进耐久性。 我们尝试了两个流行的存储系统( Cassandra 和 ZooDefraer) 和三个应用程序: Twissandra 的微博博服务、 服务系统以及售票系统。 我们对亚马逊EC2 平台的A、 B和CSB等最终结果, 而最终的一致性结果是后来才到 。 我们可以通过初步的固定的固定性操作来降低延度, 80- 至40 % 的递增( 递增性操作结果) 递增性结果。