CAP理论听起来很高大上,其实很简单。
一致性(Consistency): 保证数据一定是一致的,对的
可用性(Availability):保证系统能用
分区容错性(Partition Tolerance):就算网络出了问题(分区),我也能忍
在分布式系统中,网络是肯定会出问题的,不可避免的,比如服务器挂了,程序挂了,网线被踢掉了,网络超时等等。
各个服务器原来通过网络连接,连成一片,在一个大的区域中,互相之间要同步数据,现在网络出了问题,各个服务器之间就断了联系,相互之间被隔离了,数据同步不了了,这就形成了分区。
出现了分区,我们也认了,这是网络错误,是无法避免的,所以分区容错性即P,在分布式系统中是一直存在的。
那在P存在的前提下,我们到底是选择保证:数据是对的比较重要呢(CP),还是保证系统能用比较重要呢(AP)?
CP:比如A服务器的数据是要同步给B服务器的,现在网断了,A的数据传不过去了,我觉得保证数据对比较重要,如果A和B的数据对不上,后果很严重,为了保证A和B服务器的数据一致,干脆让A停止服务好了,直接给客户端返回错误信息,等网络恢复了,再上线,免得A和B的数据不一致。
AP:比如A服务器的数据是要同步给B服务器的,现在网断了,A的数据传不过去了,我觉得暂时的数据不一致没什么大关系,系统能用最重要,那我就继续让A提供服务,等网络恢复了,再同步数据到B。
CAP的问题就是网络不通的情况下,我们优先保证数据一致,还是优先保证系统可用的问题。