一站式分布式事物解决方案 seata

分布式事物seata-demo测试 springboot测试分布式事物seata 文章目录springboot测试分布式事物seata1.下载代码2.修改数据库和nacso地址3.启动代码测试 1.下载代码 seata服务端:https://github.com/seata/seata seata示例demo:https://github.com/seata/seata-samples Quick Start:https://git... 阅读详情

    之前我们聊完了分布式框架spring cloud,今天我们来聊下由分布式应用带来的问题,分布式事物。

什么是分布式事物,这里摘录一段分布式事物定义:

提起分布式事务,最早指的涉及多个资源的数据库事务问题。

wiki对分布式事务的定义:

Adistributed transaction is a database transaction in which two or more networkhosts are involved.

不过事务一词含义随着SOA架构逐渐扩大,根据上下文不同,可分为两类:

  1. Systemtransaction

    2.Businesstransaction

前者多指数据库事务,后者则多对应一个业务交易。与此同时,分布式事务的含义也在泛化,

尤其SOA、微服务概念流行起来后,多指的是一个业务场景,需要编排很多独立部署的服务时,

如何保证交易整体的原子性与一致性问题,这类分布式事务也称作长事务(long-livedtransaction),

例如一个定行程的交易,它由购买航班、租车以及预订酒店构成,而航班预订可能需要一两天才能确认。

为了统一对概念的理解,本文默认指的都是这类长事务。

 

    目前市面上已经有很多解决方案:TCC,SAGA,XA, SEATA等。TCC 方案有

ByteTCC、TCC-transaction、EasyTransaction等,SEATA也支持TCC模式,之所以说seata 是分布式事物一站式解决方案,是因为他集成了TCC,SAGA,XA(规划中)等方案。笔者之前也调研了一部分TCC框架,经过试验和组内反馈,使用是没有问题,但是TCC 方案对业务侵入太大,所谓TCC 也就是 try-confirm-catch ,原本一个动作需要拆分成三个逻辑接口,即资源申请冻结接口,确认操作接口,以及try接口失败的回滚接口。可以看到此方案对业务需要进行业务改造,当然也有优点,对数据库等资源没有使用锁等机制。

 

那么seata又是如何来解决的呢,我们先来看一张图片以及名词术语结束:

Seata术语

TC - 事务协调者

维护全局和分支事务的状态,驱动全局事务提交或回滚。

TM - 事务管理器

定义全局事务的范围:开始全局事务、提交或回滚全局事务。

RM - 资源管理器

管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

从图中我们可以看到 seata 将 事物TC(事物协调者)独立出来部署了。

结合上面的图示,说下seta框架的大致思路:

 

1.业务层发起远程服务调用时,首先向TC注册全局事务。

2.远程服务调用被调用时,先向TC注册分支事物(分支事物的ACID由本地事物提供保障),并且会向tc汇报分支事物的状态。

3.当所远程服务执行成功后会提交本地事务。

4,远程服务执行失败或者超时等,TC 会向所有RM 发起本地事物回滚指令,进行全局回滚。(如何回滚,当提交本地事物的时候,seata 会生成本地回滚sql 的镜像sql 存储至undo_log 表)

以上是seata 的大致流程思路,详细流程可以参考官方文档:

http://seata.io/zh-cn/docs/overview/what-is-seata.html

 

下面我们开始搭建seata 环境:

首先搭建seata server;下载地址:

http://seata.io/zh-cn/blog/download.html

当然也可以从git 自行下载最新版本:https://github.com/seata/seata

如果是从git拉取代码,启动server 之前需要先执行命令:

mvn clean install -DskipTests=true -U

打包命令:mvn clean install -DskipTests=true -U -P release-seata

如果是下载源码启动服务,只需要找到seata-server 目录下的Server 类右击run就可以了。如图

 

默认配置是file模式。即所有的全局事物,所信息等都是本次存储。

当然也可以修改file.conf 配置,修改为数据库存储(目前seata 支持 mysql 和oracle)

默认配置file  模式启动看到如下日志表示seata server 启动成功:

另外如果是需要以db形式存储,需要现在数据库执行相关脚本:

脚本在seata server resource 下:

默认是mysql版本的脚本,其他数据库可自行修改。

下面我们来运行官方提供的demo,官方提供了很多版本的demo,demo地址:https://github.com/seata/seata-samples

 

我们下载demo后,找到dubbo版本的demo:

具体运行什么demo,小伙伴们可以自行根据自己的兴趣选择。

需要使用seata ,需要添加maven依赖:

<seata.version>0.9.0</seata.version>
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-all</artifactId>
    <version>${seata.version}</version>

</dependency>

当然此处有一个小坑,seata 对jackson 的最低版本是2.9.9。

 

 

我们依次启动相应的dubbo 服务:

找到上图的dubbo 服务启动入口然后启动;

如果启动服务时碰到如下异常:

请关闭qos启动,这是一个dubbo 在线运维服务,详细参考:

https://blog.youkuaiyun.com/u012988901/article/details/84503672

修改配置即可:

 

官方实例也就是常见的分布式电商系统交易场景,当然实际场景比这个复杂很多,如图:

业务层进行下单请求,分别会调用库存服务进行库存减少,调用订单服务进行下单,订单服务会调用账户服务,进行金额扣减操作。

如果你直接跑这个demo,需要自行准备dubbo的注册中心,以及运行demo

的sql脚本:

dubbo_biz.sql 是业务表,undo_log.sql 是业务库回滚日志表,不同的业务库都需要建立 undo_log表,如果所有服务使用同一个数据库,只需要建立一个就行。

另外业务系统的数据源必须被seata 代理DataSourceProxy(datasource);

这里要敲黑本,划重点。

下面我们来看下代码:

先看业务才能调用:

继续跟踪代码:

这里分别调用了库存服务和订单服务,并且我们看到了,方法上加了一个注解:

@GlobalTransactional(timeoutMills = 300000, name = "dubbo-demo-tx")

这个注解的作用是开启seata 全局事物,在我们使用seata 的过程当中,我们唯一需要使用的也就是这一个注解。他就能帮我们搞定所有的分布式事物问题。

这里有小伙伴可能会有疑问,远程服务是如何感知全局事务,注册分支事物的呢,以dubbo 为例,当我们使用@GlobalTransactional 开启全局事物时,调用dubbo服务,seata会在dubbo框架层面传参数XID(透明传参,开发者无需关心),当服务被调用,框架感知到XID 时会进行本地分支事物的注册以及状态汇报等,这些框架层面会帮我们处理掉,这样就可以说是对业务实现零侵入。

这里不再列出demo运行实例,感兴趣的小伙伴可以自行动手运行官方demo。

 

注意事项:

1,seata 目前最新版本0.9.0 (2019-11,预计12月份发布1.0.0版本),数据库oracle 字段不支持 timestamp, 序列化不支持

2,表结构必须有主键,索引

3,每个业务库都必须建立 undo_log 表。

4,数据源必须被seata代理: new DataSourceProxy(datasource);

目前seata 最新版本为 0.9.0.1, 1.0Release 版本预计十二月份就会发布,期待ing。。。。

最后附上seata 官方文档地址:http://seata.io/zh-cn/docs/overview/what-is-seata.html

 

以及官方讨论群:(钉钉群),感兴趣的小伙伴可以添加。

 

本文对seata讲解到此结束,如有不对之处,欢迎指正交流!

 

Sprinig Cloud Alibaba Seata分布式事物 Seata是什么 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 本文使用seata 1.3.0作为演示 准备 1. 演示结构 pay-consumer:提供支付接口 account-provider:扣除账户余额 order-provider:添加订单 2. 创建数据库 为了简单起见,只创建一个数据库,配置多个数据源。 Seata AT 模式需要UNDO_L 阅读详情

相关推荐

seata分布式事物模型

seata事物模型学习笔记及实例代码

users24146的博客 155

Seata框架详解

seata学习

敲代码的小小酥的博客 3887

深入IR2104数据手册:被忽略的SD引脚用法和死区时间调节实战

本文深入解析IR2104半桥驱动芯片的SD引脚用法和死区时间调节技巧,帮助硬件工程师优化电机控制和电源转换系统。通过详细的电路设计、实测数据和调试方法,揭示SD引脚的多重保护机制和死区时间的精密调节策略,提升系统安全性和效率。

weixin_30342363的博客 386

分布式事务之Seata框架

传统的单体项目被拆分成多个微服务,一个完整的流程可能涉及到多个服务之间的调用,多个服务的入库操作,为了满足事务的ACID原则,提出了分布式事务。

西敏寺的乐章的博客 2476

Anolis龙蜥内核升级实战:从查询到配置的全流程指南

本文提供了一份详尽的Anolis龙蜥操作系统内核升级实战指南。文章从升级的必要性出发,逐步讲解了升级前的系统检查与备份、从官方源获取正确内核包、分步安装与验证、配置默认启动项以及升级后的功能验证与安全回滚方案。旨在帮助运维人员安全、平稳地完成内核升级,以获取性能提升、新硬件支持及重要的安全漏洞修复。

qq_27496129的博客 571

Fiddler Everywhere保姆级教程:10分钟搞定手机HTTPS抓包(附证书配置避坑指南)

本文提供Fiddler Everywhere移动端HTTPS抓包的保姆级教程,涵盖环境配置、代理设置、证书安装及常见问题排查。重点解析如何正确安装并信任Fiddler根证书以解密HTTPS流量,帮助开发者快速搭建抓包环境,高效分析应用网络行为,提升调试效率。

git9versioner的博客 703

分布式事务Seata

Token 机制:通过为每个请求生成唯一的 Token 标识,并将其保存在服务端,当请求到达服务端时,先检查 Token 是否已经被使用过,如果已经被使用,则返回上一次请求的结果,否则执行请求并更新 Token。数据库乐观锁:在数据库中使用乐观锁机制,即在请求中携带版本号或者时间戳等信息,服务端在执行请求前先校验版本号或者时间戳是否一致,如果一致则执行请求,否则返回异常。请求参数校验:通过请求参数的校验机制,例如校验请求的必填项、参数类型、参数范围等,可以避免恶意请求或者重复请求对系统造成的影响。

qq_48114126的博客 1035

Pwntools不只是PWN:用它写个自动化Fuzz脚本,挖掘Linux命令行工具漏洞

本文探讨了如何利用Pwntools构建自动化Fuzz脚本,挖掘Linux命令行工具中的漏洞。通过详细的代码示例和实战案例,展示了Pwntools在Fuzzing中的高效性和灵活性,特别适合快速验证特定场景的安全问题。文章还提供了进阶技巧和避坑指南,帮助安全研究人员快速上手并提升测试效率。

weixin_28718345的博客 220

Seata分布式

seata简单总结

tianzhenhahaha的博客 1113

Xiaojie雷达之路---毫米波雷达基础知识---中频信号的相位

本篇文章主要介绍毫米波雷达的基础知识中的中频信号的相位 文章目录傅里叶变换的快速回顾中频信号的相位中频信号对物体微小位移的灵敏度如何2个chirps来对一个物体的速度进行测量测量一个振动的物体 傅里叶变换的快速回顾 傅里叶变换是将一个信号从时域中转换到频域中,在时域中的一个正弦信号将在频域中产生一个峰值,在大多数情况下,在频域中的一个信号是一个复数(每个值是一个振幅和相位的向量),表示为AejθAe^{j\theta}Aejθ 在频域中峰值的相位等于正弦函数的初始相位 中频信号的相位 上一篇文章中提到,

XiaoJie的博客 1万+

GNSS - PPP软件 - GAMP 在VS2019/2022下完成调试、跑通程序(超详细!)

WIN32;_DEBUG;_CONSOLE;O_WARNINGS;ENAGLO;ENACMP;ENAGAL;ENAQZS;NFREQ=3。

qq_43381998的博客 8246

【2024软考架构论文题】你知道什么是分布式事务吗?是那四种?什么是 SETA ?

两阶段提交(2PC):适用于需要强一致性的场景。三阶段提交(3PC):适用于对性能有一定要求,但仍需要强一致性的场景。TCC:适用于业务逻辑较为复杂的场景。Saga 模式:适用于长事务、跨服务的场景。补偿事务:适用于需要最终一致性的场景。SETA:基于事件驱动的分布式事务管理框架,适用于微服务架构中的事务一致性问题。通过合理选择和应用这些分布式事务技术,可以有效地管理和维护分布式系统的事务一致性。希望这些内容能够帮助你更好地理解和应用分布式事务技术。精彩专栏推荐订阅:在下方专栏👇🏻✅。

激流丶的博客 1531

海康工业相机使用:常见问题及解决方法

工业相机在使用过程中,经常会因为操作不当、使用环境不当等原因出现一些问题,本篇教程,主要针对海康工业相机常见问题及其定位方法做以简单介绍,希望可以帮助大家。 注:该教程对其他品牌工业相机“常见问题”排查,也具备一定的指导意义。 当出现无法通过客户端发现设备或者无法预览图像等问题,先确认当前的运行环境是否满足以下要求: 确认装有相机驱动软件的电脑网卡为千兆网卡(Gige接口相机); 确认网卡是否已开启巨型帧; 确认电脑与网口相机之间的网络链路为千兆; 确认装有相机驱动软件的USB接口为3...

Cche的博客 3万+

springCloudAlibaba集成seata实战(分布式事物详解)

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、 和 XA 事务模式,为用户打造一站式的分布式解决方案。仓储服务:对给定的商品进行增删操作记录数量订单服务:根据采购者的需求创建订单账户服务:从用户账户中扣除余额、积分等在这套架构中,用户下单购买商品的业务,就需要三个服务来完成,每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题就没办法保证,Seata就是来进行解决这种问题的解决方案。

javaeEEse的博客 7086

【第三方互联】12、支付宝(Alipay)授权第三方登录

我们创建了支付宝开放平台的网页&移动应用,审核通过后,我们需要拿到appid,支付宝公钥,私钥进项开发 一、添加应用信息至项目环境中 我们保存了 appid、应用私钥、支付宝公钥、支付宝回调地址等信息,这里的公钥为支付宝开放平台为我们生成的“支付宝公钥” 二、引入 Maven 依赖 <!-- 支付宝SDK --> <dependency> <g.........

JACKAL 21万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

分布式事物seata的AT模式实战

Seata是一款开源的分布式事务解决方案,提供AT、TCC、SAGA和XA四种事务模式。其核心架构包含三个角色:事务协调者(TC)负责全局事务状态管理,事务管理器(TM)定义事务范围,资源管理器(RM)处理分支事务。AT模式采用两阶段提交:准备阶段执行SQL并生成反向SQL日志,提交阶段确认执行或通过反向SQL回滚。实践部分演示了基于Docker部署MySQL和Nacos环境,并通过示例项目展示了订单创建和库存减少的分布式事务处理过程,包括正常执行和异常回滚场景。

每天学习一点点 1015

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Seata分布式事物案例及详解

官网: https://seata.apache.org/zh-cn/download/seata-server 下载后直接解压 进到bin目录 输入cmd 启动命令: 进入localhost:7091 默认账户跟密码都为seata 导入依赖 创建四个微服务项目 启动类 实体类 控制层 持久层 业务层 配置application.yml 配置seata地址 启动类 控制层 远程调用 业务层 配置application.yml 配置seata地址 启动类 实体类 控制层 业

qq_62374596的博客 1835

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

seata集群部署_Seata分布式事物使用

1.背景在微服务框架下,有些操作需要依赖不同的服务,操作不同的数据库,为了保证操作的完整性,我们需要分布式事物。Seata 是阿里巴巴开源的一款分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。本文介绍AT和TCC事物模式的使用。2.准备工作2.1Naco...

weixin_39725118的博客 1388

使用seata解决分布式事物问题

seata如果不是很了解的话可以直接到官网查看官方文档说明:http://seata.io/zh-cn/docs/overview/what-is-seata.html 如果你还对SpringBoot、Dubbo、Nacos、Seata、Mybatis 不是很了解的话,这里我为大家整理个它们的官网网站,如下 SpringBoot:https://spring.io/projects/spring-boot Nacos:https://nacos.io/zh-cn/docs/quick-start.h

H的博客 1558

springCloud整合Seata实现分布式事物

已经很久没有进行技术点总结了,今天有时间整理分享分布式事物相关内容一下。。。。 本文以SpringCloud Alibaba + Nacos微服务框架作为项目演示: 参考博客:https://blog.youkuaiyun.com/thinkingcao/category_9716788.html 一、分布式事务解决方案 https://blog.youkuaiyun.com/Thinkingcao/article/details/109320174 二、seata简介 https://blog.youkuaiyun.com/Th

qq_15901351的博客 2207

SpringCloud Alibaba 使用Seata解决分布式事物

一、Seata Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 seata提供了AT、TCC、及SAGA(长事务)、XA等模式。是将各分布式分支事务统一为全局事务,通过全局事务的成功与否判断是否需要回滚提交各分支事务。 seata架构中有三大组件: - TC(Transaction Coordinator)事务协调器,维护全局事务的运行状态,负责协调并驱动全局

小毕超博客 4867

分布式事物框架seata使用示例

随着微服务使用越来越广泛,微服务的管理也成为了热点的技术话题,微服务化后带来最主要的技术问题就是分布式事物,Seata 作为一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务,我们通过demo来演示seata的使用 一、seata基本原理 Seata中的相关概念包括: 1)Transaction Coordinator (TC): 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。 ...

u012477420的博客 1172

seata 集群_Seata分布式事物使用

1.背景在微服务框架下,有些操作需要依赖不同的服务,操作不同的数据库,为了保证操作的完整性,我们需要分布式事物。Seata 是阿里巴巴开源的一款分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。本文介绍AT和TCC事物模式的使用。2.准备工作2.1Naco...

weixin_39575047的博客 590

springcloudAlibaba---分布式事物组件Seata

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。原子性(atomicity):个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态,事务的中间状态不能被观察到的。

wangjunlei666的博客 679

spring cloud整合seata+apollo分布式事物

首先下载seata客户端:https://github.com/seata/seata/releases 下载之后里面有seata-server-1.1.0\seata\conf file.conf和registry.conf file.conf配置: ## transaction log store, only used in seata-server store { ## s...

BabyLoveld的博客 2680

分布式事物解决方案-Seata

分布式事物解决方案

m0_38068812的博客 205
上一篇: springcloud 入门系列(十)springcloud config
feijiing
博客等级 码龄16年 7粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值