分布式事务Seata(一)

分布式事务是源于微服务的,服务之间的存在调用,且整个调用链路上存在多处写数据库表的行为,那么,分布式事务就是保证这些操作要么全部成功,要么全部失败。截屏2022-03-29 18.31.55

分布式事务追求的一致性(业务特性

  • 强一致性:任何一次读都能读到某个数据的最近一次写的数据(要求最高)
  • 弱一致性:数据更新后,如果能容忍后续访问只能访问到部分或者全部访问不到,则是弱一致性(绝大多数的业务场景都是不允许的)
  • 最终一致性:不保证在任意时刻数据都是完整的(状态一致),但是,随着时间的推移,数据总是会达到一致的状态。(异步操作)

常用的分布式事务的解决方案:

  1. 两阶段提交:指的是分两步提交:存在一个中央协调器负责协调各个分支的事务截屏2022-03-29 18.38.11

  2. 本地消息表:是将需要分布式处理的任务通过消息日志的方式来异步执行

    截屏2022-03-29 18.47.04

2.分布式事务解决方案 Seata AT 模式

2.1 概述

Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务,官网 http://seata.io/zh-cn/

2.2 Seata的过程模型

  • Seata 中三个重要的角色:TC、TM、RM

    截屏2022-03-29 18.52.55

2.3 Seata的事务模型

  • Seata定义了全局事务的框架,全局事务定义为若干分支事务的整体协调

    截屏2022-03-29 18.54.53

2.4 Seata AT 模式的整体机制

  • AT对业务代码完全无侵入性,使用非常简单,改造成本低,我们只需要关注自己的业务sql,Seata会通过分析我们的业务sql,反向生成回滚数据截屏2022-03-29 19.00.30

2.5 Seata AT模式工作示例

  • 两个全局事务tx1和tx2,分别对a表的m字段进行更新操作,m的初始值为1000

    TB1zaknwVY7gK0jSZKzXXaikpXa-702-521

    • 一阶段本地事务提交前,需要确保先拿到全局锁

    • 拿不到全局锁,不能提交本地事务

    • 拿全局锁的尝试被限制在一定范围内,超出范围将放弃,并回滚本地事务,释放本地锁。

  • 如果tx1的二阶段全局回滚,则tx1需要重新获取该数据的本地锁,进行反向补偿更新操作,实现分支回滚。TB1xW0UwubviK0jSZFNXXaApXXa-718-521

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值