Designing the replication layer of a general-purpose datacenter key-value store
Item Status
Embargo End Date
Date
Authors
Gavrielatos, Vasilis
Abstract
Online services and cloud applications such as graph applications, messaging systems,
coordination services, HPC applications, social networks and deep learning rely on
key-value stores (KVSes), in order to reliably store and quickly retrieve data. KVSes
are NoSQL Databases with a read/write/read-modify-write API. KVSes replicate their
dataset in a few servers, such that the KVS can continue operating in the presence of
faults (availability). To allow programmers to reason about replication, KVSes specify
a set of rules (consistency), which are enforced through the use of replication protocols.
These rules must be intuitive to facilitate programmer productivity (programmability).
A general-purpose KVS must maximize the number of operations executed per
unit of time within a predetermined latency (performance) without compromising on
consistency, availability or programmability. However, all three of these guarantees
are at odds with performance. In this thesis, we explore the design of the replication
layer of a general-purpose KVS, which is responsible for navigating this trade-off, by
specifying and enforcing the consistency and availability guarantees of the KVS.
We start the exploration by observing that modern, server-grade hardware with
manycore servers and RDMA-capable networks, challenges conventional wisdom in
protocol design. In order to investigate the impact of these advances on protocols and
their design, we first create an informal taxonomy of strongly-consistent replication
protocols. We focus on strong consistency semantics because they are necessary for a
general-purpose KVS and they are at odds with performance. Based on this taxonomy
we carefully select 10 protocols for analysis. Secondly, we present Odyssey, a frame-work tailored towards protocol implementation for multi-threaded, RDMA-enabled,
in-memory, replicated KVSes. Using Odyssey, we characterize the design space of
strongly-consistent replication protocols, by building, evaluating and comparing the
10 protocols.
Our evaluation demonstrates that some of the protocols that were efficient in yesterday’s hardware are not so today because they cannot take advantage of the abundant
parallelism and fast networking present in modern hardware. Conversely, some protocols that were inefficient in yesterday’s hardware are very attractive today. We distil
our findings in a concise set of general guidelines and recommendations for protocol
selection and design in the era of modern hardware.
The second step of our exploration focuses on the tension between consistency
and performance. The problem is that expensive strongly-consistent primitives are
necessary to achieve synchronization, but in typical applications only a small fraction
of accesses is actually used for synchronization. To navigate this trade-off, we advocate
the adoption of Release Consistency (RC) for KVSes. We argue that RC’s one-sided
barriers are ideal for capturing the ordering relationship between synchronization and
non-synchronization accesses while enabling high performance.
We present Kite, a general-purpose, replicated KVS that enforces RC through a
novel fast/slow path mechanism that leverages the absence of failures in the typical
case to maximize performance, while relying on the slow path for progress. In ad dition, Kite leverages our study of replication protocols to select the most suitable
protocols for its primitives and is implemented over Odyssey to make the most out of
modern hardware. Finally, Kite does not compromise on consistency, availability or
programmability, as it provides sufficient primitives to implement any algorithm (consistency), does not interrupt its operation on a failure (availability), and offers the RC
API that programmers are already familiar with (programmability).
This item appears in the following Collection(s)

