分布式事务简介

135 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

分布式事务

​ 分布式系统中,通常一个业务可能涉及多张表,多个库;本地事务已经没办法满足分布式架构下的事务问题,因此引入分布式事务的方式来解决相关问题;

一般常见的分布式事务的解决方案:

  • 二阶段提交(2PC)

    分布式事务通常会有一个事务管理者来统一管理事务是否提交,是否执行等操作;

    • 阶段一:事务执行
      • 事务管理者向集群中的服务发起事务执行的请求,参与的服务执行事务,将实行的结果返回给管理者,成功或失败,将事务执行记录写入Undo日志,Redu日志;中间发生失败则统一回滚;
    • 阶段二:事务提交
      • 事务管理器向参与事务的服务发起commit提交事务请求处理,参与者提交事务释放当前占用的资源,完成事务提交后向管理者发送ACK确认,管理者收到确认则事务提交完成;

    这种方式逻辑简单易于操作开发

    但是在二段提交过程中会阻塞资源,在提交过程中当前参与者会占用公共资源,若此时有其他业务也要处理这个资源,会造成阻塞等待;

    依赖于事务管理器,如果阶段二在提交事务请求时,管理器挂了,那么占用着资源的参与者将会一直锁定资源;可能会在数据不一致

  • 三阶段提交(3PC)

    在二段式的基础上衍生出CanCommit、PreCommit、DoCommit三个阶段的概念

    • CanCommit阶段

      协调者向参与者发送CanCommit请求,然后等待参与者的响应,参与者认为可以参与事务执行,则返回yes否则返回 NO

    • PreCommit提交

      管理者根据参与者的响应果来决定是否执行,PreCommit;

      yes的话,则进行事务的预提交,把响应的日志文件写入undolog,返回预提交的结果到管理者;

      no的话,则是只要有一个参与者额响应是No则全部事务都会被中断取消

    • DoCommit阶段

      在这一阶段才是真正的提交事务操作

      根据上一阶段的响应结果,正式提交或者中断

XA规范

XA定义了三个角色

  • AP:业务层,就是当前操作属于哪个事务
  • TM:事务管理器 接收事务请求控制事务的执行和提交
  • RM:资源管理器,也就是事务的落地者;

基于两段式提交的方式,引入事务管理者(TM)用来统一管理各个机器的事务配置,跨数据库跨进程;

xa.png

补偿模式TCC

包含三种操作

Try:调用try接口,完成业务一致性检查,预留必业务资源;

Confirm: 对业务做提交操作。不做业务检查,只是用ry预留的业务资源

Cancel:业务执行错误,取消执行,释放Try预留业务资源。 由主业务方发起并完成业务活动,业务活动管理器可以变成多点, 引入集群。 同步阻塞:引入超时机制,超时后进行补偿,并且不会锁定整个资源,将资源转换为业务逻 辑形式,粒度变小。 数据一致性,有了补偿机制之后,由业务活动管理器控制一致性。