基本概念
- 一致性(C,Consistency) :在分布式系统中的所有数据备份,在同一时刻,是否同样的值。
- 可用性(A,Availability) :在集群中,一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)
- 分区容忍性(P,Partition tolerance) :在遇到任何网络分区故障的时候,仍然能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。(即在节点间通信失败时,保证系统不受影响)
什么是CAP理论?
在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)3 个要素最多只能同时满足两个,不可兼得。而由于网络硬件肯定会出现延迟丢包等问题,所以分区容错性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择,要么停止系统用于错误恢复(保证一致性), 要么继续服务但是降低一致性(保证可用性)。
网络异常,图片无法展示
|
CAP有哪些组合方式?
1、CA:放弃分区容忍性,加强一致性和可用性,关系数据库、单体应用按照CA进行设计。如MYSQL
2、AP:放弃一致性,加强可用性和分区容忍性,追求最终一致性,很多NoSQL数据库按照AP进行设计。如Cassandra、Dynamo等,默认优先选择AP,弱化C;
说明: 这里放弃一致性是指放弃强一致性,强一致性就是写入成功立刻要查询出最新数据。追求最终一致性是指允许暂时的数据不一致,只要最终在用户接受的时间内数据一致即可。
3、CP:放弃可用性,加强一致性和分区容忍性,一些强一致性要求的系统按CP进行设计,比如跨行转账,一次转账请求要等待双方银行系统都完成整个事务才算完成。如HBase、MongoDB等,默认优先选择CP,弱化A。
说明: 由于网络问题的存在,CP系统可能会出现待等待超时,如果没有处理超时问题则整体系统会出现阻塞。
总结
在分布式系统设计中AP的应用较多,即保证分区容忍性和可用性,牺牲数据的强一致性(写操作后立刻读取到最新数据),保证数据最终一致性。比如:订单退款,今日退款成功,明日账户到账,只要在预定的用户可以接受的时间内退款事务走完即可。