This document summarizes Amazon's Dynamo key-value store system. Dynamo was designed to be highly available, scalable, and simple. It sacrifices strong consistency in favor of availability. Dynamo uses consistent hashing to partition data and handle node failures, vector clocks to reconcile divergent data versions, and sloppy quorums with hinted handoff to provide high availability during node failures or delays. The system was implemented in Java and uses techniques like consistent hashing, vector clocks, gossip protocols, and Merkle trees to achieve its goals.