Consistency & Consistency Levels(II) — Distributed Data Stores
Before going into this article, I’d advise you to go through the following articles to get the complete context.
- Consistency & Consistency Levels
- Consistency Models — Strong Consistency Models
- Consistency Models — Session & Eventual Consistency Models
Now that we’re on the same page, we have seen before that we could define the application consistency based on different consistency models.
Consistency model is a contract between a (distributed)system and the applications that run on it. This model is a set of guarantees made by the distributed system so that the client can have expected consistency behaviour across read & write operations.
From a distributed systems perspective, we can also define consistency levels that also end up impacting the consistency guarantees that our application can make.
Consistency Level is the number of replica nodes that must acknowledge a read/write request to be successful for the entire request to be considered successful.
Replication Factor (RF) is equivalent to the number of nodes where any write is replicated. So, if I have a 5 node cluster and have set RF to 3, my writes are replicated to 3 of the 5 nodes always.
Let’s take different consistency levels and see the consistency guarantees that our application can offer -
- Read CL = ONE & Write CL = ALL
With this setting, we’ll read the data from any one replica, but the write request is considered successful, only if it's acknowledged by all replicas. Since the write is always synced to all replicas, reading from any replica will always show the latest write.
So, this configuration allows us to have a Strongly Consistent(Linearizable) system.
Pros: Read throughput is very high as read happens only on one replica. Strongly Consistent.
Cons: Setting write CL to ALL increases the write latency, impacting the write performance & throughput as the write needs to be synced to all replicas. The availability of the application is also impacted as we always need all replicas to be available for any successful writes. Partitions cannot be tolerated by the system.
2. Read CL = ALL & Write CL = ONE