1.分布式事务?

本地事务的ACID

  • A-原子性,事务中所有的操作要么全部成功,要么全部失败;
  • C-一致性,要保证数据库内部的完整性约束、声明性约束;
  • I-隔离性,对同一资源操作的事物不能同时发生
  • D-持久性,对数据库的修改将永久保存,不管是否出现故障。

分布式事务,指的是在分布式的架构中,一个业务操作可能需要多个服务,多个数据库共同完成,传统的数据库事务只能保证当前服务的事务,无法保证分布式事务的一致性
image.png

常见解决方案:
基于XA的二阶段提交 :强一致性,性能差
基于TCC : 补偿性, 性能好,不依赖数据库, 但是每个事务环节都要提供3个方 try confirm cancel 代码改造量大
基于MQ+本地消息表 : 利用可靠性消息,将一个大分布式事务,拆成若干小的环节,通过消息队列达到最终一致性 异步 性能快 ,代码实现复杂,一致性比较弱

2.CAP原理?

  • C-一致性,用户访问分布式系统中的任意节点,得到的数据必须一致。
  • A-可用性,用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝。
  • P-分区容错性,因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,形成独立分区。

因为P一般很难避免,所以一般分为以一致性为主的CP,和以可用性为主的AP。

3.BASE理论?

BASE理论是对CAP的一种解决思路,包含三个思想:

  • Basically Available(基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。
  • Soft State(软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态。
  • Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致。

    4.什么是Seata?

    Seata是阿里巴巴为解决分布式事务开发的一款开源的框架。致力于提供高性能和简单易用的分布式事务服务,为用户打造一站式的分布式解决方案。

Seata事务管理中有三个重要的角色:

  • TC (Transaction Coordinator) -事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。
  • TM (Transaction Manager) -事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
  • RM (Resource Manager) -资源管理器:管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

    5.AT模式工作原理?

    image.png
    AT模式采用二阶段提交:
    @GlobalTransactional 给方法开启全局事务,实现AOP方法的增强, 会调用服务端创建一条 全局事务数据

    第一阶段: 执行每个分支事务
    当我们的业务sql被执行前,会先注册一个分支事务, 将我们的业务sql + 业务sql对应生成回滚信息 在一个本地事务中执行,回滚信息会存放在undo_log表中

    第二阶段:
    情况1: 一阶段全部成功
    根据全局事务ID 及 分支事务ID 异步的删除所有相关的回滚日志undo_log日志
    情况2: 一阶段失败
    根据全局事务ID 及 分支事务ID,查询对应的回滚日志,根据回滚日志的内容生成反向的sql 进行数据的回滚

    6.Seata的优缺点

    优点: java项目 JDBC ,可实现原子性事务,要么全部成功 要么全部失败,性能要比XA非常高 ,对代码的侵入性非常低。

    缺点: 脏读 ,如果想避免 select for update , 开启全局锁 性能下降如果数据被seata以外操作修改,回滚有可能失败 性能相对xa和高,但要其它的 mq方案 tcc方案。