Don’t ¡Se$le ¡for ¡Eventual : ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ Scalable ¡Causal ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Consistency ¡for ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Wide-‑Area ¡Storage ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡with ¡COPS ¡ Wya$ ¡Lloyd * ¡ ¡Michael ¡J. ¡Freedman * ¡ ¡ ¡Michael ¡Kaminsky † ¡ ¡ ¡ ¡David ¡G. ¡Andersen ‡ ¡ * Princeton, ¡ † Intel ¡Labs, ¡ ‡ CMU ¡
Wide-‑Area ¡Storage ¡ Stores: ¡ Stores: ¡ Stores: ¡ Status ¡Updates ¡ Posts ¡ Tweets ¡ Likes ¡ +1s ¡ Favorites ¡ Comments ¡ Comments ¡ Following ¡List ¡ Photos ¡ Photos ¡ Friends ¡List ¡ Circles ¡
Wide-‑Area ¡Storage ¡ Serves ¡Requests ¡Quickly ¡
Inside ¡the ¡Datacenter ¡ Web ¡Tier ¡ Storage ¡Tier ¡ A-‑F ¡ Remote ¡DC ¡ G-‑L ¡ Web ¡Tier ¡ Storage ¡Tier ¡ A-‑F ¡ G-‑L ¡ M-‑R ¡ M-‑R ¡ S-‑Z ¡ S-‑Z ¡
Desired ¡ProperXes: ¡ALPS ¡ • A vailability ¡ “Always ¡On” ¡ • L ow ¡Latency ¡ • P arXXon ¡Tolerance ¡ • S calability ¡
Scalability ¡ Increase ¡capacity ¡and ¡throughput ¡in ¡each ¡datacenter ¡ A-‑C ¡ A-‑Z ¡ A-‑Z ¡ A-‑F ¡ A-‑F ¡ A-‑L ¡ A-‑C ¡ A-‑L ¡ D-‑F ¡ G-‑L ¡ G-‑L ¡ M-‑Z ¡ M-‑Z ¡ D-‑F ¡ G-‑J ¡ M-‑R ¡ M-‑R ¡ G-‑J ¡ K-‑L ¡ S-‑Z ¡ K-‑L ¡ S-‑Z ¡ M-‑O ¡ M-‑O ¡ P-‑S ¡ P-‑S ¡ T-‑V ¡ T-‑V ¡ W-‑Z ¡ W-‑Z ¡
Desired ¡Property: ¡Consistency ¡ • Restricts ¡order/Xming ¡of ¡operaXons ¡ • Stronger ¡consistency: ¡ – Makes ¡programming ¡easier ¡ – Makes ¡user ¡experience ¡be$er ¡
Consistency ¡with ¡ALPS ¡ Strong ¡ Impossible ¡[Brewer00, ¡GilbertLynch02] ¡ SequenXal ¡ ¡ ¡ ¡ Impossible ¡[LiptonSandberg88, ¡AdyaWelch94] ¡ Causal ¡ ¡ ¡ ¡ ¡ ¡COPS ¡ ¡ ¡ ¡ ¡ ¡ Amazon ¡ ¡ ¡ ¡LinkedIn ¡ ¡ ¡Facebook/Apache ¡ Eventual ¡ ¡ ¡ ¡ Dynamo ¡ ¡ ¡Voldemort ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡Cassandra ¡
System ¡ A ¡ L ¡ P ¡ S ¡ Consistency ¡ Sca$er ¡ ✖ ¡ ✖ ¡ ✖ ¡ ✔ ¡ ✔ Strong ¡ Walter ¡ ✖ ¡ ✖ ¡ ✖ ¡ ? ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ PSI ¡+ ¡Txn ¡ COPS ¡ ✔ ¡ ✔ ¡ ✔ ¡ ✔ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ Causal+ ¡ Bayou ¡ ✔ ¡ ✔ ¡ ✔ ¡ ✖ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ Causal+ ¡ PNUTS ¡ ✔ ¡ ✔ ¡ ? ¡ ✔ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ Per-‑Key ¡Seq. ¡ Dynamo ¡ ✔ ¡ ✔ ¡ ✔ ¡ ✔ ¡ ✖ ¡ ¡ ¡ ¡ ¡ Eventual ¡
Causality ¡By ¡Example ¡ ¡ Causality ¡( ¡ ¡ ¡ ¡ ¡ ¡ ¡) ¡ ¡Remove ¡boss ¡from ¡ Friends ¡ Thread-‑of-‑ExecuXon ¡ ¡ ¡friends ¡group ¡ Boss Gets-‑From ¡ TransiXvity ¡ ¡Post ¡to ¡friends: ¡ New ¡Job! ¡ ¡ ¡“Time ¡for ¡a ¡new ¡job!” ¡ ¡Friend ¡reads ¡post ¡
Causality ¡Is ¡Useful ¡ For ¡Programmers: ¡ For ¡Users: ¡ Friends ¡ Photo ¡Upload ¡ Boss Add ¡to ¡album ¡ New ¡Job! ¡ Employment ¡Integrity ¡ ReferenXal ¡Integrity ¡
Conflicts ¡in ¡Causal ¡ K=1 ¡ K=1 ¡ K=1 ¡ K=2 ¡ K=2 ¡ K=2 ¡
Conflicts ¡in ¡Causal ¡ Causal ¡+ ¡Conflict ¡Handling ¡= ¡ Causal+ ¡ K=2 ¡ K=3 ¡ K=2 ¡ K=3 ¡ K=2 ¡ K=3 ¡
Previous ¡Causal+ ¡Systems ¡ • Bayou ¡‘94, ¡TACT ¡‘00, ¡PRACTI ¡‘06 ¡ – Log-‑exchange ¡based ¡ • Log ¡is ¡single ¡serializaXon ¡point ¡ – Implicitly ¡captures ¡and ¡enforces ¡causal ¡order ¡ – Limits ¡scalability ¡OR ¡ – No ¡cross-‑server ¡causality ¡
Scalability ¡Key ¡Idea ¡ • Dependency ¡metadata ¡explicitly ¡captures ¡causality ¡ • Distributed ¡verificaXons ¡replace ¡single ¡serializaXon ¡ – Delay ¡exposing ¡replicated ¡puts ¡unXl ¡all ¡ ¡ ¡ dependencies ¡are ¡saXsfied ¡in ¡the ¡datacenter ¡
COPS ¡ All ¡ Data ¡ Causal+ ¡ Local ¡Datacenter ¡ ReplicaXon ¡ All ¡ Data ¡ Client ¡Library ¡ All ¡ Data ¡
Get ¡ Local ¡Datacenter ¡ Client ¡Library ¡ get ¡
Put ¡ put ¡ put ¡ + ¡ aver ¡ ¡ = ¡ ordering ¡ metadata ¡ ? Local ¡Datacenter ¡ ? ¡ Client ¡Library ¡ put ¡ put_aver ¡ K:V ¡ ReplicaXon ¡Q ¡ put ¡ aver ¡
Dependencies ¡ • Dependencies ¡are ¡explicit ¡metadata ¡on ¡values ¡ • Library ¡tracks ¡and ¡a$aches ¡them ¡to ¡put_avers ¡
Dependencies ¡ • Dependencies ¡are ¡explicit ¡metadata ¡on ¡values ¡ • Library ¡tracks ¡and ¡a$aches ¡them ¡to ¡put_avers ¡ Client ¡1 ¡ put_aver(Key,Val,deps) ¡ put(Key, ¡Val) ¡ deps ¡ version ¡ . ¡. ¡. ¡ ¡ ¡ K version ¡ (Thread-‑Of-‑ExecuXon ¡Rule) ¡
Dependencies ¡ • Dependencies ¡are ¡explicit ¡metadata ¡on ¡values ¡ • Library ¡tracks ¡and ¡a$aches ¡them ¡to ¡put_avers ¡ Client ¡2 ¡ get(K) ¡ get(K) ¡ value,version,deps' value ¡ deps ¡ . ¡. ¡. ¡ ¡ ¡ K version ¡ L 337 ¡ deps' ¡ (Gets-‑From ¡Rule) ¡ L 337 ¡ M 195 ¡ ¡ (TransiXvity ¡Rule) ¡ M 195 ¡
Causal+ ¡ReplicaXon ¡ put_aver(K,V,deps) ¡ K:V, deps ¡ ReplicaXon ¡Q ¡ put ¡ aver ¡
Causal+ ¡ReplicaXon ¡ dep_check(L 337 ) ¡ put_aver(K,V,deps) ¡ K:V, deps ¡ deps ¡ ¡ ¡ L 337 ¡ M 195 ¡ ¡ Exposing ¡values ¡aver ¡ dep_checks ¡return ¡ ensures ¡causal+ ¡
Basic ¡COPS ¡Summary ¡ • Serve ¡operaXons ¡locally, ¡replicate ¡in ¡background ¡ – “Always ¡On” ¡ • ParXXon ¡keyspace ¡onto ¡many ¡nodes ¡ – Scalability ¡ • Control ¡replicaXon ¡with ¡dependencies ¡ – Causal+ ¡Consistency ¡
Gets ¡Aren’t ¡Enough ¡ My ¡ Remote ¡ You’re ¡ OperaXons ¡ Remote ¡ Datacenter ¡ Fired!! ¡ Progress ¡ Boss Remote ¡ Boss Boss Boss Progress ¡ New ¡Job! ¡ Remote ¡ Progress ¡ Portugal! ¡ Portugal! ¡ Boss New ¡Job! ¡ New ¡Job! ¡
Gets ¡Aren’t ¡Enough ¡ My ¡ Remote ¡ You’re ¡ OperaXons ¡ Datacenter ¡ Fired!! ¡ Boss Boss Boss Boss Boss Boss New ¡Job! ¡ Remote ¡ Progress ¡ Portugal! ¡ Portugal! ¡ New ¡Job! ¡ Boss New ¡Job! ¡ New ¡Job! ¡ Portugal! ¡ Portugal! ¡ Remote ¡ Progress ¡ Boss Remote ¡ Progress ¡
Get ¡TransacXons ¡ • Provide ¡consistent ¡view ¡of ¡mulXple ¡keys ¡ – Snapshot ¡of ¡visible ¡values ¡ • Keys ¡can ¡be ¡spread ¡across ¡many ¡servers ¡ • Takes ¡at ¡most ¡2 ¡parallel ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ rounds ¡of ¡gets ¡ Low ¡Latency ¡ • No ¡locks, ¡no ¡blocking ¡
Get ¡TransacXons ¡ My ¡ Remote ¡ OperaXons ¡ Remote ¡ Datacenter ¡ Progress ¡ Boss Could ¡Get ¡ Remote ¡ Boss Boss Boss Boss Boss Progress ¡ Boss Portugal! ¡ New ¡Job! ¡ Remote ¡ Boss Portugal! ¡ Progress ¡ Portugal! ¡ Portugal! ¡ New ¡Job! ¡ New ¡Job! ¡ Portugal! ¡ Boss Portugal! ¡ New ¡Job! ¡ Remote ¡ Progress ¡ Boss Portugal! ¡ Never ¡ Boss Boss Boss Remote ¡ New ¡Job! ¡ Portugal! ¡ Progress ¡
System ¡So ¡Far ¡ • ALPS ¡and ¡Causal+, ¡but ¡… ¡ • ProliferaXon ¡of ¡dependencies ¡reduces ¡efficiency ¡ – Results ¡in ¡lots ¡of ¡metadata ¡ – Requires ¡lots ¡of ¡verificaXon ¡ • We ¡need ¡to ¡reduce ¡metadata ¡and ¡dep_checks ¡ – Nearest ¡dependencies ¡ – Dependency ¡garbage ¡collecXon ¡
Many ¡Dependencies ¡ • Dependencies ¡grow ¡with ¡client ¡lifeXme ¡ Put ¡ Put ¡ Get ¡ Get ¡ Put ¡ Put ¡
Nearest ¡Dependencies ¡ • TransiXvely ¡capture ¡all ¡ordering ¡constraints ¡ ¡
The ¡Nearest ¡Are ¡Few ¡ • TransiXvely ¡capture ¡all ¡ordering ¡constraints ¡ ¡
Recommend
More recommend