CAP关注的是多节点互联场景下进行数据的读写操作,相互连接并且共享数据的多节点集合构成的分布式系统是CAP理论的前提。
C指的是Consistency(一致性),A指的是Availability(可用性),P指的是Partition Tolerance(分区容错性)。
分区容错性是指当发生网络分区,系统可以继续履行职责。分区现象可能是丢包、拥塞、亦或者是连接中断,当系统的部分节点出现这些情况时,不会影响其他节点。
因为探讨的是分布式环境,网络情况不可能是百分百正常的,所以P是必须满足的。
一致性是指客户端读取的数据一定是最新写入的结果。 数据库写操作在事务提交之前,客户端是读不了的,事务执行失败会自动回滚,保证客户端读取的是正常的最新数据,这里的一致性是从客户端角度来阐述的,因为事务在执行过程当中,系统处于不一致的状态,各节点之间的数据不可能完全一致。比如有A、B、C三个节点,A先向B同步数据,这个时候C和AB的数据并不一致。
可用性是指非故障的节点在合理的时间内返回合理(非错误和超时)的结果。比如某个请求合理的响应时间是在1秒内返回,超出1秒后返回就是不合理;再比如某请求的响应结果正常的错误码是200,100,实际响应结果是404就是不合理。
在满足P的情况下,如果发生网络分区,只能选择C或者A之间的一种,不可能同时满足三者。
假设有A、B两个节点,前一刻两个节点里的数据都是x,后一刻A节点写入了最新数据y,这时A节点把数据y同步到B节点的时候发生了网络分区。
如果要保证Consistency,那么客户端在请求B节点数据的时候,应该提示系统发生了错误,从而舍弃了Availability。
如果要保证Availability,那么客户端在请求B节点数据的时候,直接返回保存的数据即可,但这样也就舍弃了Consistency。
由此论证在分布式系统(相互连接并且共享数据的多节点集合)环境下,CAP同时只能满足CP或者AP。