Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Coordination-Free Designs for Mobile Gaming

Coordination-Free Designs for Mobile Gaming

Code Mesh 2015, September 3rd, 2015

Christopher Meiklejohn

November 03, 2015
Tweet

More Decks by Christopher Meiklejohn

Other Decks in Programming

Transcript

  1. Coordination-Free Designs

    for Mobile Gaming
    Christopher Meiklejohn // @cmeik
    Code Mesh 2015, September 3rd, 2015
    1

    View full-size slide

  2. RA
    RB
    1
    set(1)
    3
    2
    set(2)
    set(3)

    View full-size slide

  3. RA
    RB
    1
    set(1)
    3
    2
    set(2)
    set(3)
    ?
    ?

    View full-size slide

  4. Synchronization
    • To enforce an order

    Makes programming easier
    6

    View full-size slide

  5. Synchronization
    • To enforce an order

    Makes programming easier
    • Eliminate accidental nondeterminism

    Prevent race conditions
    6

    View full-size slide

  6. Synchronization
    • To enforce an order

    Makes programming easier
    • Eliminate accidental nondeterminism

    Prevent race conditions
    • Techniques

    Locks, mutexes, semaphores, monitors, etc.
    6

    View full-size slide

  7. Difficult Cases
    • “Internet of Things”

    Low power, limited memory and connectivity
    7

    View full-size slide

  8. Difficult Cases
    • “Internet of Things”

    Low power, limited memory and connectivity
    • Mobile Gaming

    Offline operation with replicated, shared state
    7

    View full-size slide

  9. Zero Synchronization
    • We want to have our cake and eat it too.
    8

    View full-size slide

  10. Zero Synchronization
    • We want to have our cake and eat it too.
    • “Zero synchronization” as a starting point

    Add synchronization only where it is necessary
    8

    View full-size slide

  11. Zero Synchronization
    • We want to have our cake and eat it too.
    • “Zero synchronization” as a starting point

    Add synchronization only where it is necessary
    • Explore the limits

    Can we design a model of computation where it’s
    easy to write coordination-free computations that
    are free from concurrency anomalies?
    8

    View full-size slide

  12. The Fundamentals of
    Distributed Computation
    9

    View full-size slide

  13. Distributed Computation
    • Distributed to concurrent programming

    Consistency and now partial failure
    10

    View full-size slide

  14. Distributed Computation
    • Distributed to concurrent programming

    Consistency and now partial failure
    • Enforcing the “single system” illusion
    10

    View full-size slide

  15. Distributed Computation
    • Distributed to concurrent programming

    Consistency and now partial failure
    • Enforcing the “single system” illusion
    • Consistency model as a contract
    10

    View full-size slide

  16. Distributed Computation
    • Distributed to concurrent programming

    Consistency and now partial failure
    • Enforcing the “single system” illusion
    • Consistency model as a contract
    • Enforced through synchronization
    10

    View full-size slide

  17. Distributed Computation
    • Distributed to concurrent programming

    Consistency and now partial failure
    • Enforcing the “single system” illusion
    • Consistency model as a contract
    • Enforced through synchronization
    • Consistency model

    We can think of a consistency model as analogous
    to a programming paradigm
    10

    View full-size slide

  18. Why Is Synchronization
    Undesirable?
    11

    View full-size slide

  19. The Avatars of Time
    • The problem of time

    Handling physical time in applications is difficult
    12

    View full-size slide

  20. The Avatars of Time
    • The problem of time

    Handling physical time in applications is difficult
    • Time has three major avatars in computing
    12

    View full-size slide

  21. The Avatars of Time
    • The problem of time

    Handling physical time in applications is difficult
    • Time has three major avatars in computing
    • Mutable state in sequential systems
    12

    View full-size slide

  22. The Avatars of Time
    • The problem of time

    Handling physical time in applications is difficult
    • Time has three major avatars in computing
    • Mutable state in sequential systems
    • Nondeterminism in concurrent systems
    12

    View full-size slide

  23. The Avatars of Time
    • The problem of time

    Handling physical time in applications is difficult
    • Time has three major avatars in computing
    • Mutable state in sequential systems
    • Nondeterminism in concurrent systems
    ̣ Network latency in distributed systems
    12

    View full-size slide

  24. The Avatars of Time
    • The problem of time

    Handling physical time in applications is difficult
    • Time has three major avatars in computing
    • Mutable state in sequential systems
    • Nondeterminism in concurrent systems
    ̣ Network latency in distributed systems
    • Unavoidable

    Time is how users interact with programs
    12

    View full-size slide

  25. Parable of the Car
    • “Car driving on a highway”
    13

    View full-size slide

  26. Parable of the Car
    • “Car driving on a highway”
    • Friction needed for the car to grip the road
    13

    View full-size slide

  27. Parable of the Car
    • “Car driving on a highway”
    • Friction needed for the car to grip the road
    • Motors want as little friction as possible
    13

    View full-size slide

  28. Parable of the Car
    • “Car driving on a highway”
    • Friction needed for the car to grip the road
    • Motors want as little friction as possible
    • Time is like friction

    We can not completely eliminate friction, but aim to
    reduce it as much as possible
    13

    View full-size slide

  29. Physical
    Time
    (real world)
    Parable of the Car
    14
    • Time only at the interface

    The interface is a small part of the system, and this is where we
    introduction friction

    View full-size slide

  30. Physical
    Time
    (real world)
    Parable of the Car
    14
    • Time only at the interface

    The interface is a small part of the system, and this is where we
    introduction friction
    • Physical time-free execution

    Internally, avoid synchronization as much as possible and virtualize
    notion of time

    View full-size slide

  31. No Time In The Box?
    15

    View full-size slide

  32. No Time In The Box?
    15
    You program the box.

    View full-size slide

  33. Weak Synchronization
    • Can we achieve anything without synchronization?

    Not really.
    16

    View full-size slide

  34. Weak Synchronization
    • Can we achieve anything without synchronization?

    Not really.
    • Strong Eventual Consistency (SEC)

    “Replicas that deliver the same updates have equivalent state”
    16

    View full-size slide

  35. Weak Synchronization
    • Can we achieve anything without synchronization?

    Not really.
    • Strong Eventual Consistency (SEC)

    “Replicas that deliver the same updates have equivalent state”
    • Primary requirement

    Eventual replica-to-replica communication
    16

    View full-size slide

  36. Weak Synchronization
    • Can we achieve anything without synchronization?

    Not really.
    • Strong Eventual Consistency (SEC)

    “Replicas that deliver the same updates have equivalent state”
    • Primary requirement

    Eventual replica-to-replica communication
    • Order insensitive! (Commutativity)
    16

    View full-size slide

  37. Weak Synchronization
    • Can we achieve anything without synchronization?

    Not really.
    • Strong Eventual Consistency (SEC)

    “Replicas that deliver the same updates have equivalent state”
    • Primary requirement

    Eventual replica-to-replica communication
    • Order insensitive! (Commutativity)
    • Duplicate insensitive! (Idempotent)
    16

    View full-size slide

  38. RA
    RB
    1
    set(1)
    3
    2
    set(2)
    set(3)

    View full-size slide

  39. RA
    RB
    1
    3
    2
    3
    3
    set(1) set(2)
    set(3)
    max(2,3)
    max(2,3)

    View full-size slide

  40. How can we succeed with
    Strong Eventual Consistency?
    21

    View full-size slide

  41. Programming SEC
    1. Eliminate accidental nondeterminism

    (ex. deterministic, modeling non-monotonic operations monotonically)
    22

    View full-size slide

  42. Programming SEC
    1. Eliminate accidental nondeterminism

    (ex. deterministic, modeling non-monotonic operations monotonically)
    2. Retain the properties of functional programming

    (ex. confluence, referential transparency over composition)
    22

    View full-size slide

  43. Programming SEC
    1. Eliminate accidental nondeterminism

    (ex. deterministic, modeling non-monotonic operations monotonically)
    2. Retain the properties of functional programming

    (ex. confluence, referential transparency over composition)
    3. Distributed, and fault-tolerant runtime

    (ex. replication)
    22

    View full-size slide

  44. Programming SEC
    1. Eliminate accidental nondeterminism

    (ex. deterministic, modeling non-monotonic operations monotonically)

    2. Retain the properties of functional programming

    (ex. confluence, referential transparency over composition)
    3. Distributed, and fault-tolerant runtime

    (ex. replication)
    23

    View full-size slide

  45. Convergent Objects

    Conflict-Free 

    Replicated Data Types
    24
    SSS 2011

    View full-size slide

  46. Conflict-Free 

    Replicated Data Types
    • Many types exist with different properties

    Sets, counters, registers, flags, maps, graphs
    25

    View full-size slide

  47. Conflict-Free 

    Replicated Data Types
    • Many types exist with different properties

    Sets, counters, registers, flags, maps, graphs
    • Strong Eventual Consistency

    Instances satisfy SEC property per-object
    25

    View full-size slide

  48. RA
    RB
    RC
    {1}
    (1, {a}, {})
    add(1)

    View full-size slide

  49. RA
    RB
    RC
    {1}
    (1, {a}, {})
    add(1)
    {1}
    (1, {c}, {})
    add(1)

    View full-size slide

  50. RA
    RB
    RC
    {1}
    (1, {a}, {})
    add(1)
    {1}
    (1, {c}, {})
    add(1)
    {}
    (1, {c}, {c})
    remove(1)

    View full-size slide

  51. RA
    RB
    RC
    {1}
    (1, {a}, {})
    add(1)
    {1}
    (1, {c}, {})
    add(1)
    {}
    (1, {c}, {c})
    remove(1)
    {1}
    {1}
    {1}
    (1, {a, c}, {c})
    (1, {a, c}, {c})
    (1, {a, c}, {c})

    View full-size slide

  52. Programming SEC
    1. Eliminate accidental nondeterminism

    (ex. deterministic, modeling non-monotonic operations monotonically)

    2. Retain the properties of functional programming

    (ex. confluence, referential transparency over composition)
    3. Distributed, and fault-tolerant runtime

    (ex. replication)
    31

    View full-size slide

  53. Convergent Programs
    Lattice Processing
    32
    PPDP 2015

    View full-size slide

  54. Lattice Processing (Lasp)
    • Distributed, deterministic dataflow

    Distributed, deterministic dataflow programming
    model for “eventually consistent” computations
    33

    View full-size slide

  55. Lattice Processing (Lasp)
    • Distributed, deterministic dataflow

    Distributed, deterministic dataflow programming
    model for “eventually consistent” computations
    • Convergent data structures

    Primary data abstraction is the CRDT
    33

    View full-size slide

  56. Lattice Processing (Lasp)
    • Distributed, deterministic dataflow

    Distributed, deterministic dataflow programming
    model for “eventually consistent” computations
    • Convergent data structures

    Primary data abstraction is the CRDT
    • Enables composition

    Provides functional composition of CRDTs that
    preserves the SEC property
    33

    View full-size slide

  57. 34
    %% Create initial set.
    S1 = declare(set),
    %% Add elements to initial set and update.
    update(S1, {add, [1,2,3]}),
    %% Create second set.
    S2 = declare(set),
    %% Apply map operation between S1 and S2.
    map(S1, fun(X) -> X * 2 end, S2).

    View full-size slide

  58. 35
    %% Create initial set.
    S1 = declare(set),
    %% Add elements to initial set and update.
    update(S1, {add, [1,2,3]}),
    %% Create second set.
    S2 = declare(set),
    %% Apply map operation between S1 and S2.
    map(S1, fun(X) -> X * 2 end, S2).

    View full-size slide

  59. 36
    %% Create initial set.
    S1 = declare(set),
    %% Add elements to initial set and update.
    update(S1, {add, [1,2,3]}),
    %% Create second set.
    S2 = declare(set),
    %% Apply map operation between S1 and S2.
    map(S1, fun(X) -> X * 2 end, S2).

    View full-size slide

  60. 37
    %% Create initial set.
    S1 = declare(set),
    %% Add elements to initial set and update.
    update(S1, {add, [1,2,3]}),
    %% Create second set.
    S2 = declare(set),
    %% Apply map operation between S1 and S2.
    map(S1, fun(X) -> X * 2 end, S2).

    View full-size slide

  61. 38
    %% Create initial set.
    S1 = declare(set),
    %% Add elements to initial set and update.
    update(S1, {add, [1,2,3]}),
    %% Create second set.
    S2 = declare(set),
    %% Apply map operation between S1 and S2.
    map(S1, fun(X) -> X * 2 end, S2).

    View full-size slide

  62. Lattice Processing (Lasp)
    • Functional and set-theoretic operations on sets

    Product, intersection, union, filter, map, fold
    39

    View full-size slide

  63. Lattice Processing (Lasp)
    • Functional and set-theoretic operations on sets

    Product, intersection, union, filter, map, fold
    • Metadata computation

    Performs transformation on the internal metadata of
    CRDTs allowing creation of “composed” CRDTs
    39

    View full-size slide

  64. Lasp Processes
    • Replicas as monotonic streams

    Each replica of a CRDT produces a monotonic
    stream of states
    40

    View full-size slide

  65. Lasp Processes
    • Replicas as monotonic streams

    Each replica of a CRDT produces a monotonic
    stream of states
    • Monotonic processes

    Read from one or more input replica streams and
    produce a single output replica stream
    40

    View full-size slide

  66. Lasp Processes
    • Replicas as monotonic streams

    Each replica of a CRDT produces a monotonic
    stream of states
    • Monotonic processes

    Read from one or more input replica streams and
    produce a single output replica stream
    • Inflationary reads

    Read operation ensures that we only read
    inflationary updates to replicas
    40

    View full-size slide

  67. Lattice Processing
    Monotonic Streams
    41

    View full-size slide

  68. RA
    {}
    C1
    {}
    C2
    {}
    42

    View full-size slide

  69. RA
    {}
    (1, {a}, {})
    C1
    (1, {a}, {})
    {}
    C2
    {}
    43

    View full-size slide

  70. RA
    {}
    (1, {a}, {})
    (1, {a, c}, {})
    C1
    (1, {a}, {})
    {}
    C2
    (1, {c}, {})
    {}
    44

    View full-size slide

  71. RA
    {}
    (1, {a}, {})
    (1, {a, c}, {})
    (1, {a, c}, {a})
    C1
    (1, {a}, {})
    {}
    (1, {a}, {a})
    C2
    (1, {c}, {})
    {}
    45

    View full-size slide

  72. RA
    {}
    (1, {a}, {})
    (1, {a, c}, {})
    (1, {a, c}, {a})
    C1
    (1, {a}, {})
    {}
    (1, {a}, {a})
    C2
    (1, {c}, {})
    {}
    (1, {a, c}, {a})
    (1, {a, c}, {a}) (1, {a, c}, {a})
    46

    View full-size slide

  73. RA
    {}
    (1, {a}, {})
    (1, {a, c}, {})
    (1, {a, c}, {a})
    C1
    (1, {a}, {})
    {}
    (1, {a}, {a})
    C2
    (1, {c}, {})
    {}
    (1, {a, c}, {a})
    (1, {a, c}, {a}) (1, {a, c}, {a})
    47

    View full-size slide

  74. Lattice Processing
    Monotonic Processes
    48

    View full-size slide

  75. RA
    {}
    P1 F(RA)
    {}
    49

    View full-size slide

  76. RA
    {}
    P1 F(RA)
    {}
    strict_read({})
    50

    View full-size slide

  77. RA
    {}
    P1 F(RA)
    {}
    strict_read({})
    (1, {a}, {})
    51

    View full-size slide

  78. RA
    {}
    P1 F(RA)
    {}
    strict_read({})
    (1, {a}, {}) F((1, {a}, {}))
    52

    View full-size slide

  79. RA
    {}
    P1 F(RA)
    {}
    strict_read({})
    (1, {a}, {}) F((1, {a}, {})) (2, {a}, {})
    53

    View full-size slide

  80. RA
    {}
    P1 F(RA)
    {}
    strict_read({})
    (1, {a}, {}) F((1, {a}, {})) (2, {a}, {})
    strict_read((1, {a}, {})
    (1, {a}, {})
    54

    View full-size slide

  81. RA
    {}
    P1 F(RA)
    {}
    strict_read({})
    (1, {a}, {}) F((1, {a}, {})) (2, {a}, {})
    strict_read((1, {a}, {})
    (1, {a}, {})
    (1, {a}, {a}) F((1, {a}, {a})) (2, {a}, {a})
    strict_read((1, {a}, {a})
    (1, {a}, {a})
    55

    View full-size slide

  82. RA
    {}
    P1 F(RA)
    {}
    strict_read({})
    (1, {a}, {})
    (1, {a}, {})
    (1, {a}, {a}) F((1, {a}, {a})) (2, {a}, {a})
    strict_read((1, {a}, {a})
    (1, {a}, {a})
    56

    View full-size slide

  83. Programming SEC
    1. Eliminate accidental nondeterminism

    (ex. deterministic, modeling non-monotonic operations monotonically)

    2. Retain the properties of functional programming

    (ex. confluence, referential transparency over composition)
    3. Distributed, and fault-tolerant runtime

    (ex. replication)
    57

    View full-size slide

  84. Distributed Runtime
    Selective Hearing
    58
    W-PSDS 2015

    View full-size slide

  85. Selective Hearing
    • Epidemic broadcast based runtime system

    Provide a runtime system that can scale to large numbers of
    nodes, that is resilient to failures and provides efficient execution
    59

    View full-size slide

  86. Selective Hearing
    • Epidemic broadcast based runtime system

    Provide a runtime system that can scale to large numbers of
    nodes, that is resilient to failures and provides efficient execution
    • Well-matched to Lattice Processing (Lasp)
    59

    View full-size slide

  87. Selective Hearing
    • Epidemic broadcast based runtime system

    Provide a runtime system that can scale to large numbers of
    nodes, that is resilient to failures and provides efficient execution
    • Well-matched to Lattice Processing (Lasp)
    • Epidemic broadcast mechanisms provide weak ordering but
    are resilient and efficient
    59

    View full-size slide

  88. Selective Hearing
    • Epidemic broadcast based runtime system

    Provide a runtime system that can scale to large numbers of
    nodes, that is resilient to failures and provides efficient execution
    • Well-matched to Lattice Processing (Lasp)
    • Epidemic broadcast mechanisms provide weak ordering but
    are resilient and efficient
    • Lasp’s programming model is tolerant to message re-ordering,
    disconnections, and node failures
    59

    View full-size slide

  89. Selective Hearing
    • Epidemic broadcast based runtime system

    Provide a runtime system that can scale to large numbers of
    nodes, that is resilient to failures and provides efficient execution
    • Well-matched to Lattice Processing (Lasp)
    • Epidemic broadcast mechanisms provide weak ordering but
    are resilient and efficient
    • Lasp’s programming model is tolerant to message re-ordering,
    disconnections, and node failures
    • “Selective Receive”

    Nodes selectively receive and process messages based on
    interest
    59

    View full-size slide

  90. Programming SEC
    1. Eliminate accidental nondeterminism

    (ex. deterministic, modeling non-monotonic operations monotonically)

    2. Retain the properties of functional programming

    (ex. confluence, referential transparency over composition)
    3. Distributed, and fault-tolerant runtime

    (ex. replication)
    60

    View full-size slide

  91. What can we build?
    Leaderboard
    61

    View full-size slide

  92. Leaderboard
    • Mobile game platform

    Local leaderboard tracking top-k highest scored
    games
    62

    View full-size slide

  93. Leaderboard
    • Mobile game platform

    Local leaderboard tracking top-k highest scored
    games
    • Clients will go offline

    Clients have limited connectivity and the system still
    needs to make progress while clients are offline
    62

    View full-size slide

  94. Client 1
    Leaderboard
    Client 3
    Leaderboard
    Client 2
    Leaderboard
    Lasp Operation
    User-Maintained CRDT
    Lasp-Maintained CRDT
    63

    View full-size slide

  95. Leaderboard
    • Peer-to-peer dissemination

    Nodes periodically “merge” their state with a
    random peer
    64

    View full-size slide

  96. Leaderboard
    • Peer-to-peer dissemination

    Nodes periodically “merge” their state with a
    random peer
    • Complexity in the data type

    Each node tracks a top-k set of its own games in a
    bounded set
    64

    View full-size slide

  97. 65
    %% Create a leaderboard datatype.
    L = declare({top_k, [2]}).
    %% Update leaderboard.
    update({set, Name, Score}, L).

    View full-size slide

  98. 66
    %% Create a leaderboard datatype.
    L = declare({top_k, [2]}).
    %% Update leaderboard.
    update({set, Name, Score}, L).

    View full-size slide

  99. 67
    %% Create a leaderboard datatype.
    L = declare({top_k, [2]}).
    %% Update leaderboard.
    update({set, Name, Score}, L).

    View full-size slide

  100. What if we want to enhance
    the behavior?
    68

    View full-size slide

  101. What if we want to enhance
    the behavior?
    68
    Without the creation of a
    new datatype

    View full-size slide

  102. What can we build?
    Per-User Leaderboard
    69
    EdgeCom 2016

    View full-size slide

  103. Per-User Leaderboard
    • Enhance existing design

    Only the top score for each user at each device
    70

    View full-size slide

  104. Per-User Leaderboard
    • Enhance existing design

    Only the top score for each user at each device
    • Minimize transmitted state

    Prevent transmission of state that is not necessary
    to perform the computation
    70

    View full-size slide

  105. Per-User Leaderboard
    • Enhance existing design

    Only the top score for each user at each device
    • Minimize transmitted state

    Prevent transmission of state that is not necessary
    to perform the computation
    • Compose data types

    Build a per-user leaderboard through the
    composition of existing types
    70

    View full-size slide

  106. Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Lasp Operation
    Input
    User-Maintained CRDT
    Output
    Lasp-Maintained CRDT Fold
    Client3
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client2
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    71

    View full-size slide

  107. Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    72
    Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client3
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client2
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold

    View full-size slide

  108. Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    73
    Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client3
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client2
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold

    View full-size slide

  109. Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    74
    Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client3
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client2
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold

    View full-size slide

  110. Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    75
    Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client3
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client2
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold

    View full-size slide

  111. Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    76
    Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client3
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client2
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold

    View full-size slide

  112. Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    77
    Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client3
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client2
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold

    View full-size slide

  113. Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Lasp Operation
    Input
    User-Maintained CRDT
    Output
    Lasp-Maintained CRDT Fold
    Client3
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client2
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    78
    Client1
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client3
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold
    Client2
    Scores
    Local
    Top-K
    Fold
    Global
    Top-K
    Fold

    View full-size slide

  114. Per-User Leaderboard
    • Dynamically scoped variables

    Variable which take different values depending on
    where it is executing
    79

    View full-size slide

  115. Per-User Leaderboard
    • Dynamically scoped variables

    Variable which take different values depending on
    where it is executing
    • Dynamically scoped fold operation

    Perform a distributed “reduce” operation that
    combines the state of a dynamically scoped
    variables across
    79

    View full-size slide

  116. 80
    %% Create a global leaderboard.
    G = declare({top_k, [10]}).
    %% Create a local leaderboard.
    L = declare_dynamic({top_k, [10]}).
    %% Create a set of scores.
    S = declare_dynamic(set).
    %% Compute local top-k list.
    fold(S, fun max_by_name/2, L).
    %% Compute global top-k list.
    fold_dynamic(L, fun max_by_name/2, G).

    View full-size slide

  117. 81
    %% Create a global leaderboard.
    G = declare({top_k, [10]}).
    %% Create a local leaderboard.
    L = declare_dynamic({top_k, [10]}).
    %% Create a set of scores.
    S = declare_dynamic(set).
    %% Compute local top-k list.
    fold(S, fun max_by_name/2, L).
    %% Compute global top-k list.
    fold_dynamic(L, fun max_by_name/2, G).

    View full-size slide

  118. 82
    %% Create a global leaderboard.
    G = declare({top_k, [10]}).
    %% Create a local leaderboard.
    L = declare_dynamic({top_k, [10]}).
    %% Create a set of scores.
    S = declare_dynamic(set).
    %% Compute local top-k list.
    fold(S, fun max_by_name/2, L).
    %% Compute global top-k list.
    fold_dynamic(L, fun max_by_name/2, G).

    View full-size slide

  119. 83
    %% Create a global leaderboard.
    G = declare({top_k, [10]}).
    %% Create a local leaderboard.
    L = declare_dynamic({top_k, [10]}).
    %% Create a set of scores.
    S = declare_dynamic(set).
    %% Compute local top-k list.
    fold(S, fun max_by_name/2, L).
    %% Compute global top-k list.
    fold_dynamic(L, fun max_by_name/2, G).

    View full-size slide

  120. 84
    %% Create a global leaderboard.
    G = declare({top_k, [10]}).
    %% Create a local leaderboard.
    L = declare_dynamic({top_k, [10]}).
    %% Create a set of scores.
    S = declare_dynamic(set).
    %% Compute local top-k list.
    fold(S, fun max_by_name/2, L).
    %% Compute global top-k list.
    fold_dynamic(L, fun max_by_name/2, G).

    View full-size slide

  121. 85
    %% Create a global leaderboard.
    G = declare({top_k, [10]}).
    %% Create a local leaderboard.
    L = declare_dynamic({top_k, [10]}).
    %% Create a set of scores.
    S = declare_dynamic(set).
    %% Compute local top-k list.
    fold(S, fun max_by_name/2, L).
    %% Compute global top-k list.
    fold_dynamic(L, fun max_by_name/2, G).

    View full-size slide

  122. Let’s look at a larger
    application
    86

    View full-size slide

  123. Let’s look at a larger
    application
    86
    With visible 

    non-monotonicity

    View full-size slide

  124. What can we build?
    Advertisement Counter
    87

    View full-size slide

  125. Advertisement Counter
    • Mobile game platform selling advertisement space

    Advertisements are paid according to a minimum
    number of impressions
    88

    View full-size slide

  126. Advertisement Counter
    • Mobile game platform selling advertisement space

    Advertisements are paid according to a minimum
    number of impressions
    • Clients will go offline

    Clients have limited connectivity and the system still
    needs to make progress while clients are offline
    88

    View full-size slide

  127. Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    Read
    50,000
    Remove
    Increment
    Read
    Union
    Lasp Operation
    User-Maintained CRDT
    Lasp-Maintained CRDT
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Client Side, Single Copy at Client
    89

    View full-size slide

  128. Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Riot Ads
    Rovio
    Ads
    Product
    Read
    50,000
    Remove
    Increment
    Union
    90
    Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    Read
    50,000
    Remove
    Increment
    Read
    Union
    Lasp Operation
    User-Maintained CRDT
    Lasp-Maintained CRDT
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Client Side, Single Copy at Client

    View full-size slide

  129. Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    Read
    50,000
    Remove
    Increment
    Read
    Union
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Client
    91
    Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    Read
    50,000
    Remove
    Increment
    Read
    Union
    Lasp Operation
    User-Maintained CRDT
    Lasp-Maintained CRDT
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Client Side, Single Copy at Client

    View full-size slide

  130. Ads
    ovio Ad
    ounter 1
    ovio Ad
    ounter 2
    iot Ad
    ounter 1
    iot Ad
    ounter 2
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    Read
    50,000
    Remove
    Increment
    Read
    Union
    Rovio Ad
    Counter
    1
    Ro
    C
    Rovio Ad
    Counter
    1
    Ro
    C
    Rovio Ad
    Counter
    1
    Ro
    C
    Rovio Ad
    Counter
    1
    Ro
    C
    Client Side, Sing
    92
    Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    Read
    50,000
    Remove
    Increment
    Read
    Union
    Lasp Operation
    User-Maintained CRDT
    Lasp-Maintained CRDT
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Client Side, Single Copy at Client

    View full-size slide

  131. Ads
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    move Read
    Union
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Client Side, Single Copy at Client
    93
    Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    Read
    50,000
    Remove
    Increment
    Read
    Union
    Lasp Operation
    User-Maintained CRDT
    Lasp-Maintained CRDT
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Client Side, Single Copy at Client

    View full-size slide

  132. Ads
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Filter
    Product
    Read
    Union
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Client Side, Single Copy at Client
    94
    Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    Read
    50,000
    Remove
    Increment
    Read
    Union
    Lasp Operation
    User-Maintained CRDT
    Lasp-Maintained CRDT
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Client Side, Single Copy at Client

    View full-size slide

  133. Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    Read
    50,000
    Remove
    Increment
    Read
    Union
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Client Side, Single Copy at Client
    95
    Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    Read
    50,000
    Remove
    Increment
    Read
    Union
    Lasp Operation
    User-Maintained CRDT
    Lasp-Maintained CRDT
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Client Side, Single Copy at Client

    View full-size slide

  134. Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Riot Ads
    Rovio
    Ads
    Fil
    Product
    Read
    50,000
    Remove
    Increment
    Union
    96
    Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    Read
    50,000
    Remove
    Increment
    Read
    Union
    Lasp Operation
    User-Maintained CRDT
    Lasp-Maintained CRDT
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Client Side, Single Copy at Client

    View full-size slide

  135. Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    Read
    50,000
    Remove
    Increment
    Read
    Union
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Client Side, Single Copy at Client
    97
    Ads
    Rovio Ad
    Counter 1
    Rovio Ad
    Counter 2
    Riot Ad
    Counter 1
    Riot Ad
    Counter 2
    Contracts
    Ads
    Contracts
    Ads
    With
    Contracts
    Riot Ads
    Rovio
    Ads
    Filter
    Product
    Read
    50,000
    Remove
    Increment
    Read
    Union
    Lasp Operation
    User-Maintained CRDT
    Lasp-Maintained CRDT
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Client Side, Single Copy at Client

    View full-size slide

  136. Advertisement Counter
    • Completely monotonic

    Disabling advertisements and contracts are all
    modeled through monotonic state growth
    98

    View full-size slide

  137. Advertisement Counter
    • Completely monotonic

    Disabling advertisements and contracts are all
    modeled through monotonic state growth
    • Arbitrary distribution

    Use of convergent data structures allows
    computational graph to be arbitrarily distributed
    98

    View full-size slide

  138. Advertisement Counter
    • Completely monotonic

    Disabling advertisements and contracts are all
    modeled through monotonic state growth
    • Arbitrary distribution

    Use of convergent data structures allows
    computational graph to be arbitrarily distributed
    • Divergence

    Divergence is a factor of synchronization period
    98

    View full-size slide

  139. 99
    %% Generate a series of contracts.
    Contracts = declare(set),
    %% Generate advertisements.
    RiotAds = declare(set),
    RovioAds = declare(set),
    create_advertisements_and_contracts(RiotAds, Contracts),
    create_advertisements_and_contracts(RovioAds, Contracts),
    %% Union ads.
    Ads = declare(set),
    union(RovioAds, RiotAds, Ads),
    %% Compute the product of both ads and contracts.
    AdsContracts = declare(set),
    product(Ads, Contracts, AdsContracts),
    %% Filter items by join on item it.
    AdsWithContracts = declare(set),
    FilterFun = fun({#ad{id=Id1}, #contract{id=Id2}}) ->
    Id1 =:= Id2
    end,
    filter(AdsContracts, FilterFun, AdsWithContracts).

    View full-size slide

  140. 100
    %% Generate a series of contracts.
    Contracts = declare(set),
    %% Generate advertisements.
    RiotAds = declare(set),
    RovioAds = declare(set),
    create_advertisements_and_contracts(RiotAds, Contracts),
    create_advertisements_and_contracts(RovioAds, Contracts),
    %% Union ads.
    Ads = declare(set),
    union(RovioAds, RiotAds, Ads),
    %% Compute the product of both ads and contracts.
    AdsContracts = declare(set),
    product(Ads, Contracts, AdsContracts),
    %% Filter items by join on item it.
    AdsWithContracts = declare(set),
    FilterFun = fun({#ad{id=Id1}, #contract{id=Id2}}) ->
    Id1 =:= Id2
    end,
    filter(AdsContracts, FilterFun, AdsWithContracts).

    View full-size slide

  141. 101
    %% Generate a series of contracts.
    Contracts = declare(set),
    %% Generate advertisements.
    RiotAds = declare(set),
    RovioAds = declare(set),
    create_advertisements_and_contracts(RiotAds, Contracts),
    create_advertisements_and_contracts(RovioAds, Contracts),
    %% Union ads.
    Ads = declare(set),
    union(RovioAds, RiotAds, Ads),
    %% Compute the product of both ads and contracts.
    AdsContracts = declare(set),
    product(Ads, Contracts, AdsContracts),
    %% Filter items by join on item it.
    AdsWithContracts = declare(set),
    FilterFun = fun({#ad{id=Id1}, #contract{id=Id2}}) ->
    Id1 =:= Id2
    end,
    filter(AdsContracts, FilterFun, AdsWithContracts).

    View full-size slide

  142. 102
    %% Generate a series of contracts.
    Contracts = declare(set),
    %% Generate advertisements.
    RiotAds = declare(set),
    RovioAds = declare(set),
    create_advertisements_and_contracts(RiotAds, Contracts),
    create_advertisements_and_contracts(RovioAds, Contracts),
    %% Union ads.
    Ads = declare(set),
    union(RovioAds, RiotAds, Ads),
    %% Compute the product of both ads and contracts.
    AdsContracts = declare(set),
    product(Ads, Contracts, AdsContracts),
    %% Filter items by join on item it.
    AdsWithContracts = declare(set),
    FilterFun = fun({#ad{id=Id1}, #contract{id=Id2}}) ->
    Id1 =:= Id2
    end,
    filter(AdsContracts, FilterFun, AdsWithContracts).

    View full-size slide

  143. 103
    %% Generate a series of contracts.
    Contracts = declare(set),
    %% Generate advertisements.
    RiotAds = declare(set),
    RovioAds = declare(set),
    create_advertisements_and_contracts(RiotAds, Contracts),
    create_advertisements_and_contracts(RovioAds, Contracts),
    %% Union ads.
    Ads = declare(set),
    union(RovioAds, RiotAds, Ads),
    %% Compute the product of both ads and contracts.
    AdsContracts = declare(set),
    product(Ads, Contracts, AdsContracts),
    %% Filter items by join on item it.
    AdsWithContracts = declare(set),
    FilterFun = fun({#ad{id=Id1}, #contract{id=Id2}}) ->
    Id1 =:= Id2
    end,
    filter(AdsContracts, FilterFun, AdsWithContracts).

    View full-size slide

  144. 104
    %% Generate a series of contracts.
    Contracts = declare(set),
    %% Generate advertisements.
    RiotAds = declare(set),
    RovioAds = declare(set),
    create_advertisements_and_contracts(RiotAds, Contracts),
    create_advertisements_and_contracts(RovioAds, Contracts),
    %% Union ads.
    Ads = declare(set),
    union(RovioAds, RiotAds, Ads),
    %% Compute the product of both ads and contracts.
    AdsContracts = declare(set),
    product(Ads, Contracts, AdsContracts),
    %% Filter items by join on item it.
    AdsWithContracts = declare(set),
    FilterFun = fun({#ad{id=Id1}, #contract{id=Id2}}) ->
    Id1 =:= Id2
    end,
    filter(AdsContracts, FilterFun, AdsWithContracts).

    View full-size slide

  145. Client3
    Lasp Operation
    User-Maintained CRDT
    Lasp-Maintained CRDT
    Riot Ad
    Counter
    1
    Client1
    Client2
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Rovio Ad
    Counter
    1
    Riot Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Riot Ad
    Counter
    1
    Ads
    With
    Contracts
    Ads
    With
    Contracts
    Ads
    With
    Contracts
    Server
    Ads
    With
    Contracts
    Server
    Computation!
    105

    View full-size slide

  146. Client3
    Lasp Operation
    User-Maintained CRDT
    Lasp-Maintained CRDT
    Riot Ad
    Counter
    1
    Client1
    Client2
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Rovio Ad
    Counter
    1
    Riot Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Riot Ad
    Counter
    1
    Ads
    With
    Contracts
    Ads
    With
    Contracts
    Ads
    With
    Contracts
    Server
    Ads
    With
    Contracts
    Server
    Computation!
    106

    View full-size slide

  147. Client3
    Lasp Operation
    User-Maintained CRDT
    Lasp-Maintained CRDT
    Riot Ad
    Counter
    1
    Client1
    Client2
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Rovio Ad
    Counter
    1
    Rovio Ad
    Counter
    2
    Rovio Ad
    Counter
    1
    Riot Ad
    Counter
    2
    Riot Ad
    Counter
    1
    Riot Ad
    Counter
    1
    Ads
    With
    Contracts
    Ads
    With
    Contracts
    Ads
    With
    Contracts
    Server
    Ads
    With
    Contracts
    Server
    Computation!
    107

    View full-size slide

  148. Advertisement Counter
    • “Servers” as peers to “clients”

    Servers are peers to clients that perform additional
    computation
    108

    View full-size slide

  149. Advertisement Counter
    • “Servers” as peers to “clients”

    Servers are peers to clients that perform additional
    computation
    • Any node can disable an advertisement under this
    model given enough information
    108

    View full-size slide

  150. Advertisement Counter
    • “Servers” as peers to “clients”

    Servers are peers to clients that perform additional
    computation
    • Any node can disable an advertisement under this
    model given enough information
    • “Servers” as trusted nodes

    Serve as a location for performing “exactly once” side-
    effects
    108

    View full-size slide

  151. Advertisement Counter
    • “Servers” as peers to “clients”

    Servers are peers to clients that perform additional
    computation
    • Any node can disable an advertisement under this
    model given enough information
    • “Servers” as trusted nodes

    Serve as a location for performing “exactly once” side-
    effects
    • Billing customers must be done at a central point by a
    trusted node in the system
    108

    View full-size slide

  152. We’ve build up from zero
    synchronization
    109

    View full-size slide

  153. We’ve build up from zero
    synchronization
    109
    Instead of working to
    remove synchronization

    View full-size slide

  154. What have we learned?
    110

    View full-size slide

  155. Key Points
    • Synchronization is expensive

    Locking and other synchronization mechanisms limit
    scalability to the critical section
    111

    View full-size slide

  156. Key Points
    • Synchronization is expensive

    Locking and other synchronization mechanisms limit
    scalability to the critical section
    • Synchronization is sometimes not possible

    Mobile and “Internet of Things” applications make
    synchronization for replicated state impractical
    111

    View full-size slide

  157. Key Points
    • Synchronization is expensive

    Locking and other synchronization mechanisms limit
    scalability to the critical section
    • Synchronization is sometimes not possible

    Mobile and “Internet of Things” applications make
    synchronization for replicated state impractical
    • Apply synchronization only where required

    Global invariants, atomic visibility, etc.
    111

    View full-size slide

  158. How do I learn more?
    112

    View full-size slide

  159. Publications
    • “Lasp: A Language for Distributed, Coordination-Free Programming” 

    ACM SIGPLAN PPDP 2015

    • “Selective Hearing: An Approach to Distributed, Eventually Consistent Edge Computation”

    IEEE W-PSDS 2015

    • “The Implementation and Use of a Generic Dataflow Behaviour in Erlang”

    ACM SIGPLAN Erlang Workshop ’15
    • “Lasp: A Language for Distributed, Eventually Consistent Computations with CRDTs"

    PaPoC 2015
    • “Declarative, Sliding Window Aggregations for Computations at the Edge"

    IEEE EdgeCom 2016
    113

    View full-size slide

  160. SyncFree is a European research project taking place
    for 3 years, staring October 2013, and is funded by
    the European Union, grant agreement n° 609551.
    114

    View full-size slide

  161. Thanks!
    115
    Christopher Meiklejohn
    @cmeik

    View full-size slide