Spring Cloud Alibaba Seata TCC 事务模式

首先我们先来了解常规的TCC模式。

什么是TCC

TCC 是分布式事务中的二阶段提交协议,它的全称为 Try-Confirm-Cancel,即资源预留(Try)、确认操作(Confirm)、取消操作(Cancel),他们的具体含义如下:

  1. Try:对业务资源的检查并预留;
  2. Confirm:对业务处理进行提交,即 commit 操作,只要 Try 成功,那么该步骤一定成功;
  3. Cancel:对业务处理进行取消,即回滚操作,该步骤回对 Try 预留的资源进行释放。
阅读更多

Spring Cloud Alibaba Seata XA 模式

Seata 1.2.0 版本重磅发布新的事务模式:XA 模式,实现对 XA 协议的支持。

我们从三个方面来深入分析:

  1. XA模式是什么?
  2. 为什么支持XA?
  3. XA模式如何实现的,以及如何使用?

XA模式

首先我们需要先了解一下什么是XA?

XA 规范早在上世纪 90 年代初就被提出,用以解决分布式事务处理这个领域的问题。

注意:不存在某一种分布式事务机制可以完美适应所有场景,满足所有需求。

现在,无论 AT 模式、TCC 模式还是 Saga 模式,这些模式的提出,本质上都源自 XA 规范对某些场景需求的无法满足。

阅读更多

Spring Cloud Alibaba Seata 配置 Nacos 注册中心和配置中心

Seata支持注册服务到Nacos,以及支持Seata所有配置放到Nacos配置中心,在Nacos中统一维护;

高可用模式下就需要配合Nacos来完成

image20220118234555417.png

具体配置如下

注册中心

Seata-server端配置注册中心,在registry.conf中加入配置注册中心nacos
注意:确保client与server的注册处于同一个namespace和group,不然会找不到服务。

阅读更多

Spring Cloud Alibaba Seata AT 模式

概念:AT模式是一种无侵入的分布式事务解决方案,在 AT 模式下,用户只需关注自己的“业务 SQL”,用户的 “业务 SQL” 作为一阶段,Seata 框架会自动生成事务的二阶段提交和回滚操作。

整体机制

两阶段提交协议的演变:

  • 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
  • 二阶段:
    • 提交异步化,非常快速地完成。
    • 回滚通过一阶段的回滚日志进行反向补偿。

一阶段

在一阶段中,Seata会拦截“业务SQL“,首先解析SQL语义,找到要更新的业务数据,在数据被更新前,保存下来”undo”,然后执行”业务SQL“更新数据,更新之后再次保存数据”redo“,最后生成行锁,这些操作都在本地数据库事务内完成,这样保证了一阶段的原子性。

阅读更多

Spring Cloud Alibaba Seata Server(TC)环境搭建详解

Server端存储模式(store.mode)支持三种:

  1. file:单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高(默认)
  2. DB:高可用模式,全局事务会话信息通过DB共享,相对性能差一些
  3. redis:Seata-Server1.3及以上版本支持,性能较高,存在事务信息丢失风险,需要配合实际场景使用。

具体操作

  1. 修改Seata-Server模式为DB高可用模式

image20220118173041657.png

阅读更多

Spring Cloud Alibaba Seata 简介

分布式事务解决方案

2PC即两阶段提交协议,是将整个事务流程分为两个阶段,P是指准备阶段,C是指提交阶段。

  1. 准备阶段(Prepare phase)
  2. 提交阶段(commit phase)

举例:比如说相亲对象两个人去吃饭,店老板要求,先付钱在吃饭,这是男女双方提出了AA,也就是说只有男女双方都付钱,才能落座吃饭,但是只要两个人中有一个不同意付款就不能落座吃饭。

  • 准备阶段:老板要求男方付款,男方付款。老板要求女方付款,女方付款
阅读更多

分布式事务简介

概念

基础概念:事务ACID

  • A(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失 败的情况。
  • C(Consistency):一致性,在事务执行前后,数据库的一致性约束没有被破坏。比如:张三向李四转100元, 转账前和转账后的数据是正确状态这叫一致性,如果出现张三转出100元,李四账户没有增加100元这就出现了数 据错误,就没有达到一致性。
  • I(Isolation):隔离性,数据库中的事务一般都是并发的,隔离性是指并发的两个事务的执行互不干扰,一个事 务不能看到其他事务运行过程的中间状态。通过配置事务隔离级别可以避脏读、重复读等问题。
阅读更多

Spring Cloud Gateway Filter

路由过滤器允许以某种方式修改传入的 HTTP 请求或传出的 HTTP 响应。路由过滤器的范围是特定的路由。Spring Cloud Gateway 包含许多内置的 GatewayFilter 工厂。

image20220107175844624.png

内置Filter

  1. GateWay内置的Filter生命周期为两种:pre(业务逻辑之前)、post(业务逻辑之后)
阅读更多

Spring Cloud Gateway 实现负载均衡

自动负载均衡

首先我们看一下我们之前的网关服务9999的yml配置,这里的配置信息,其实有一些,咱们目前是不清楚的,比如:

  1. gateway.discovery.locator.enabled: true #开启自动路由功能
  2. routes中的uri其实最后是不需要服务名称的,这个位置其实只需要指定的localhost:9001即可
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server:
 port: 9999
spring:
 application:
   name: cloud-gateway-service
 cloud:
   nacos:
     discovery:
       server-addr: localhost:8848
   gateway:
     discovery:
       locator:
         enabled: true #开启自动路由功能,根据服务名称自动创建routes
     routes:  # 路由
       - id: nacos-provider #路由ID,没有固定要求,但是要保证唯一,建议配合服务名
         uri: http://localhost:9001/nacos-provider # 匹配提供服务的路由地址
         predicates: # 断言
           - Path=/msb/** # 断言,路径相匹配进行路由
阅读更多