携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第3天,点击查看活动详情
CAP理论是什么
分布式事务处理的理论基础就是CAP,CAP指的是: 设计分布式系统时需要考虑3个方面,分别是:一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance),并且分布式系统最多满足两个方面,无法同时满足三种条件。
CAP释义:
一致性(Consistency):假设服务有多个节点,每个节点都存储了用户数据, 那么每个节点的数据需要保持同一时刻数据一致,这叫一致性。
可用性(Availability):当服务只有一个节点时,节点发生宕机,那么系统就会无法对外提供服务,而假设服务有多个节点,其中一个结点宕机不影响整个集群对外提供服务,故增加服务的节点个数,是为了保证系统的可用性。
分区容错性(Partition Tolerance):分区容忍性就是允许系统通过网络协同工作,例如,将数据库拆分为多个不同的数据库,并且将每个数据库分别部署在不同的地区、不同的网络,这样即使在某个地区发生网络波动或者网络断开时,其他地区的数据库还能继续提供服务,这就叫分区容错性。
CAP三选二
为什么分布式系统不能同时满足C、A、P呢?
因为在保证分区容忍性的前提下,一致性和可用性无法同时满足,如果要保证系统的可用性,那么就会增加多个服务节点,而节点增加的越多,数据一致性就会越来越差,只有节点越少时,数据一致性才最好保证,所以C和A是互斥的,故也就不能同时满足C、A、P三种条件了。
因为C和A的互斥,所以在设计分布式系统时,普遍考虑的是:
- 满足AP,即可用性和分区容错性,放弃一致性,但是也不是完全放弃一致性,而是追求最终一致性,就是在某个节点数据有更新之后,不要求每个节点立马都要查询出最新的数据,而是允许每个节点数据的暂时不一致,在用户接受的时间范围内,更新每个节点的数据使其达到最终一致性即可。
- 满足CP,放弃可用性,加强一致性和分区容忍性,一些强一致性要求的系统按CP进行设计,比如跨行转账,一次转 账请求要等待双方银行系统都完成整个事务才算完成。 说明:由于网络问题的存在CP系统可能会出现待等待超时,如果没有处理超时问题则整理系统会出现阻塞。
在分布式系统设计中AP的应用较多,即保证分区容忍性和可用性,保证数据的最终一致性。比如:订单退款,退款即刻成功,但是钱要几个小时后或者几天之后到账,只要在用户接受的时间内走完事务流程即可。