Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CRDT 101
Search
Sergey Arkhipov
December 09, 2014
Programming
0
190
CRDT 101
Sergey Arkhipov
December 09, 2014
Tweet
Share
More Decks by Sergey Arkhipov
See All by Sergey Arkhipov
Fingerprinting
9seconds
0
140
Concurrency Models
9seconds
0
180
Probablistic Data Structures
9seconds
0
220
Own Mustache
9seconds
0
300
Daemonize
9seconds
0
280
Stuff That Works
9seconds
0
290
Evidence
9seconds
0
78
Redneck Monads
9seconds
1
85
Latency
9seconds
0
98
Other Decks in Programming
See All in Programming
5分で理解する SOLID 原則 #phpcon_nagoya
shogogg
1
410
SwiftUI移行のためのインプレッショントラッキング基盤の構築
kokihirokawa
0
170
クックパッド検索システム統合/Cookpad Search System Consolidation
giga811
0
140
オレを救った Cline を紹介する
codehex
15
14k
CloudNativePGを布教したい
nnaka2992
0
120
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
9
2.6k
複数のAWSアカウントから横断で 利用する Lambda Authorizer の作り方
tc3jp
0
130
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
14
4.8k
機能が複雑化しても 頼りになる FactoryBotの話
tamikof
1
240
未経験でSRE、はじめました! 組織を支える役割と軌跡
curekoshimizu
1
200
15分で学ぶDuckDBの可愛い使い方 DuckDBの最近の更新
notrogue
3
840
GoとPHPのインターフェイスの違い
shimabox
2
220
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
223
9.5k
Speed Design
sergeychernyshev
28
820
Faster Mobile Websites
deanohume
306
31k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Optimizing for Happiness
mojombo
377
70k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Raft: Consensus for Rubyists
vanstee
137
6.8k
Code Reviewing Like a Champion
maltzj
521
39k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Transcript
CRDT 101 Архипов Сергей @9seconds 10.12.2014
Наши проблемы ← CRDT ― Network ― RAM ― Persistent
storage ― CPU
90е ← CRDT Web Server Application Database
90е ← CRDT Web Server Application Database
2000: Load Balancing ← CRDT
2000: Load Balancing ← CRDT
2002: Replication ← CRDT
2004: Caching ← CRDT
2004: Caching ← CRDT
2006: Web 2.0 + Amazon = Sharding ← CRDT
2008: NoSQL ← CRDT
2010: MapReduce ← CRDT
2000: CAP ← CRDT ― Consistency ― Availability ― Partition
Tolerance
2009: CRDT ← CRDT
2009: CRDT ← CRDT
2009: CRDT ← CRDT
2009: CRDT ← CRDT
2009: CRDT ← CRDT
2009: CRDT ← CRDT
2009: CRDT ← CRDT CmRDT — Commutative Replicated Data Type
Assuming causal delivery of updates and method termination, any op-based object that satisfies the commutativity property for all concurrent updates, and whose delivery precondition is satisfied by causal delivery, is strong eventual consistent.
LWW-element-Set ← CRDT
LWW-element-Set ← CRDT tweet = { id: "3b6730f1-50c7-4fad-ac47-ba8c2efadfc1", timestamp: 1416757099,
user: "9seconds" message: "Test message" } def tweet_to_lww(tweet): return tweet["timestamp"], tweet
LWW-element-Set ← CRDT A R A R
LWW-element-Set ← CRDT A R A R (t1, a)
LWW-element-Set ← CRDT A R A R (t1, a) (t1,
a)
LWW-element-Set ← CRDT A R A R (t2, b) (t1,
a) (t1, a)
LWW-element-Set ← CRDT A R A R (t1, a) (t1,
a) (t2, b)
LWW-element-Set ← CRDT A R A R (t3, c) (t1,
a) (t1, a) (t2, b)
LWW-element-Set ← CRDT A R A R (t1, a) (t1,
a) (t2, b) (t3, c) (t2, b) (t2, b) (t4, c)
LWW-element-Set ← CRDT A R A R (t1, a) (t1,
a) (t2, b) (t3, c) (t2, b) (t2, b) (t4, c) (t4, c)
LWW-element-Set ← CRDT A R A R (t1, a) (t1,
a) (t2, b) (t3, c) (t2, b) (t2, b) (t4, c) (t4, c) Synchronizer (SoundCloud Roshi)
LWW-element-Set ← CRDT A R (t1, a) (t1, a) (t3,
c) (t2, b) (t2, b) (t4, c) (t4, c)
LWW-element-Set ← CRDT A R (t1, a) (t3, c) (t2,
b) (t4, c)
LWW-element-Set ← CRDT (t1, a) (t2, b)
LWW-element-Set ← CRDT A R A R (t1, a) (t1,
a) (t2, b) (t3, c) (t2, b) (t4, c) (t4, c) Synchronizer (SoundCloud Roshi) (t3, c)
Many CRDTs! ← CRDT ― Op-based Counter ― G-Counter ―
State-based PN Counter ― LWW-Register ― MV-Register ― G-Set ― 2P-Set ― LWW-element-Set ― PN-Set ― OR Set ― Add-only monotonic DAG ― Add-Remove Partial Order data type ― RGA ― RHA ― TreeDoc ― Logoot ― WOOT ― WOOTH
(Not) Many implementations ← CRDT ― Apache Cassandra ― Apache
HBase ― Basho Riak ― SoundCloud Roshi ― Akka CRDT
Q/A ← CRDT @9seconds https://speakerdeck.com/9seconds/crdt-101