CAP理论的具体内容是一个分布式系统在分布式环境下设计和部署时不可能同时满足一致性(C:Consistency)、可用性(A:Availability)、分区容错性(P:Partition tolerance)这3项基本需求,并且最多只能满足其中的两项。对于一个分布式系统来说,分区容错性是基本需求,否则不能称为分布式系统。因此架构师需要在一致性和可用性之间寻求平衡。
1)一致性:分布式存储系统需要使用多台服务器共同存储数据,有些数据有多个副本,由于故障和并发等情况,同一数据的多个副本之间可能存在不一致的情况。保证多个副本的数据完全一致的性质为一致性。在分布式计算中,执行某项数据的修改操作之后,所有节点在同一时间具有相同的数据,就表明系统具有一致性。
2)可用性:分布式存储系统需要多台服务器同时工作,在系统中有的节点出现故障之后,系统整体不影响客户端的读/写请求的性质称为可用性。在每一个操作之后,无论成功或失败,系统都要在一定时间内返回结果,保证每个请求都有响应,系统操作之后的结果应该是在给定的时间内反馈的,否则认为不可用或操作失败。可用性就是服务一直可用,而且满足正常响应时间的要求。
3)分区容错性:分布式存储系统中的多台服务器通过网络进行连接,系统需要具有一定的分区容错性来处理网络故障带来的问题。当一个网络因为故障而分解为多个部分的时候,系统中任意信息的丢失或失败都不会影响系统继续运行。在网络被分隔成若干个孤立的区域时,系统仍然可以接受服务请求。分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性要求的服务。
CAP理论的核心:一个分布式系统不可能同时很好地满足一致性、可用性和分区容错性这3个需求,最多只能同时较好地满足其中两个。系统的设计者要在3个需求之间做出选择。
1)CA原则:强一致性和可用性在单点集群是可以保证的。满足一致性、可用性的系统,在可扩展性上不尽如人意。
2)CP原则:每个请求都需要在服务器之间强一致性,而网络分区会导致同步时间无限延长。满足一致性、分区容错性的系统,通常性能不高。这个原则对网络环境的要求特别高。
3)AP原则:高可用性并允许分区,则需放弃强一致性。一旦网络分区发生,节点之间就可能会失去联系,每个节点只能用本地数据提供服务,这样会导致全局数据的暂时不一致。满足可用性、分区容错性的系统,通常要牺牲一些一致性。
CAP理论是为了探索不同应用的一致性与可用性之间的平衡,在没有发生分区时,可以满足一致性与可用性,以及ACID事务支持,通过牺牲一定的一致性来获得更好的性能与可扩展性;在有分区发生时,选择可用性,集中关注分区的恢复,需要制定分区前、中、后期的处理策略,以及合适的补偿处理机制。
由于分布式数据库的结构特性,实现ACID事务需要付出很高的成本来维护可用性,所以为了保障可用性总结出了一套弱化的事务特性。CAP理论定义了分布式存储的根本问题,但并没有指出一致性和可用性之间到底应该如何权衡。于是出现了BASE模型,该模型给出了权衡一致性与可用性的一种可行方案。