分布式事务
分布式应用(微服务架构)下,由不同的服务之间通过网络协作完成的事务称之为分布式事务
场景
微服务:创建订单减库存事务,银行转账事务等,跨jvm进程
多数据库:单体系统访问多个数据库实列,且两个数据库之间的数据存在同步性,属于跨数据库实列
多个服务访问同一个数据库:不同进程与数据库存在不同的链接,也是跨jvm进程
基础理论
1. CPA理论
-
Consistency(一致性)
写操作后的读操作可以读取到最新的数据状态,当数据分布在多个节点上,从任意节点读取到的数据都是最新的状态
例如:商品写入主数据库成功,则查询从数据库数据也成功,反之则反之
如何实现:1.写入后同步至从数据库。2.写入后,在向数据库同步期间将从数据库资源锁定,待同步完成后在释放锁,以免在新数据库写入成功后,向数据库查询到旧的数据
问题:由于数据同步过程需要时间,所以写操作存在一定的延迟,其次会锁定资源,待数据同步之后在释放,再次,如果亲求数据同步失败的节点则返回错误信息,一定不能返回旧数据
-
Availability(可用性)
任何事务操作都可以得到响应结果,且不会出现响应超时或响应错误
例如:数据库接受到数据查询的请求则立即能够响应数据查询结果,且不允许出现响应超时或响应错误
如何实现:1.写入后同步至从数据库。2.写入后,在向数据库同步期间不能将从数据库资源锁定。3. 即使没同步完全的数据,也要防护查询的结果,哪怕是旧数据,或者约定的默认值,不能错误或超时
特点:必须响应所有请求
-
Partition(分区容忍性)
针对分布式中不同节点部署在不同子网的情况下(网络分区),不可避免会出现因为网络问题而导致的节点之间通信失败,此时仍可对外提供服务
例如:1. 主数据库向从数据库同步数据失败不能影响写操作。2. 一个节点挂掉不能影响另一个节点对外提供服务
如何实现:1. 异步取代同步,实现松耦合。2. 添加节点,挂掉一个后,另一个节点提供服务
特点:分区容忍性特点是分布式系统应该具备的基本能力
-
不能同时具备CAP,在具备了P的前提下,C,A无法共存
AP:如淘宝等,但是最求AP最终还是要满足最终一致性,即有时间差异,但是最终结果还是一致
CP:比如zookeeper就是追求强一致性,比如跨行转账
CA:单一系统满足CA
2. base理论
指Basically Available,Soft state 和 Eventually consistent(最终一致性)三个短语的缩写,是CAP理论中AP理论的一个扩展,通过牺牲强一致性来获得可用性,允许故障部分不可用,但确保核心功能可用