Seata简介及原理介绍

Seate简介

Seate是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式服务

  1. 常见的分布式事务解决方案
  • seata
  • 消息队列
  • saga
  • XA
    他们都有一个共同特点,都是两阶段提交。
  1. 两阶段提交
  • prepare:准备阶段
  • commit:提交阶段
    流程图如下
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/289b4c438f1a4795bffbeac03b0aa38f.png
两阶段提交
  1. 事务准备阶段
  • 询问:协调者向所有参与者发送事务请求,询问是否可以执行事务操作,然后等待各个参与者的回复
  • 执行:各个参与者收到协调者请求后,执行事务操作
  • 响应: 如果参与者成功执行了事务并写入了undo和redo信息,则向协调者返回yes响应
    在这里插入图片描述
  1. 事务提交阶段
    1. 事务正常提交
    • commit 请求: 协调者向所有参与者发送commit请求
    • 事务提交: 参与者收到commit请求后,执行事务提交,提交完成后释放事务执行器占用的资源
    • 反馈结果:参与者执行事务提交后向协调者发送ack响应
    • 完成事务: 接收到所有参与者的ack响应后,完成事务提交
      在这里插入图片描述
    1. 中断事务
    • rollback请求:协调者向所有参与者发送rollback请求
    • 事务回滚:参与者收到rollback后,使用prepare阶段的undo 日志执行事务回滚,完成后释放事务执行器占用的所有资源
    • 反馈结果:参与者执行事务回滚后向协调者发送ack响应
    • 中断事务:接收所有参与者的ack响应后,完成事务中断
      在这里插入图片描述
  2. 事务模式
    1. AT模式:auto transcation,是一种无侵入的分布式解决方案。在AT模式下,用户只需要关注自己的业务sql,seata框架会自动生成事务的二阶段提交和回滚操作
      在这里插入图片描述
      + 一阶段: Seate会拦截业务sql,解析sql语义,找到业务sql要更新的业务数据,在业务更新前,将要被更新的数据保存为before image,最后生成行锁。以上操作全部在一个数据库事务内完成。保证第一阶段的原子性
      在这里插入图片描述
      + 二阶段: 二阶段如果是提交的话。因为业务sql在一阶段已经提交,所以seata框架只需要将一阶段保存的快照数据和行锁删掉,完成事务
      在这里插入图片描述
      + 二阶段回滚: 如果是回滚,seata就需要回滚第一阶段的sql。还原业务数据,回滚方式就是用before image还原业务数据。但是首先要校验脏写,对比数据库当前数据和after image数据,如果一致就是没有脏写,如果不一致就需要转人工处理
      在这里插入图片描述
    2. TCC 模式
      TCC模式需要业务自己实现事务控制逻辑,侵入性强。try(),confirm(),cancel() 方法
      优点:没有锁的概念,性能更强
Seata原理:
  1. 第一阶段
    在这里插入图片描述
  2. 第二阶段- 提交事务
    在这里插入图片描述
  3. 第二阶段-回滚事务
    在这里插入图片描述
    优点:
    1. 应用层基于sql解析实现了自动补偿,降低业务侵入性
    2. 将分布式事务中TC(事务协调者)独立部署,负责事务的注册、回滚
    3. 通过全局锁实现了写隔离和读隔离
      缺点:性能较差
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值