Подробно о том, как causal consistency реализовано в mongodb /...

21
Implementation of Cluster-wide Causal Consistency in

Upload: ontico

Post on 22-Jan-2018

64 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Implementation of

Cluster-wide Causal

Consistency in

Page 2: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

- What is causal consistency- Academics view on Causal Consistency- MongoDB architecture- Causal Consistency building blocks- Making Causal Consistency secure- Making Causal Consistency fast- Making Causal Consistency reliable- Causal consistency for end-users

Outline

Page 3: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)
Page 4: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Client-side properties of causal consistency

- Read your writes

- Writes follow reads

- Monotonic reads

- Monotonic writes

Page 5: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Implementing with a non causally consistent system- Single server systems are causally consistent

- Read and write from the same node

- Add an application logic to handle the scenarios that have to be causally consistent

Page 6: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)
Page 7: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Ordering of Events in Distributed System

Process P Process Q Process R

q2: <C2> = 11

p1

r1: <C3> = 11

q1

<C3> = 0<C1> = 10 <C2> = 10

r2: <C3> = 12

q3

Page 8: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Server-side causal consistency

Causal consistency is a partial order of events in a distributed system. If an event A causes another event B, then causal consistency provides an assurance that each other process of the system observes event A before observing event B. If an event A is not causally related to an event B then they are concurrent.

Page 9: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

System’s Architecture

Page 10: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Gossiping clusterTime

ClusterTime: {uint64}

Timestamp(1495470881, 6)

Page 11: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Ticking clusterTime

{ts: 6} ...

{ts: 5} ...

{ts: 11} ...

insert({x:1}, clusterTime: 4)

<clusterTime>: 6

<Wall clock>: 11

Page 12: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Reporting operationTime

insert({x:1})

{ts: 11} ...

{ts: 5} ...

{ok:1}, { operationTime: 12} {ts: 12} ...

<clusterTime>: 11

<Wall clock>: 11

Page 13: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Waiting for afterClusterTime

find({x:1}, afterClusterTime: {10},

clusterTime: {15})

{ts: 6} ...

{ts: 5} ...

{x:1}, { operationTime: {11}} {ts: 11} ...

Page 14: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Breaking clusterTime

{ts: Timestamp(1495470881, 6), term: 1},

...

{ts: Timestamp(1495470881, 5), term: 1},

...

{Timestamp(0xFFFFFFFF, 0xFFFFFFFF}

...

insert({x:1}, clusterTime:

{0xFFFFFFFF, 0xFFFFFFFE})

LogicalClock:clusterTime =

Timestamp(0xFFFFFFFF, 0xFFFFFFFE)

Page 15: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Protecting clusterTime

"$clusterTime" : {"clusterTime" : Timestamp(1495470881, 5),

"signature" : {

"hash" : BinData(0,"7olYjQCLtnfORsI9IAhdsftESR4="),

"keyId" : NumberLong("6422998367101517844")

}

}

Page 16: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Protecting against operator errors

{ts: 6} ...

{ts: 5} ...

insert({x:1}, clusterTime: 100,000)

<clusterTime>: 6

<Wall clock>: 11

{Error}, { operationTime: 6}

Page 17: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Signing a range of clusterTime

find({x:1}, clusterTime: <val>,

signature:<hash>)

<timeRange> =

<val> | 0x0000’0000’0000’FFFF

cache:{ <timeRange>:<hash> }

Page 18: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Use dummy signatures

- When the auth is off

- When a user has advanceClusterTime privilege

Page 19: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

How end users see it

let session=db.getMongo().startSession({causalConsistency: true})

db = session.getDatabase(db.getName());

Page 20: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

{checking:100}

find({name:”misha”})

afterClusterTime: 15

update({name:”misha”

checking:100})

{ok:1} operationTime: 15

startSession()

Page 21: Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев (MongoDB)

Misha Tyulenev

[email protected]