分布式事务seata

  在我面试招行外包的时候,与三位面试官进行了半个多小时的交锋,从java基础到框架,其中让我记忆深刻的有一个问题。我说到我们系统采用了微服务架构,是根据不同岗位划分成几个服务,服务之间的调用是用openFeign。A服务减库存并调用B服务增加相应库存,使用事务管理防止操作失败。

面试官:等一下,你说一下事务有什么特性?

我:事务有四个特性,原子性、一致性、隔离性、额还有一个忘了(我太紧张了)

面试官:那你大概解释一下每个特性

我:原子性就是事务要么全部成功要么全部失败,一致性就是事务执行前和执行后是一致的,假设A和B共100块钱,无论怎么相互转账,总共还是100块钱,

隔离性就是每个事务之间是相互隔离不影响的,(补充:持久性就是事务一旦提交了,对数据库的改变就是永久性的)

面试官: 事务的隔离级别有几种

我:巴拉巴拉。。。

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

面试官: 你是怎么保证数据不出错的

我:通过事务管理(我指的是spring本地事务,我还不知道分布式事务),如果有异常则数据回滚,B服务的方法执行完之后,校验数据是否插入成功,如果没有插入成功则手动抛出异常。

面试官:如果网络延迟B服务没有及时插入,或者其他原因导致你校验的时候B数据库并没有插入数据,但是随后又插入成功了,这种情况你是如何解决的

我:。。。(我就此被KO了)

 

  过后我才了解到分布式事务这种东西,一个很经典的场景,在微服务架构中,订单服务下订单,就要调用库存服务减库存,如果库存不足,就下单失败。常见的分布式事务类型有 2PC、3PC、TCC、本地消息表、消息事务、最大努力通知,对于这几种我在此先不讲了,给大家推荐一篇我很喜欢的博主(敖丙)的文章,他写的很好,我经常看他的文章,https://zhuanlan.zhihu.com/p/183753774,我今天就只谈一下阿里开源的分布式事务框架Seata,Seata 是 Simple Extensible Autonomous Transaction Architecture 的简写,详细介绍可参考官网https://seata.io/zh-cn/还有在码云上的仓库https://gitee.com/itCjb/spring-cloud-alibaba-seata-demo里面有示例代码和相关文档。这些东西我觉得没必要写了,我写的不一定有大佬和官方写的好,所以我就分享一下我在安装部署使用中碰到的一些坑:

1、安装seata服务端并注册到nacos(我是放在阿里云ECS上面)

  简单粗暴的方法就是到seata的gitbub上去下载linux版本的压缩包,我就是是这样的,或者其他途径也行,然后通过工具上传到服务器,解压,启动就完事了,但是这样是不行的,需要改配置才能成功连接数据库和注册到nacos

file.conf (在conf文件夹里)

 

 1 ## transaction log store, only used in seata-server
 2 store {
 3   ## store mode: file、db、redis
 4   mode = "db"
 5 
 6   ## database store property
 7   db {
 8     ## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.
 9     datasource = "druid"
10     ## mysql/oracle/postgresql/h2/oceanbase etc.
11     dbType = "mysql"
12     driverClassName = "com.mysql.jdbc.Driver"
13     url = "jdbc:mysql://127.0.0.1:3306/seata"
14     user = "root"
15     password = "123456"
16     minConn = 5
17     maxConn = 30
18     globalTable = "global_table"
19     branchTable = "branch_table"
20     lockTable = "lock_table"
21     queryLimit = 100
22     maxWait = 5000
23   }
24 }​
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 分布式事务seata