【闲聊杂谈】Redis中的CAP理论

CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。

我们先来区分一下“主备”和“主从”的分别:

主备:客户端只能访问主机,不会访问备机,备机存在的意义就是等主机挂掉以后接替主机;

主从:客户端既可以访问主机,也可以访问从机。

其实在Redis中,既可以使用主备模式,也可以使用主从模式,一般企业中使用主从的比较多。

无论是主备还是主从,一般主机都是包含全量的增删改查, 那么这个主自己又是一个单点,所以一般都会对主做HA,也就是高可用。 

再强调一遍,高可用不是为了让主机不出现问题,而是当主机出现问题的时候,集群中会有另外一个去替换主,对外来就好像主是永远不出问题一样。那么这个过程其实可以让人工手动去切换,将备机切换成主机。但人工是这个世界上最不靠谱的,所以需要使用一些程序来解决这个自动的故障转移。

但是这个程序自己本身也会存在单点故障的问题,所以这个监控的程序也应该是个一变多的集群,假设现在有3个监控去监控一个Redis主机的时候,每个监控给出自己的判断,就会产生一个很经典的网络分区问题,也就是我们经常说的脑裂。A监控说挂了,B监控说没挂,那到底是挂了还是没挂?

所以,必然不能以每一台的结果作为判定标准,但也不能以所有监控的结果作为判定,因为统计所有的那么必然就是强一致性,强一致性会破坏可用性,只要有一个连接有问题,就会导致整个监控的结果不可用。所以需要设定一个数,到底判定几台的结果比较合理?假设一共有n台监控:

n % 2 == 0 ? n /2 +1 : (n + 1) / 2(一般在企业中将n取奇数台)

CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。而由于网络硬件肯定会出现延迟丢包等问题,所以分区容错性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡。

你可能感兴趣的:(闲聊杂谈,redis)