分布式事务

发布时间 2023-05-31 20:03:01作者: 一只快乐的柠檬精J

分布式事务

回顾事务

什么是事务 ?

  • 一组对数据库的操作,整体要么一起成功,要么一起失败

事务的特性?

  • 一致性
  • 原子性

在项目中做事务控制 ? 怎么做 ?

  • 在启动类上加@EnableTransactonManager
  • 事务加在service层,加在实现类上或者接口上,都可以@transactional

分布式事务背景

CAP : 分布式系统定理

C:一致性 +A: 可用性 + P:分区性

  • 单独理解三个指标含义
  • 三个指标只能选择两个
  • p是一定要考虑的,分区是不可避免的

  • CP: 大家一起提交,一起失败,必须完全一致
  • AP: 最终一致即可(eg:服务器宕机了,但是仍然可以执行,服务器恢复后重新执行。。)

全局事务 : 整个分布式事务

分支事务 : 事务参与者 (子事务)

Seata架构(事务管理)

阿里开源的,解决分布式事务的,有三个主要概念,见下

  • TC :事务协调者 决策者 安装seata
  • TM : 事务管理器 全局事务 (微服务相关)
  • RM : 资源管理器 事务参与者 (微服务相关)

seata提供的四种分布式事务解决方案

  • XA : 把整个事务分成两阶段提交 : 第一阶段准备(本地事务不提交),第二阶段提交或者回滚(看返回的结果,大家是否都是OK),

    • 缺点 : 完全依赖与数据库事务控制,第一阶段不提交,会锁定数据库资源,造成阻塞,性能差
    • 特点 : 强一致

  • 在JAVA中部署的步骤:

  • TCC

  • AT : 解决 XA 模式的缺点,仍是两阶段提交(2PC )

    • 注册分支事务,准备阶段时,执行sql后,直接提交本地事务(无法依赖数据库事务回滚或者提交),报告当前状态给事务协调者TC
      • 记录更新前后快照 (数据),存入undo_ log日志表中
    • 回滚或者提交 (完成后都要删除undo_log)
    • 最终一致
  • SAGA