Nami is a Senior Software Engineer at TomTom. After finally admitting his addiction to functional programming, he tried to cure himself by learning about distributed systems. Tragically, this approach did not work, and he now has two addictions to feed. He has spent the last three years contributing to the design and implementation of NavCloud, a distributed navigation information synchronisation system. He enjoys Scala, Java, Akka, Spray, Riak and AWS in his day-to-day work and he can be found on nami.me.
In a connected world, synchronising mutable information between different devices with different clock precision can be a difficult problem. A piece of data may have many out-of-sync replicas but all of those should eventually be in a consistent state. For example, TomTom users, having personal navigation devices, smartphones, MyDrive website accounts, expect their navigation information be synchronised properly even in the occasional absence of network connection.
Conflict-free Replicated Data Types (CRDTs) provide robust data structures to achieve proper synchronisation in an unreliable network of devices. They enable the conflict resolution being done locally at the data type level while guaranteeing the eventual consistency between replicas.
In this talk, in addition to an introduction to CRDT, our main focus will be on a special type of CRDT-set called OUR-set (Observed, Updated, Removed) which we created to extend known CRDT-sets with update functionality. We will explain the advantages of this data structure to solve many synchronisation problems as well as its limitations. We also show how a basic implementation of OUR-set CRDT in Scala and its counterpart in Java looks like and enumerate a set of subtle considerations which should be taken into account.