概述
CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼,通常只能取其二。
- C(一致性):在分布式系统中所有的数据备份,在同一时刻是否有同样的值。
- A(可用性):好的响应性能。
- P(分区容错性):在网络上有部分消息丢失,系统是否能正常运行。
例如: - CA without P
单节点关系型数据库,不具备分区容错性,显然一旦单个节点挂掉,整个数据库系统就全挂掉。但是却拥有一致性和可用性,单点数据库对事务的支持,以及多表关联是非常容易实现的。 - CP without A
在分布式环境下,为了确保一致性,往往会导致可用性降低。例如service A 和 service B为了确保一致性,会使用到分布式事务或者分布式锁,这些操作会导致处理时间加长,而这些service的分区更会加重这种情况。
例如zookeeper,可以实现集群,具备P,为了强一致性,zookeeper会两两通信,保证数据一致。当集群节点少的情况下,性能尚能接受,但是在节点数量庞大的情况下,zookeeper为了保证强一致性会导致很多的资源消耗,导致可用性严重降低。 - AP without C
在某些业务场景下,为了高可用性,则需放弃一致性。一旦分区发生错误,节点之间会失去联系,为了不影响服务的响应时间,节点使用本地数据服务,这样会导致各节点数据不一致。
例如:eureka,与zookeeper思路相反,为了保证高可用,放弃一致性。
与CAP理论相似或者相关的还有ACID和BASE理论。
ACID:
- Atomicity原子性:一个事务中所有操作都必须全部完成,要么全部不完成。
- Consistency一致性. 在事务开始或结束时,数据库应该在一致状态。
- Isolation隔离层. 事务将假定只有它自己在操作数据库,彼此不知晓。
- Durability持久性:一旦事务完成,就不能返回。
这个理论主要运用在了关系型数据库,但是分区复杂度高。
BASE
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于CAP定理逐步演化而来的。该理论允许一段时间内的状态不一致,比如在某app上购物,发起第三方支付,用户支付状态不可能立即同步到数据库。如果支付成功,第三方会调用回调接口或者app主动查询来完成状态一致,这就是一个典型的最终一致的场景。虽然有短暂的数据不一致,但是大多数系统下,完成这个数据一致校正是非常快的,使用户察觉不到这个过程。
总结:在结合业务的情况下,设计人员总会再CAP中做出些角色,取其二以满足业务系统的需求。
ps: 如有错误,或者理解不到位的地方,欢迎大家对我指摘。谢谢。