SlideShare ist ein Scribd-Unternehmen logo
1 von 124
Downloaden Sie, um offline zu lesen
Guaranteeing Consensus in
Distributed Systems with CRDTs
Sun-Li Beatteay
Paper: http://bit.ly/2011-crdt-paper
@SunnyPaxos
About Me
● Software Engineer @
DigitalOcean
● Technical Writer:
@SunnyB on Medium
● GitHub: sunny-b
● Twitter: @SunnyPaxos
@SunnyPaxos
@SunnyPaxos
CRDTs often explained using dense language
and complicated proofs
@SunnyPaxos
Explaining CRDTs in simple terms
@SunnyPaxos
But first, some history
@SunnyPaxos
Consensus in Distributed Systems
Image Credit: Shubheksha@SunnyPaxos
Image Credit: Martin Kleppmann@SunnyPaxos
@SunnyPaxos
Eventual
Consistency
@SunnyPaxos
Image Credit: Martin Kleppmann@SunnyPaxos
@SunnyPaxos
Possible consensus algorithms?
@SunnyPaxos
Possible consensus algorithms
● Manual override conflicts/rollback (Git)
@SunnyPaxos
Possible consensus algorithms
● Manual override conflicts/rollback (Git)
● Pick one set of changes, throw out the rest (Blockchain)
@SunnyPaxos
Possible consensus algorithms
● Manual override conflicts/rollback (Git)
● Pick one set of changes, throw out the rest (Blockchain)
● Dynamically merge conflicts based on user intention
@SunnyPaxos
Image Credit: Martin Kleppmann
@SunnyPaxos
Algorithms for (dynamic) convergence
Image Credit: Martin Kleppmann
@SunnyPaxos
Image Credit: Martin Kleppmann@SunnyPaxos
Algorithms for (dynamic) convergence
Image Credit: Martin Kleppmann
@SunnyPaxos
What are CRDTs?
@SunnyPaxos
CRDT -> “Data Types”
● Objects that store and
model data
● Any data structure can
be a CRDT
@SunnyPaxos
CRDT -> “Replicated”
● Designed for decentralization
● Maintain the same state
● Async communication
@SunnyPaxos
CRDT -> “Conflict-free”
● All updates merge without conflict
● No need for central authority
@SunnyPaxos
Types of CRDT communication
@SunnyPaxos
State-Based CRDT (Convergent)
@SunnyPaxos
State-Based CRDT (Convergent)
@SunnyPaxos
Node 1
State: 4
Node 1 Node 2
State: 4
Add(1)
State-Based CRDT (Convergent)
@SunnyPaxos
Node 1
State: 5
Node 1 Node 2
State: 4
Add(1) 5
State-Based CRDT (Convergent)
@SunnyPaxos
Node 1
State: 5
Node 1 Node 2
State: 5
Add(1) 5
Operation-Based CRDT (Commutative)
@SunnyPaxos
@SunnyPaxos
Node 1
State: 4
Node 1 Node 2
State: 4
Add(1)
Operation-Based CRDT (Commutative)
@SunnyPaxos
Node 1
State: 5
Node 1 Node 2
State: 4
Add(1) Add(1)
Operation-Based CRDT (Commutative)
@SunnyPaxos
Node 1
State: 5
Node 1 Node 2
State: 5
Add(1) Add(1)
Operation-Based CRDT (Commutative)
How do CRDTs guarantee
consensus?
@SunnyPaxos
Strong Eventual Consistency (SEC)
@SunnyPaxos
To understand SEC, we
need to know EC
@SunnyPaxos
Eventual Consistency
@SunnyPaxos
Eventual Consistency
@SunnyPaxos
Eventual Consistency
@SunnyPaxos
Eventual Consistency
Node 1 Node 2
State: {}State: {}
@SunnyPaxos
Eventual Consistency
Node 1 Node 2
State: {}1. Add(“a”)
State: {“a”}
@SunnyPaxos
Eventual Consistency
Node 1 Node 2
State: {}1. Add(“a”)
2. Add(“b”)
State: {“a”, “b”}
@SunnyPaxos
Eventual Consistency
Node 1 Node 2
State: {}1. Add(“a”)
2. Add(“b”)
3. Remove(“a”)
State: {“b”}
@SunnyPaxos
Eventual Consistency
Node 1 Node 2
State: {}1. Add(“a”)
2. Add(“b”)
3. Remove(“a”)
4. Remove(“b”)
State: {}
@SunnyPaxos
Eventual Consistency
Node 1 Node 2
1. Remove(“a”)
State: {}
1. Add(“a”)
2. Add(“b”)
3. Remove(“a”)
4. Remove(“b”)
State: {}
@SunnyPaxos
Eventual Consistency
Node 1 Node 2
1. Remove(“a”)
2. Add(“a”)
State: {“a”}
1. Add(“a”)
2. Add(“b”)
3. Remove(“a”)
4. Remove(“b”)
State: {}
@SunnyPaxos
Eventual Consistency
Node 1 Node 2
1. Remove(“a”)
2. Add(“a”)
3. Add(“b”)
State: {“a”, “b”}
1. Add(“a”)
2. Add(“b”)
3. Remove(“a”)
4. Remove(“b”)
State: {}
@SunnyPaxos
Eventual Consistency
Node 1 Node 2
1. Remove(“a”)
2. Add(“a”)
3. Add(“b”)
4. Remove(“b”)
State: {“a”}
1. Add(“a”)
2. Add(“b”)
3. Remove(“a”)
4. Remove(“b”)
State: {}
@SunnyPaxos
Eventual Consistency
Node 1 Node 2
Consensus needed@SunnyPaxos
1. Add(“a”)
2. Add(“b”)
3. Remove(“a”)
4. Remove(“b”)
State: {}
1. Remove(“a”)
2. Add(“a”)
3. Add(“b”)
4. Remove(“b”)
State: {“a”}
@SunnyPaxos
@SunnyPaxos
Strong Eventual Consistency
All replicas that have seen the same set of updates will
have the same state.
@SunnyPaxos
1. Add(“a”)
2. Add(“b”)
3. Remove(“a”)
4. Remove(“b”)
State: {}
Strong Eventual Consistency
Node 1 Node 2
@SunnyPaxos
=
1. Remove(“b”)
2. Add(“a”)
3. Remove(“a”)
4. Add(“b”)
State: {}
@SunnyPaxos
@SunnyPaxos
In order to learn how CRDTs
guarantee SEC...
@SunnyPaxos
Let’s build a CRDT!
@SunnyPaxos
Building a distributed Set
● A list of elements where each element is unique
@SunnyPaxos
Building a distributed Set
● A list of elements where each element is unique
● Operations
○ Query
○ Add
○ Remove
@SunnyPaxos
Building a distributed Set
● A list of elements where each element is unique
● Operations
○ Query
○ Add
○ Remove
{ 1, 2, 3, … }
@SunnyPaxos
● Operation-based replication (better network
scalability)
Building a distributed Set
@SunnyPaxos
How do we ensure SEC?
@SunnyPaxos
@SunnyPaxos
● “...semilattice property is SEC.”
@SunnyPaxos
@SunnyPaxos
@SunnyPaxos
@SunnyPaxos
@SunnyPaxos
@SunnyPaxos
Three Requirements for SEC
@SunnyPaxos
Three Requirements for SEC
● Commutativity
A given set of operations will always result in same state, no matter their
order.
Example: 1 + 5 = 5 + 1
@SunnyPaxos
Three Requirements for SEC
● Commutativity (1 + 5 = 5 + 1)
● Idempotency
Duplicate operations result in the same state
Example: x * 1 = x
@SunnyPaxos
● Commutativity (1 + 5 = 5 + 1)
● Idempotency (x * 1 = x)
● Associativity or Causality
Three Requirements for SEC
@SunnyPaxos
Associativity (State-based)
CRDTs merge to the same state no matter how they
are grouped.
@SunnyPaxos
Causality (Operation-based)
● Operations are received in the correct Cause-Effect order
● Example: Create must come before Remove
@SunnyPaxos
Three Requirements for consensus
● Commutativity (1 + 5 = 5 + 1)
● Idempotency (x * 1 = x)
● Associativity or Causality
○ Associativity -> State-based replication
○ Causality -> Operation-based replication
@SunnyPaxos
Back to our CRDT
@SunnyPaxos
Three Requirements for SEC
● Commutativity?
@SunnyPaxos
{1, 2, 3}{1, 2, 3}
Node 1 Node 2Commutativity
@SunnyPaxos
{1, 2, 3}{1, 2, 3}
Node 1 Node 2
Remove(2)Add(4)
Commutativity
{1, 2, 3, 4} {1, 3}
@SunnyPaxos
{1, 2, 3}{1, 2, 3}
Node 1 Node 2
Remove(2)Add(4)
Commutativity
{1, 2, 3, 4} {1, 3}
Add(4)Remove(2)
{1, 3, 4} {1, 3, 4}
@SunnyPaxos
{1, 2, 3}{1, 2, 3}
Node 1 Node 2
Remove(2)Add(4)
Commutativity
{1, 2, 3, 4} {1, 3}
Add(4)Remove(2)
{1, 3, 4} {1, 3, 4}
@SunnyPaxos
Three Requirements for SEC
● Commutativity
● Idempotency?
@SunnyPaxos
{1, 2, 3}{1, 2, 3}
Node 1 Node 2Idempotency
@SunnyPaxos
{1, 2, 3}{1, 2, 3}
Node 1 Node 2
Remove(2)Remove(2)
Idempotency
{1, 3} {1, 3}
@SunnyPaxos
{1, 2, 3}{1, 2, 3}
Node 1 Node 2
Remove(2)Remove(2)
Idempotency
{1, 3} {1, 3}
Remove(2)Remove(2)
{1, 3} {1, 3}
@SunnyPaxos
{1, 2, 3}{1, 2, 3}
Node 1 Node 2
Remove(2)Remove(2)
Idempotency
{1, 3} {1, 3}
Remove(2)Remove(2)
{1, 3} {1, 3}
@SunnyPaxos
Three Requirements for SEC
● Commutativity
● Idempotency
● Casuality?
@SunnyPaxos
Node 1 Node 2
@SunnyPaxos
Causality
1. Remove(“b”)
2. Add(“a”)
3. Remove(“a”)
4. Add(“b”)
State: {“b”}
1. Add(“a”)
2. Add(“b”)
3. Remove(“a”)
4. Remove(“b”)
State: {}
Node 1 Node 2
@SunnyPaxos
Causality
1. Remove(“b”)
2. Add(“a”)
3. Remove(“a”)
4. Add(“b”)
State: {“b”}
1. Add(“a”)
2. Add(“b”)
3. Remove(“a”)
4. Remove(“b”)
State: {}
Adding Lamport Clocks and Version
Vectors
@SunnyPaxos
Lamport Clocks
A: 0
Node A
NodeID Timestamp
@SunnyPaxos
Lamport Clocks
A: 1
Node A
Add(5)
@SunnyPaxos
Lamport Clocks
A: 2
Node A
Remove(5)
@SunnyPaxos
Version Vector
Node A Node B
@SunnyPaxos
Node Count
A 0
B 0
Node Count
A 0
B 0
Version Vector
Node A Node B
@SunnyPaxos
Node Count
A 1
B 0
Node Count
A 0
B 0
Add(1)
NodeID: A
Count: 1
Version Vector
Node A Node B
@SunnyPaxos
Node Count
A 1
B 0
Node Count
A 1
B 0
Add(1)
NodeID: A
Count: 1
{ 10, 11, ... }
So instead of a Set like this...
@SunnyPaxos
{ (10, {A: 1}), (11, {B: 1}), ... }
...it will look like this
@SunnyPaxos
{ (10, {A: 1}), (11, {B: 1}), ... }
@SunnyPaxos
Element Value
...it will look like this
{ (10, {A: 1}), (11, {B: 1}), ... }
@SunnyPaxos
Element Value Lamport
Timestamp
...it will look like this
Node A
Node B Node C
A: 0
B: 0
Version Vector
Node Count
A 0
B 0
@SunnyPaxos
State: {}
Node A
Node B Node C
Add(5)
- NodeID: A
- Counter: 1A: 1
B: 0
Version Vector
Node Count
A 0
B 0
@SunnyPaxos
State: { (5, {A: 1} }
Node A
Node B Node C
Remove(5)
- NodeID: B
- Counter: 1
A: 1
B: 1
Add(5)
- NodeID: A
- Counter: 1 Version Vector
Node Count
A 0
B 0
@SunnyPaxos
State: {}
Node A
Node B Node C
Add(5)
- NodeID: A
- Counter: 1
Remove(5)
- NodeID: B
- Counter: 1
Version Vector
Node Count
A 0
B 0
A: 1
B: 1
@SunnyPaxos
State: {}
Node A
Node B Node C
Version Vector
Node Count
A 0
B 0
Remove(5)
- NodeID: B
- Counter: 1
Add(5)
- NodeID: A
- Counter: 1
A: 1
B: 1
@SunnyPaxos
State: {}
Node C
Version Vector
Node Count
A 0
B 0
Remove(5)
- NodeID: B
- Counter: 1
@SunnyPaxos
Node C
Version Vector
Node Count
A 0
B 0
Remove(5)
- NodeID: B
- Counter: 1
@SunnyPaxos
Node C
Version Vector
Node Count
A 0
B 0
Remove(5)
- NodeID: B
- Counter: 1
@SunnyPaxos
Node C
Version Vector
Node Count
A 0
B 0
Remove(5)
- NodeID: B
- Counter: 1
(5, {A: 1})
@SunnyPaxos
Node C
Version Vector
Node Count
A 0
B 0
Remove(5)
- NodeID: B
- Counter: 1
(5, {A: 1})
@SunnyPaxos
Node C
Version Vector
Node Count
A 1
B 0
Remove(5)
- NodeID: B
- Counter: 1
(5, {A: 1})
@SunnyPaxos
Node C
Version Vector
Node Count
A 1
B 1
Remove(5)
- NodeID: B
- Counter: 1
(5, {A: 1})
@SunnyPaxos
Node A
Node B Node C
Version Vector
Node Count
A 1
B 1
Add(5)
- NodeID: A
- Counter: 1
A: 1
B: 1
@SunnyPaxos
State: {}
Node A
Node B Node C
Version Vector
Node Count
A 1
B 1
Add(5)
- NodeID: A
- Counter: 1
A: 1
B: 1
@SunnyPaxos
State: {}
Node A
Node B Node C
Version Vector
Node Count
A 1
B 1
Add(5)
- NodeID: A
- Counter: 1
A: 1
B: 1
@SunnyPaxos
State: {}
Node A
Node B Node C
Version Vector
Node Count
A 1
B 1
A: 1
B: 1
Consensus State: {}
@SunnyPaxos
Causality achieved!
@SunnyPaxos
Commutativity
+ Idempotency
+ Causality
= Strong Eventual Consistency!
@SunnyPaxos
CRDT Drawbacks
● Scale
○ Inefficient memory
● Network
○ Heavy traffic
○ Causal delivery “required”
● Effort
○ Lack of available libraries
@SunnyPaxos
CRDTs in the Wild
@SunnyPaxos
CRDTs in the Wild
@SunnyPaxos
CRDTs in a nutshell
● Decentralized data store
● Strong Eventual Consistency
● 3 requirements for SEC
○ Commutativity
○ Idempotency
○ Associativity/Causality
● Any data structure can be a CRDT (w/ enough effort)
@SunnyPaxos
References
Papers
● http://bit.ly/2011-crdt-paper
● http://bit.ly/crdt-types-paper
Videos
● http://bit.ly/kleppman-crdt-talk
● http://bit.ly/shapiro-crdt-talk
@SunnyPaxos @SunnyB http://www.sunli.co
Thanks!

Weitere ähnliche Inhalte

Was ist angesagt?

Computer notes - singleRightRotation
Computer notes   - singleRightRotationComputer notes   - singleRightRotation
Computer notes - singleRightRotation
ecomputernotes
 
computer notes - Data Structures - 21
computer notes - Data Structures - 21computer notes - Data Structures - 21
computer notes - Data Structures - 21
ecomputernotes
 

Was ist angesagt? (20)

Deep Convolutional GANs - meaning of latent space
Deep Convolutional GANs - meaning of latent spaceDeep Convolutional GANs - meaning of latent space
Deep Convolutional GANs - meaning of latent space
 
Acunu Analytics: Simpler Real-Time Cassandra Apps
Acunu Analytics: Simpler Real-Time Cassandra AppsAcunu Analytics: Simpler Real-Time Cassandra Apps
Acunu Analytics: Simpler Real-Time Cassandra Apps
 
Certified Reasoning for Automated Verification
Certified Reasoning for Automated VerificationCertified Reasoning for Automated Verification
Certified Reasoning for Automated Verification
 
Chart parsing with features
Chart parsing with featuresChart parsing with features
Chart parsing with features
 
Access pattern of tags
Access pattern of tagsAccess pattern of tags
Access pattern of tags
 
쉽게 설명하는 GAN (What is this? Gum? It's GAN.)
쉽게 설명하는 GAN (What is this? Gum? It's GAN.)쉽게 설명하는 GAN (What is this? Gum? It's GAN.)
쉽게 설명하는 GAN (What is this? Gum? It's GAN.)
 
Dealing with combinatorial explosions and boring tests
Dealing with combinatorial explosions and boring testsDealing with combinatorial explosions and boring tests
Dealing with combinatorial explosions and boring tests
 
Dataframes in Spark - Data Analysts' perspective
Dataframes in Spark - Data Analysts' perspectiveDataframes in Spark - Data Analysts' perspective
Dataframes in Spark - Data Analysts' perspective
 
Apache Spark Data intensive processing in practice
Apache Spark Data intensive processing in practice Apache Spark Data intensive processing in practice
Apache Spark Data intensive processing in practice
 
Computer notes - singleRightRotation
Computer notes   - singleRightRotationComputer notes   - singleRightRotation
Computer notes - singleRightRotation
 
Engineering Fast Indexes for Big-Data Applications: Spark Summit East talk by...
Engineering Fast Indexes for Big-Data Applications: Spark Summit East talk by...Engineering Fast Indexes for Big-Data Applications: Spark Summit East talk by...
Engineering Fast Indexes for Big-Data Applications: Spark Summit East talk by...
 
Scaling up data science applications
Scaling up data science applicationsScaling up data science applications
Scaling up data science applications
 
Wepwhacker !
Wepwhacker !Wepwhacker !
Wepwhacker !
 
Fast, stable and scalable true radix sorting with Matt Dowle at useR! Aalborg
Fast, stable and scalable true radix sorting with Matt Dowle at useR! AalborgFast, stable and scalable true radix sorting with Matt Dowle at useR! Aalborg
Fast, stable and scalable true radix sorting with Matt Dowle at useR! Aalborg
 
computer notes - Data Structures - 21
computer notes - Data Structures - 21computer notes - Data Structures - 21
computer notes - Data Structures - 21
 
Heaps
HeapsHeaps
Heaps
 
Spark_Documentation_Template1
Spark_Documentation_Template1Spark_Documentation_Template1
Spark_Documentation_Template1
 
Time Series Analysis for Network Secruity
Time Series Analysis for Network SecruityTime Series Analysis for Network Secruity
Time Series Analysis for Network Secruity
 
Apply Hammer Directly to Thumb; Avoiding Apache Spark and Cassandra AntiPatt...
 Apply Hammer Directly to Thumb; Avoiding Apache Spark and Cassandra AntiPatt... Apply Hammer Directly to Thumb; Avoiding Apache Spark and Cassandra AntiPatt...
Apply Hammer Directly to Thumb; Avoiding Apache Spark and Cassandra AntiPatt...
 
R and cpp
R and cppR and cpp
R and cpp
 

Ähnlich wie Guaranteeing Consensus in Distriubuted Systems with CRDTs

4-Regular expression to Deterministic Finite Automata (Direct method)-05-05-2...
4-Regular expression to Deterministic Finite Automata (Direct method)-05-05-2...4-Regular expression to Deterministic Finite Automata (Direct method)-05-05-2...
4-Regular expression to Deterministic Finite Automata (Direct method)-05-05-2...
venkatapranaykumarGa
 
Storm - As deep into real-time data processing as you can get in 30 minutes.
Storm - As deep into real-time data processing as you can get in 30 minutes.Storm - As deep into real-time data processing as you can get in 30 minutes.
Storm - As deep into real-time data processing as you can get in 30 minutes.
Dan Lynn
 
Orthogonal Functional Architecture
Orthogonal Functional ArchitectureOrthogonal Functional Architecture
Orthogonal Functional Architecture
John De Goes
 
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 2
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 2ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 2
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 2
zukun
 

Ähnlich wie Guaranteeing Consensus in Distriubuted Systems with CRDTs (20)

4-Regular expression to Deterministic Finite Automata (Direct method)-05-05-2...
4-Regular expression to Deterministic Finite Automata (Direct method)-05-05-2...4-Regular expression to Deterministic Finite Automata (Direct method)-05-05-2...
4-Regular expression to Deterministic Finite Automata (Direct method)-05-05-2...
 
Kyo - Functional Scala 2023.pdf
Kyo - Functional Scala 2023.pdfKyo - Functional Scala 2023.pdf
Kyo - Functional Scala 2023.pdf
 
Distributed Query Processing
Distributed Query ProcessingDistributed Query Processing
Distributed Query Processing
 
Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
 Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at... Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
Processing large-scale graphs with Google(TM) Pregel by MICHAEL HACKSTEIN at...
 
Consistency without Consensus: CRDTs in Production at SoundCloud
Consistency without Consensus: CRDTs in Production at SoundCloudConsistency without Consensus: CRDTs in Production at SoundCloud
Consistency without Consensus: CRDTs in Production at SoundCloud
 
How Pony ORM translates Python generators to SQL queries
How Pony ORM translates Python generators to SQL queriesHow Pony ORM translates Python generators to SQL queries
How Pony ORM translates Python generators to SQL queries
 
Storm - As deep into real-time data processing as you can get in 30 minutes.
Storm - As deep into real-time data processing as you can get in 30 minutes.Storm - As deep into real-time data processing as you can get in 30 minutes.
Storm - As deep into real-time data processing as you can get in 30 minutes.
 
Spark3
Spark3Spark3
Spark3
 
Software engineering
Software engineeringSoftware engineering
Software engineering
 
Oct27
Oct27Oct27
Oct27
 
視覚化とSwiftのタイプについて
視覚化とSwiftのタイプについて視覚化とSwiftのタイプについて
視覚化とSwiftのタイプについて
 
Dsoop (co 221) 1
Dsoop (co 221) 1Dsoop (co 221) 1
Dsoop (co 221) 1
 
Orthogonal Functional Architecture
Orthogonal Functional ArchitectureOrthogonal Functional Architecture
Orthogonal Functional Architecture
 
L7 pointers
L7 pointersL7 pointers
L7 pointers
 
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 2
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 2ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 2
ECCV2008: MAP Estimation Algorithms in Computer Vision - Part 2
 
03
0303
03
 
Laziness, trampolines, monoids and other functional amenities: this is not yo...
Laziness, trampolines, monoids and other functional amenities: this is not yo...Laziness, trampolines, monoids and other functional amenities: this is not yo...
Laziness, trampolines, monoids and other functional amenities: this is not yo...
 
Datastage real time scenario
Datastage real time scenarioDatastage real time scenario
Datastage real time scenario
 
Buiilding reactive distributed systems with Akka
Buiilding reactive distributed systems with AkkaBuiilding reactive distributed systems with Akka
Buiilding reactive distributed systems with Akka
 
COCOA: Communication-Efficient Coordinate Ascent
COCOA: Communication-Efficient Coordinate AscentCOCOA: Communication-Efficient Coordinate Ascent
COCOA: Communication-Efficient Coordinate Ascent
 

Kürzlich hochgeladen

Call Girls in Prashant Vihar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Prashant Vihar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Prashant Vihar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Prashant Vihar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
nilamkumrai
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
imonikaupta
 
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
@Chandigarh #call #Girls 9053900678 @Call #Girls in @Punjab 9053900678
 

Kürzlich hochgeladen (20)

Enjoy Night⚡Call Girls Samalka Delhi >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Samalka Delhi >༒8448380779 Escort ServiceEnjoy Night⚡Call Girls Samalka Delhi >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Samalka Delhi >༒8448380779 Escort Service
 
Call Girls in Prashant Vihar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Prashant Vihar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort ServiceCall Girls in Prashant Vihar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
Call Girls in Prashant Vihar, Delhi 💯 Call Us 🔝9953056974 🔝 Escort Service
 
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl ServiceRussian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
 
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...
(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...
 
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
 
Russian Call Girls in %(+971524965298 )# Call Girls in Dubai
Russian Call Girls in %(+971524965298  )#  Call Girls in DubaiRussian Call Girls in %(+971524965298  )#  Call Girls in Dubai
Russian Call Girls in %(+971524965298 )# Call Girls in Dubai
 
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
 
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
WhatsApp 📞 8448380779 ✅Call Girls In Mamura Sector 66 ( Noida)
 
VVVIP Call Girls In Connaught Place ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...
VVVIP Call Girls In Connaught Place ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...VVVIP Call Girls In Connaught Place ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...
VVVIP Call Girls In Connaught Place ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...
 
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting  High Prof...
VIP Model Call Girls Hadapsar ( Pune ) Call ON 9905417584 Starting High Prof...
 
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
VVIP Pune Call Girls Sinhagad WhatSapp Number 8005736733 With Elite Staff And...
 
Al Barsha Night Partner +0567686026 Call Girls Dubai
Al Barsha Night Partner +0567686026 Call Girls  DubaiAl Barsha Night Partner +0567686026 Call Girls  Dubai
Al Barsha Night Partner +0567686026 Call Girls Dubai
 
Busty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort Service
Busty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort ServiceBusty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort Service
Busty Desi⚡Call Girls in Vasundhara Ghaziabad >༒8448380779 Escort Service
 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
 
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
𓀤Call On 7877925207 𓀤 Ahmedguda Call Girls Hot Model With Sexy Bhabi Ready Fo...
 
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
 
Nanded City ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready ...
Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...
Nanded City ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready ...
 
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
6.High Profile Call Girls In Punjab +919053900678 Punjab Call GirlHigh Profil...
 

Guaranteeing Consensus in Distriubuted Systems with CRDTs