微服务盛行的时代,分布式事务成为了一个不可回避的问题。
什么是分布式系统
这里要区分一下集群跟分布式的区别。
集群就是相同的人,分担来做同一件事。
分布式呢,其实就是两个不同的人,合作着把一件事完成了,例如两个和尚抬水喝,一个抬前面,一个抬后面。
在我们的系统中,需要这么来理解,不同的服务器节点,部署不同的服务,例如订单服务,结账服务,这两个服务构成一个完成的买东西的体系。
什么是本地事务
本地事务这个非常好理解,利用关系数据库来控制事务,关系数据库通常都具有ACID特性。
在传统的单系统应用中,所有的数据都会全部放到一个数据库里面,这时候在进行数据操作的时候,利用数据库的特性来完成事务的控制。
什么是分布式事务
在分布式系统中一次操作由多个服务协同完成。
这样的操作,是涉及到多个服务协同对数据库进行操作,可以是一个服务一个数据库,也可以是多个服务对应一个数据库,这么个协同完成一个事务的整个过程,叫做分布式事务。
现有的解决方案有哪些
目前,在面对着分布式事务的时候,有4种解决方案,这些方案在网上有很多资料,有兴趣的同学可以自行百度查找即可。
1、两阶段提交(2PC, Two-phase Commit)
2、方案事件队列方案
3、TCC 补偿模式
4、缓存数据最终一致性
什么是Seata
A distributed transaction solution with high performance and ease of use for microservices architecture.
译文:一个分布式事务的解决方案具有高性能和易用性的微服务架构。
Seata有三部分组成
事务协调器(TC):维护全局事务和分支事务的状态,驱动全局提交或回滚。 事务管理器TM:定义全局事务的范围:开始全局事务,提交或回滚全局事务。 资源管理器(RM):管理正在处理的分支事务的资源,与TC对话以注册分支事务并报告分支事务的状态,并驱动分支事务的提交或回滚。Seata最新版1.2.0做了啥
特征:
- [ #2381 ]支持XA交易模式
- [ #2206 ]支持REQUIRED,REQUIRES_NEW,SUPPORTS和NOT_SUPPORTED事务传播
- [ #2112 ]支持使用多个SQL批量更新和删除
- [ #2275 ]在TCC交易模式下支持hsf
- [ #2108 ]支持zip bzip2 7z压缩器
- [ #2328 ]支持隔离加载mysql 5.x和8.x jdbc驱动程序类
- [ #2367 ]添加对Nacos 1.2的权限配置支持
- [ #2359 ]支持property.never,propagation.mandatory和事务暂停和恢复API
- [ #2418 ]支持fst序列化
- [ #2135 ]支持SPI范围
- [ #2370 ]支持failureHandler实现可以从容器中读取
- [ #2481 ]支持数据库的最大等待配置
- [ #2379 ]在Nacos注册时支持自定义服务名称
- [ #2308 ]添加开关以控制是否在Saga交易模式下注册分支
- [ #2301 ]支持postgresql的默认expr和nextval
错误修正:
- [ #2575 ]修复executeBatch在声明模式下无法获取targetSql
- [ #2283 ]修复oracle get tableMeta失败
- [ #2312 ]修复对配置条件的判断
- [ #2309 ]修复时间戳反序列化丢失的纳米
- [ #2292 ]修复了一些未转换为骆驼风格的配置
- [ #2306 ]修复不建议使用的Maven先决条件
- [ #2287 ]修复重试全局锁定时无法删除连接上下文
- [ #2361 ]修复错误配置名称
- [ #2333 ]修复由于脏数据导致回滚失败时的错误异常信息
- [ #2390 ]修复包含空格的配置项
- [ #2408 ]修复undo_log表中丢失的序列
- [ #2391 ]修复配置异常导致CPU使用率增加
- [ #2427 ]修复StringUtils.toString(o)StackOverflowError
- [ #2384 ]修复StateMachineRepository#getStateMachineById将替换缓存中的最后一个版本
- [ #2323 ]修复了数据源bean的错误代理
- [ #2466 ]修复了文件模式下活动属性的内存可见性
- [ #2349 ]修复了插入sql主键值支持检查
- [ #2479 ]修复不使用lowerCase时的postgresql模式
- [ #2449 ]修复了启动时无法获取表结构的问题
- [ #2505 ]修复了会话存储路径值判断的错误
- [ #2456 ]修复服务器编码请求错误
- [ #2495 ]修复NPE并在lockkey为null时减少请求
- [ #2490 ]在资源为空时修复RpcContext.addResource
- [ #2419 ]修复HTTP测试用例运行失败
- [ #2535 ]修复config.txt中错误的配置名称
- [ #2524 ]注册服务配置丢失且不一致
- [ #2473 ]修复了文件模式下磁盘的刷新条件
- [ #2455 ]修复子模块无法执行版权和检查样式检查
优化:
- [ #2409 ]在undoLog或lockKey为空时减少数据库和网络请求
- [ #2329 ]分离不同的存储模式处理逻辑
- [ #2354 ]针对Spring Cloud配置优化不受支持的侦听器逻辑
- [ #2320 ]优化原型和kryo序列化时间戳
- [ #2307 ]在切换事务模式时优化事务上下文切换逻辑
- [ #2364 ]优化在加载类时实际未使用的生成实例
- [ #2368 ]添加zk缺少的配置
- [ #2351 ]添加获取本地全局状态
- [ #2529 ]优化德鲁伊参数
- [ #2288 ] codecov.yml忽略模拟测试
- [ #2297 ]删除重复的依赖项
- [ #2336 ]使用组织徽标添加
- [ #2348 ]删除冗余配置
- [ #2362 ]优化stackTraceLogger参数
- [ #2382 ]优化RegistryFactory单例模式和RegistryType判断
- [ #2400 ]在UUIDGenerator上优化日期的魔数
- [ #2397 ]解决打字错误
- [ #2407 ]错误的判断可能会导致NPE
- [ #2402 ]优化rm和tm寄存器日志
- [ #2422 ]在文档中添加脚本链接
- [ #2440 ]优化与我们联系并启动日志
- [ #2445 ]针对kryo和fst优化类注册方法
- [ #2372 ]使用SPI重构锁存储SQL
- [ #2453 ]优化不必要的服务器配置项
- [ #2369 ]使用SPI重构日志存储SQL
- [ #2526 ]优化spring-boot启动日志
- [ #2530 ]删除使用connPool
- [ #2489 ]优化exceptionHandler的方法签名
- [ #2494 ]减少冗余代码
- [ #2523 ]按频率优化异常全局事务的输出日志
- [ #2549 ]优化ZookeeperConfiguration的异常日志
- [ #2558 ]优化配置和服务器模块日志
- [ #2464 ]增强Saga交易编辑器
- [ #2553 ]添加有关使用脚本的一些注意事项
Seata能不能上生产
按照官方说法,从0.49版本开始,就可以上生产了,Seata作为SpringCloud Alibaba的核心框架,其更新的频率会非常高,快速的解决使用过程中遇到的问题,是一个不错的选择。
目前用过的分布式事务的解决,小编还是集中在MQ的方式来做,如果有哪位同学用Seata上过生产,可介绍一下感受。
--END--
作者:@溪云阁
如需要源码,转发,关注后私信我。
部分图片或代码来源网络,如侵权请联系删除,谢谢!