CAP理论
CAP理论在分布式系统中,Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错),只能满足其中两项。
红色部分观点只是个人为了便于理解CAP所作出的一些说法,例如:强可用性、强分区容错。
注意:
Consistency(一致性):
这里的一致性是强一致性,表示在任意时刻,什么时候读到的数据都和最后一次写的值相等。
Availability(可用性):
同样这里的可用性也是强可用性,表示在任何时候,分布式系统中提供服务的节点都能在一定的时间内做出响应,超出了这个时间就认为不满足强可用性。
Partition tolerance(分区容错):
与上两者一样,这里的分区容错也是强分区容错,表示在分布式系统中无论我们的部署的服务节点在什么子网中,都要能够保证节点之间能够正常通信。
例如:A节点在中国,B节点在国外,A节点向B节点发送数据,由于中国有墙,A节点和B节点不能正常通信,我们就认为不满足P。
总结一下:
C表示数据的状态。
A表示数据在传输过程中消耗的时间,可以认为表示时间。
P表示数据在空间上传输是否能够正常,可以认为是空间。
由于分布式系统的特点,包括我们客户端和服务端要满足正常通信,所以认为P是必须要成立的。
其实我认为,并不能够在真正的意义上达到CAP。就像P所描述的一样,网络传输目前来说必须要有介质才能通信,如果中间的介质都无效了,就达不到P。
所以我觉得没有真正意义上的完全CAP,就像是永动机一样。但一般我们还是会说相对满足CP,AP或者说CA。
那我们如何选择CP,AP呢?或者说难道满足CP就不去满足A,满足AP就不去满足C了吗?
答案:BASE理论。
BASE理论
BASE理论是前辈们对大规模分布式系统的实践总结,用于权衡CAP。
BASE理论分为三部分
基本可用(Basically Available)
基本可用是指在分布式系统发生故障的时候,系统不能够在规定的时间内做出应答,但是他能够给出应答,只是不能够在规定的时间内满足,我们允许它损失部分可用性来保证它的可用性。
打个比方说:你房间里有五个灯,而隔壁房间的五个灯都坏了,你把你房间的一部分灯换到隔壁房间,隔壁房间就不至于黑不溜秋的,虽然比起之前五个灯要暗一些,但最起码能够看到。
像现在电商平台为了应对访问量激增的情况,都会对部分用户做降级页面引导。
软状态(Soft state)
软状态是指在允许系统在运行的过程可以出现中间状态,但是该状态不会影响系统整体的可用性。
例如:
我需要去舞台上演出,但是我在演出之前由于一些原因,我的服装弄脏了,没有办法演出了,而我去借了一套服装,顺利的完成了演出。
例子中服装虽然出现了一些问题,但是演出还是顺利进行了,中间服装的状态没有影响到演出的顺利进行。
最终一致性(Eventual Consistency)
最终一致性可以理解成数据在经历不同节点的处理后,最后的结果保持一致。
例如:
与分布式事务中事务的最终一致性一样,假设有两个事务A和B,事务A的执行结果是true,事务B的执行结果是false,但经过事务协调者的协调后,最终两个事务的执行结果都认为是false。
总结:
CAP的选择还是取决于项目对那一个点的需求比较高,在结合CAP和BASE这些概念来进行选择到底是选择AP还是CP。
以上描述仅仅是个人理解,不喜勿喷,谢谢。