当前位置: 首页 > news >正文

分布式事务(1)

1.分布式事务

首先我们看看项目中的下单业务整体流程:

由于订单、购物车、商品分别在三个不同的微服务,而每个微服务都有自己独立的数据库,因此下单过程中就会跨多个数据库完成业务。而每个微服务都会执行自己的本地事务:

  • 交易服务:下单事务

  • 购物车服务:清理购物车事务

  • 库存服务:扣减库存事务

整个业务中,各个本地事务是有关联的。因此每个微服务的本地事务,也可以称为分支事务。多个有关联的分支事务一起就组成了全局事务。我们必须保证整个全局事务同时成功或失败。

我们知道每一个分支事务就是传统的单体事务,都可以满足ACID特性,但全局事务跨越多个服务、多个数据库,就不能满足回滚了

2.Seata

2.1.认识Seata

解决分布式事务的方案有很多,但实现起来都比较复杂,因此我们一般会使用开源的框架来解决分布式事务问题。在众多的开源分布式

其实分布式事务产生的一个重要原因,就是参与事务的多个分支事务互相无感知,不知道彼此的执行状态。因此解决分布式事务的思想非常简单:

就是找一个统一的事务协调者,与多个分支事务通信,检测每个分支事务的执行状态,保证全局事务下的每一个分支事务同时成功或失败即可。大多数的分布式事务框架都是基于这个理论来实现的。

Seata也不例外,在Seata的事务管理中有三个重要的角色:

  • TC (Transaction Coordinator) - 事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。

  • TM (Transaction Manager) - 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。

  • RM (Resource Manager) - 资源管理器:管理分支事务,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

 

其中,TMRM可以理解为Seata的客户端部分,引入到参与事务的微服务依赖中即可。将来TMRM就会协助微服务,实现本地分支事务与TC之间交互,实现事务的提交或回滚。

TC服务则是事务协调中心,是一个独立的微服务,需要单独部署。

 


http://www.mrgr.cn/news/35940.html

相关文章:

  • 解锁编程潜力,从掌握GitHub开始
  • 分布式事务(2)
  • 数据结构习题
  • Vue74 路由的props配置
  • 父母血型与子女血型对照表
  • AWS账单不支付账号会停用吗?
  • Spring Boot驱动的在线房产租赁服务
  • 【CentOS7】nginx部署前端 gunicorn部署flask后端并使用nginx反向代理
  • 引用reference作为函数返回
  • 细说机房安装带孔的通风防静电地板的原因
  • 【C++进阶】2024年了set、map还搞不懂底层细节?
  • 接口中心四大闭环:如何确保接口生命周期的完美呈现
  • C语言中的转义字符
  • 如何恢复被删除的 GitLab 项目?
  • 基于丹摩智算的`YoloV8-训练与测试
  • Python面向对象编程:类和对象①
  • ant design vue组件中table组件设置分组头部和固定总结栏
  • _RET_IP_ 和_THIS_IP_ 作用
  • 通信工程高级职称评审条件详细解读
  • Databend 为什么能帮用户降低 90% 成本?