大家好,我是曹尼玛
1 阿里分布式事务框架Seata简介
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
中文官方站点:https://seata.io/zh-cn/
seata github开源地址:https://github.com/seata
2 分布式事务简介
2.1 本地事务
在计算机系统中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于应用主要靠关系数据库来控制事务,而数据库通常和应用在同一个服务器,所以基于关系型数据库的事务又被称为本地事务。
数据库事务的四大特性:ACID
A(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部不执行,不可能出现部分成功部分失败的情况。
C(Consistency):一致性,在事务执行前后,数据库的一致性约束没有被破坏。比如:张三向李四转 100 元,转账前和转账后的数据是正确状态这叫一致性,如果出现张三转出 100 元,李四账户没有增加 100 元这就出现了数 据错误,就没有达到一致性。
I(Isolation):隔离性,数据库中的事务一般都是并发的,隔离性是指并发的两个事务的执行互不干扰,一个事务不能看到其他事务的运行过程的中间状态。通过配置事务隔离级别可以比避免脏读、重复读问题。
D(Durability):持久性,事务完成之后,该事务对数据的更改会持久到数据库,且不会被回滚。
数据库事务在实现时会将一次事务的所有操作全部纳入到一个不可分割的执行单元,该执行单元的所有操作要么都成功,要么都失败,只要其中任一操作执行失败,都将导致整个事务的回滚。
2.2 分布式事务
随着互联 的快速发展,软件系统由原来的单体应用转变为分布式应用
分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由不同的服务之间通过 络远程协作完成事务称之为分布式事务,例如用户注册送积分事务、创建订单减库存事务,银行转账事务等都是分布式事务。
3 SpringCloud Alibaba分布式基础案例搭建
我们模拟一个简单下单业务,客户端调用rest对外服务,rest服务再调用订单服务实现创建订单和账户服务实现账户扣钱操作,最终来完整下单业务;
2.1 案例架构设计
所有服务都注册到nacos中,方便feign远程调用;订单服务,账户服务各自有独立数据库;架构设计如下图:
是父项目,主要是做一些依赖管理,依赖版本管理,管理所有子module项目;
子项目,主要是引入其他子项目需要的公共依赖,以及公共实体,工具类,配置类的统一封装;
子项目,主要提供订单服务,生成订单;
子项目,主要提供账户服务,根据订单扣钱操作;
子项目,主要处理客户端下单请求,feign远程调用order,和account服务接口,最终完成下单处理;
2.2 数据库设计
我们新建两个数据库,分别是(订单数据库),(账户数据库),
数据库里面新建表订单表:
数据库里面新建表用户账户表:
插入数据:
2.3 seatatest父项目搭建
seatatest是父项目,主要是做一些依赖管理,依赖版本管理,管理所有子module项目;
注意,它的类型是
pom.xml:
project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> modelVersion>4.0.0modelVersion> groupId>com.java1234groupId> artifactId>seatatestartifactId> packaging>pompackaging> version>1.0-SNAPSHOTversion> modules>module>seata-commonmodule>module>seata-ordermodule>module>seata-accountmodule>module>seata-webmodule> modules> properties>project.build.sourceEncoding>UTF-8project.build.sourceEncoding>maven.compiler.source>1.8maven.compiler.source>maven.compiler.target>1.8maven.compiler.target>druid.version>1.1.10druid.version>spring-cloud.version>Hoxton.SR8spring-cloud.version>springboot.version>2.3.2.RELEASEspringboot.version>springcloudalibaba.version>2.2.4.RELEASEspringcloudalibaba.version>fastjson.version>1.2.35fastjson.version>commons-lang3.version>3.6commons-lang3.version>seata-common.version>1.0-SNAPSHOTseata-common.version>mybatis.version>2.1.0mybatis.version> properties> dependencyManagement>dependencies> dependency> groupId>org.springframework.cloudgroupId> artifactId>spring-cloud-dependenciesartifactId> version>${spring-cloud.version}version> type>pomtype> scope>importscope> dependency> dependency> groupId>org.springframework.bootgroupId> artifactId>spring-boot-dependenciesartifactId> version>${
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!