Hybrid Logical Clocks

In this blog post we'll going to talk about timestamps. But to start with we need to answer the basic question: what are we using timestamps for? Two most common cases are: We want to timestamp our records so later…

Make your cluster SWIM

In this blog post we'll cover how systems form clusters, what clusters actually are and what are their responsibilities. We'll also present different protocols responsible to serve the needs of the clusters with a various tradeoffs associated with them. To…

State-based CRDTs: Maps

In this blog post, we'll cover the idea of CRDT maps, and how we could create them and utilize them in common scenarios. A prerequisite for this talk is some general knowledge of CRDTs, especially observed-remove sets, which were already…

Thread safety with affine thread pools

In the previous blog post I've written about building a thread-safe state access by using actor programming model (as opposed to common practices requiring synchronization barriers with locks) without compromising performance coming with running our programs on multi-CPU machines. As…

Build your own actors

What the actor model is all about? While actors are very broad term, in Software Engineering we comonly refer to them when speaking about languages (like Erlang or Pony) or frameworks (like Akka or Orleans). Here however we'll try to…

Quest for optionally asynchronous APIs

In this blog post I wanted to share with some of the improvements, we've made while working on the FSharp.Data.GraphQL library. To start with I'm going to describe our use case, what issues did we observe and how…