分布式CAP理论应用
基本概念
一致性(Consistency)
可用性(Availability)
分区容错性(Partition Tolerance)
分布式系统理论上不可能选择 CA 架构,而必须选择 CP 或 AP 架构。
分布式事务 BASE 理论:AP方案,但是保证弱一致性(最终一致性)。
应用
服务注册中心:
Dubbo 的 Zookeeper,Spring Cloud 的 Eureka,Consul
RocketMQ 的 nameServer,HDFS 的 nameNode
ZK为CP方案,Eureka为AP方案。
Eureka 的创建初心就是为一个注册中心,但是 ZK 更多是作为分布式协调服务的存在。
分布式锁:
基于数据库实现分布式锁(不存在CAP)
基于 Redis 实现分布式锁(AP方案,效率高)
基于 Zookeeper 实现分布式锁(CP方案,效率低)
分布式事务:
ACID:追求强一致性模型,关系数据库的 ACID 模型拥有高一致性+可用性,所以很难进行分区。
没法分区也就是在分布式场景是没法用的。任何微服务相关的都是涉及CAP的。
对于分布式事务来说,都是保证最终一致性(BASE理论)。
解决方案:
两阶段提交(2PC)——(两阶段提交就是使用 XA 原理,由于是阻塞模式,基本不用)
补偿事务(TCC)——(服务化的两阶段编程模型)
本地消息表——(将分布式事务拆分成本地事务进行处理https://queue.acm.org/detail.cfm?id=1394128)
MQ 事务消息——(RocketMQ 中实现了分布式事务,实际上是对本地消息表的一个封装,将本地消息表移动到了 MQ 内部。)
同步/异步:
虽然同步刷盘/异步刷盘,同步/异步复制,并没有对 CAP 直接的应用,但在配置的过程中也一样涉及到可用性和一致性的考虑。
异步不能保证一致性。同步就会阻塞,牺牲性能。