The major feature in this seems to be Redis Cluster. The specification of Redis Cluster is:
Acceptable degree of write safety: the system tries (in a best-effort way) to retain all the writes originating from clients connected with the majority of the master nodes. Usually there are small windows where acknowledged writes can be lost. Windows to lose acknowledged writes are larger when clients are in a minority partition.
Availability: Redis Cluster is able to survive to partitions where the majority of the master nodes are reachable and there is at least a reachable slave for every master node that is no longer reachable. Moreover using replicas migration, masters no longer replicated by any slave, will receive one from a master which is covered by multiple slaves.
I think these semantics are a bit odd. I’m having trouble parsing the Availability section completely but I believe it is saying that it is neither consistent nor available. I’m not sure what class of problems this solution fits into.
Hello, availability is basically limited on purpose in the minority partition, even if semantically Redis Cluster is eventually consistent, since the merge function is “last failover wins” so basically there is no gain at all in writing in the minority partition, that would all go to populate the “lost writes” fiesta. So in practical terms the cluster is available only in the side of the partition where: 1) There are the majority of masters. 2) There is at least a slave serving the hash slots of each of the masters not reachable. Assuming you have a 6 nodes cluster, M1, M2, M3, S1, S2, S3, if M1, M2, and S3 are alive, the cluster can continue, but if a partition splits it into M1, M2, S1, S2 | M3, S3, there is no side able to continue.
The availability is improved via replicas migration. In the above setup, if you add S4, an additional slave, it will migrate to masters remaining uncovered. So for example if in the above setup M1 fails, S1 gets promoted as new master for the same keys, but M1 does not return back, S4 will migrate from the master that had two slaves in order to protect M1.
You are right Redis Cluster is not consistent nor available in terms of CAP.
About the set of problems served: the guarantees are identical to current Redis master-slave setups, and also similar to PostreSQL / MySQL failovers when asynchronous replication is used. So people that are now using those systems may find Redis Cluster appropriate for their set of problems.
Oh, I understand the semantics, I just don’t see how they are useful.
also similar to PostreSQL / MySQL failovers when asynchronous replication is used. So people that are now using those systems may find Redis Cluster appropriate for their set of problems.
Yes, I also don’t really know what problems that setup solves in PostgreSQL/MySQL.
IMO, Redis semantics simply are not usefully distributed without paying the price of synchronous replication.