本文偏理论
一、事务处理
1、事务处理的四个特性ACID
Atomicity 原子性:
对于数据库的修改,全部执行or全部不执行
Consistency 一致性:
Isolation 隔离性 :
亦称为串行化,防止事务间操作混淆,需要串行化或者序列化请求,使得在同一时间仅有一个请求用于同一数据
Durability 持久性:
分布式事务处理方案及分布式锁相关
2、本地事务处理
Spring注解@Transactional
使用@Transactional,使用aop(面向切面)的方式进行管理,可使用isolation配置事务隔离级别,我的理解是Spring基于单体服务模式的本地事务处理,并不是分布式的处理方式
3、分布式事务解决方案
应对场景:
一个事务有多个步骤组成,涉及跨服务(应用)或者跨数据库的事务场景,大致可分为三类场景:同服务跨库场景、跨服务场景、混合式场景
如客户下单,涉及订单服务、库存服务、支付服务、积分服务,任何一步失败,都涉及相关事务的处理
处理逻辑:
强一致性(设计复杂)、最终一致性(使用较多)
解决方案:
业务设计原则:允许空补偿 、幂等性、防悬挂
*空补偿:*Cancel执行时,Try未执行,事务分支的Cancel操作需要判断出Try未执行,这时需要忽略Cancel中的业务数据更新,直接返回
*悬挂:*Try执行时,Cancel已执行完成,事务分支的Try操作需要判断出Cancel一致性,这时需要忽略Try中的业务数据更新,直接返回
(1)TCC模式
补偿型事务(try confirm cancel)
(2)Saga模式
补偿型事务,但是它没有 try 阶段,而是把分布式事务看作一组本地事务构成的事务链
(3)基于消息的分布式事务
对业务侵入较低,最终一致性的解决方案
对消息中间件要求较高,且普通消息不能支持,需要中间件支持事务型消息(RocketMq)
或者通过维护 本地消息表来实现
二、分布式锁
应对场景:
集群模式下,一个方法或属性在高并发情况下的同一时间只能被同一个线程执行
实现方式:
1、基于数据库实现
2、基于redis实现
3、zookeeper
参考文档:
分布式事务解决方案
https://mp.weixin.qq.com/s/2AL3uJ5BG2X3Y2Vxg0XqnQ
分布式锁的三种实现方式
https://cloud.tencent.com/developer/article/1628536