200 likes | 445 Views
Dynamo. Kay Ousterhout. Goals. Small files Always writeable Low latency Measured at 99.9 th percentile. Non-goals. Untrusted nodes Relational schema Hierarchical namespace. Key-Value Store. Big (Old?) Ideas. Replication: Store every object on N nodes. N = 3. Consistent Hashing.
E N D
Dynamo Kay Ousterhout
Goals • Small files • Always writeable • Low latency • Measured at 99.9th percentile
Non-goals • Untrusted nodes • Relational schema • Hierarchical namespace Key-Value Store
Consistent Hashing A B G Key C F E D
Consistent Hashing A H B G Key C F E D
Consistent Hashing + Virtual Nodes A H B G Key C F E D
Basic put() N = 3, W = 2 k:v ([G, 1]) A H k:v B G Coordinator C F E D
get() with Sloppy Quorum N = 3, W = 2, R = 2 k? A H k? B G k:v ([G, 1]) k:v ([G, 1]) Coordinator C F E D
Takeaway: Tunable! Change N,R,W for desired consistency, availability
Antientropy: Merkle Trees Node A Node B Hash of children Object hashes at leaves
More Ideas • Hinted handoff • Explicit join/leave mechanism (gossip-based) • Seed nodes • Local notion of failure
System Scope “…the system needs to have scalable and robust solutions for load balancing, membership and failure detection, failure recovery, replica synchronization, overload handling, state transfer, concurrency and job scheduling, request marshaling, request routing, system monitoring and alarming, and configuration management.”
Triggers • Client registers to be notified when key changes • Challenging with eventual consistency! • Solution: sloppy triggers
Setting N,R,W • …is annoying! • Can we auto-configure R? • What about W?
Supporting Multiple N,R,W • Different availability/consistency tradeoffs for each object • …without making multiple systems