interviewpath
  • 0day streak
  • 10total XP
  • Level 1

Dynamo: Amazon's Highly Available Key-value Store

Giuseppe DeCandia, Deniz Hastorun, Madan Jampani, Gunavardhan Kakulapati, Avinash Lakshman, Alex Pilchin, Swaminathan Sivasubramanian, Peter Vosshall, Werner Vogels. SOSP 2007, 2007.

Open the paper(opens in a new tab)Planning estimate 5 h (editable through its topic)

Who should read it

Core for distributed-systems, storage and cloud-research roles: it is the canonical example of choosing availability over consistency and of combining many classic techniques into one production system. Read Sections 2 and 4 closely and Section 6 critically as production evidence. If you target consensus-based systems only, an awareness-level read for contrast with Raft is enough; the specific measurements are dated and are not a reason to read it.

Study objectives

  • Explain each technique in the paper’s summary table (consistent hashing, vector clocks, sloppy quorums with hinted handoff, Merkle-tree anti-entropy, gossip membership) and the problem it addresses.
  • Explain what consistency Dynamo provides, what N, R and W control, and why sloppy quorums break quorum intersection.
  • Trace a get and a put during a failure, including where divergent versions arise and who reconciles them.
  • Read the production measurements as empirical evidence with stated and unstated caveats.

Prerequisites

Main concepts to understand

  • Always-writable design with conflict resolution at read time by the application
  • Service-level objectives defined at the 99.9th percentile rather than the mean
  • Consistent hashing with virtual nodes and preference lists
  • Configurable N, R and W with sloppy quorums and hinted handoff
  • Vector clocks to capture causality and expose concurrent versions
  • Merkle-tree anti-entropy for replica synchronization
  • Gossip-based membership and local failure detection

What to inspect in the evaluation

  • Evidence type: production measurements from one company’s services over a specific period, not controlled experiments; nothing can be reproduced from the paper alone.
  • Latency (Section 6.1): average and 99.9th-percentile read and write latencies over time, and the effect of buffered writes; note what durability is traded for the latency gain.
  • Load balance (Section 6.2): comparison of partitioning strategies using a measure of out-of-balance nodes; check how load was measured and over which intervals.
  • Divergent versions (Section 6.3): how often reads saw more than one version; the paper states that detailed data on the consistency impact of failures is out of scope and that some causes are not discussed in detail.
  • Missing baselines: there is no comparison with a strongly consistent design under the same workload; consider what such a comparison would need.
  • Configuration dependence: results depend on the chosen N, R and W, the hardware, the workloads and the failure rates of that environment.

Guarantees versus empirical results

Correctness or design arguments

  • Eventual consistency: once updates stop, replicas converge through hinted handoff and anti-entropy (design argument, no proof).
  • Vector clocks correctly classify two versions as causally ordered or concurrent (a known property of vector clocks applied here).
  • With strict quorums, R + W > N makes read and write sets overlap; with sloppy quorums during failures that overlap is not guaranteed.
  • Consistent hashing moves only the keys of affected ranges when nodes join or leave (design property).

Empirical results (depend on setup)

  • Production 99.9th-percentile read and write latencies met the services’ targets during the measured period.
  • Buffered writes lowered tail latency at some durability risk.
  • The final partitioning strategy gave better load balance and operational properties than earlier strategies.
  • Most reads in the measured period saw a single version, and divergence was attributed mainly to concurrent writers rather than failures.

Reading plan

  1. Pass 1 (30 minutes): abstract, Section 2 (requirements, SLAs, design considerations), the techniques summary table and the conclusion.
  2. Pass 2 (2 hours): all of Section 4 with a sketch of the ring, preference list and one failure scenario; then Section 6 with each figure annotated by what it measures.
  3. Pass 3 (2–3 hours, research roles): compare with Raft and the 6.5840 linearizability lecture, and write which Dynamo claims you could test with a fault-injection experiment and how.

Discussion prompts

  • Which application-level conflict-resolution strategies are reasonable (merge, last-writer-wins), and which anomalies does each allow?
  • Why define latency targets at the 99.9th percentile, and how does that shape choices such as request coordination?
  • With R + W > N, construct an execution in which a read still misses the latest acknowledged write.
  • Which parts of Dynamo’s design survive in today’s systems, and which were replaced by stronger consistency?
  • How would you evaluate the consistency cost of an always-writable store in a research paper today?

Related topics

Your structured notes

The guide above is an original annotation; write your own reading of the paper here.

Which business and technical requirements pushed the design toward availability over consistency?

What does Dynamo assume about trust (a non-hostile environment), scale, object sizes and applications’ ability to merge versions?

Walk through a put and a get with N, R and W, including hinted handoff and reconciliation.

The techniques existed before; what is the contribution of combining them and reporting production experience?

Which figures and statistics support each claim, over which period and workload?

What, if anything, is Dynamo compared against, and which comparison would you want?

Which design alternatives were compared, such as partitioning strategies or client- versus server-driven coordination?

What does the paper not quantify (consistency impact of failures, conflict-resolution burden on developers)?

Which mechanisms would you build first in a prototype, and how would you test convergence?

How did later systems revisit Dynamo’s choices, and which consistency models did they adopt?