In the past we already discussed how to build JSON-like Conflict-free Replicated Data Type [https://www.bartoszsypytkowski.com/operation-based-crdts-json-document/]. We used operation-based approach, with wide support for many operations and characteristics of a…
distributed-systems
A collection of 27 posts
Deep dive into Yrs architecture
In this blog post we're going to cover the the internals and architecture behind Yrs [https://crates.io/crates/yrs] (read: wires) - a Rust port of popular Yjs [https://yjs.dev/] CRDT library used for building collaborative peer-…
RAMP up your distributed transactions
Last time [https://www.bartoszsypytkowski.com/hash-partitions/] we were talking about partitioning in distributed systems. Now it's a time to talk about protocols that allow us to establish transactional reads and writes across partitions - which could be…
Distributed systems: partitions
Today we'll talk about topic of resource allocation in distributed systems using partitions. While we mention two common approaches - partitioning by key and hash rings - further down the post we'll focus only on the second. But…
Delta-state CRDTs: indexed sequences with YATA
In this blog post we're coming back to indexed sequence CRDTs - we already discussed some operation-based approaches in the past. This time we'll cover YATA (Yet Another Transformation Approach): a delta-state based variant, introduced…
CRDT optimizations
After series of 11 blogs posts about Conflict-free Replicated Data Types, it's time to wrap up. This time let's discuss various optimizations that could be applied to CRDTs working at higher scale. Other blog posts…
Pure operation-based CRDTs
In this blog post we'll continue on topic of operation-based CRDTs and focus on the optimizations and approach known as pure operation-based CRDTs [https://hal.inria.fr/hal-01287738/document]: how can we use them to…
Operation-based CRDTs: JSON document
Today we're going to cover how to build a complex, JSON-like document CRDT. In the past, we focused on homogeneous data types like registers, sets, arrays or maps. This time we're going to combine them…