本地事务:
AICD原则: 原子性、隔离性、一致性、持久性
分布式事务:
分布式系统环境下不同的服务之间通过网络远程协作完成事务称为分布式事务
分布式事务的使用场景
1.微服务之间通过远程调用完成事务操作(跨JVM进程产生分布式事务)
2.单体系统访问多个数据库实例(跨数据库实例产生分布式事务)
3.多服务访问同一个数据库实例
CAP理论
解决方案
2PC
Seata方案(基于2PC的基础向3PC演进)
1.分支事务第一阶段就已经提交
2.补偿回滚是基于undolog,不用自己写补偿操作
使用场景:
业务场景比较简单,事务嵌套不强的时候使用
缺点是补偿操作是针对数据库的固定的补偿行为
3PC
第一阶段两方都运行脚本但是不提交,此时断开连接,第二阶段,Tm通知两方运行脚本,第三阶段,TM查看两方是否都完成,如果有一方失败则叫另一方进行基于undolog的回滚
TCC
使用场景:
业务比较复杂,需要自定义补偿操作的时候
缺点是代码量较大
可靠消息最终一致性
解决方案一:
本地消息表方案
解决方案二:
RocketMQ事务消息方案
消费不成功会一直重试
使用场景:内部系统,需要1对1的时候
最大努力通知
使用场景:通知外部系统的时候,为了不暴露内部MQ,写一个接口给外部系统回调,可以1对多广播