本文介绍: 目录事务ACID原则一、理论基础1)CAP理论CAP定理– ConsistencyCAP定理– AvailabilityCAP定理-Partition tolerance2)BASE理论二、分布式事务Seata1)初识seata2)Seata架构3)微服务集成seata1、首先,引入seata相关依赖:2、然后配置application.yml,让微服务通过注册中心找到seatatcserver:三、XA模式1)XA模式原理2…

目录

事务ACID原则

一、理论基础

1)CAP理论

CAP定理- Consistency 

CAP定理- Availability


 

1998年,加州大学计算机科学家 Eric Brewer 提出,分布式系统有三个指标

Eric Brewer 说,分布式系统无法同时满足这三个指标。 这个结论就叫做 CAP 定理

Consistency(一致性用户访问分布式系统中的任意节点,得到的数据必须一致

 Availability (可用性用户访问集群中的任意健康节点,必须能得到响应,而不是超时拒绝

Partition(分区:因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,形成独立分区

Tolerance(容错):在集群出现分区时,整个系统也要持续对外提供服务 

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

        而分布式事务最大问题各个事务一致性问题,因此可以借鉴CAP定理和BASE理论:

Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案

致力于提供高性能简单易用的分布式事务服务,为用户打造一站式的分布式解决方案

官网地址http://seata.io/,其中的文档、播客中提供了大量的使用说明源码分析

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

Seata提供了四种不同的分布式事务解决方案

1、首先,引入seata相关依赖

<dependency&gt;    
<groupId&gt;com.alibaba.cloud</groupId>    
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>    
<exclusions>        
<!--版本较低,1.3.0,因此排除-->         
<exclusion>            
<artifactId>seata-spring-boot-starter</artifactId>          
<groupId>io.seata</groupId>        
</exclusion>    
</exclusions>
</dependency>
<!--seata starter 采用1.4.2版本-->
<dependency>    
<groupId>io.seata</groupId>    
<artifactId>seata-spring-boot-starter</artifactId>    
<version>${seata.version}</version>
</dependency>

2、然后配置application.yml,让微服务通过注册中心找到seata-tcserver

XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准

XA 规范 描述全局的TM与局部的RM之间的接口,几乎所有主流的数据库都对 XA 规范 提供了支持

seata的XA模式做了一些调整,但大体相似:

RM一阶段的工作

TC二阶段的工作

TC检测各分支事务执行状态

  • 如果都成功,通知所有RM提交事务
  • 如果有失败通知所有RM回滚事务

RM二阶段的工作

Seata的starter已经完成了XA模式的自动装配,实现非常简单步骤如下: 

1、修改application.yml文件每个参与事务的微服务),开启XA模式:

seata:  
  data-source-proxy-mode: XA # 开启数据源代理的XA模式

2、给发起全局事务的入口方法添加@GlobalTransactional注解

本例中是OrderServiceImpl中的create方法

@Override@GlobalTransactional
public Long create(Order order) {    
    // 创建订单    
    orderMapper.insert(order);    
    // 扣余额 ...略 
    // 扣减库存 ...略    
    return order.getId();
}

3、重启服务并测试

AT模式同样是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过长的缺陷

阶段一RM的工作

阶段二提交时RM的工作

阶段二回滚时RM的工作

流程如下

 

TCC模式与AT模式非常相似,每阶段都是独立事务,不同的是TCC通过人工编码来实现数据恢复需要实现三个方法

TCC的工作模型图:

        当某分支事务的try阶段阻塞时,可能导致全局事务超时触发二阶段的cancel操作。在未执行try操作时先执行cancel操作,这时cancel不能做回滚,就是空回滚。 

        对于已经空回滚的业务,如果以后继续执行try,就永远不可能confirmcancel,这就是业务悬挂。应当阻止执行空回滚后的try操作,避免悬挂

Saga模式是SEATA提供的长事务解决方案。也分为两个阶段:

Saga模式优点:

缺点:

 

XA

AT

TCC

SAGA

一致性

强一致

弱一致

弱一致

最终一致

隔离

完全隔离

基于全局锁隔离

基于资源预留隔离

无隔离

代码侵入

有,要编写三个接口

有,要编写状态机和补偿业务

性能

非常好

非常好

场景

对一致性、隔离性有高要求的业务

基于关系型数据库的大多数分布式事务场景都可以

对性能要求较高的事务。

有非关系型数据库要参与的事务。

业务流程长、业务流程

参与者包含其它公司或遗留系统服务,无法提供 TCC 模式要求的三个接口

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注