【微服务】7、分布式事务

在分布系统中,一个业务由多个服务合作完成,每个服务有自己的事务,多个事务需同时成功或失败,这样的事务称为分布式事务。

其中每个服务的事务叫分支事务,整个业务的统一事务叫全局事务。

分布式事务相关知识讲解

  1. 课程引入

    • 分布式事务一直是微服务中的难点问题,此前企业缺乏统一解决方案,解决复杂。随着技术发展,有了一整套解决思路。
  2. 黑马商城下单业务分析

    • 业务流程:以黑马商城下单业务为例,该业务包含创建订单、清理购物车和扣减库存三个核心步骤。
    • 早期单体架构:早期为单体项目,所有数据库操作在一个service方法内的一个事务里,满足事务ACID特性。
    • 微服务架构变化:如今业务拆分到不同微服务,各微服务有独立数据库,各自分开执行。
  3. 分布式事务问题剖析

    • 业务执行流程及事务提交:订单服务先处理数据创建订单并保存到数据库,事务提交后远程调用购物车服务清理购物车,购物车服务访问数据库完成清理并提交事务,然后订单服务再调用库存服务(商品服务)扣减库存。
    • 库存不足导致的不一致问题:假设商品服务中库存不足,扣减库存失败,但前两个服务已成功,事务一致性被破坏,ACID特性无法满足。
    • 购物车服务无法感知库存异常:订单服务远程调用购物车和库存服务,库存服务异常时订单服务能感知,但购物车服务无法感知,因其业务在被调用完成后已提交事务,不会回滚。
  4. 不一致性验证

    • 准备工作:通过浏览器登录捷克用户账号,展示其购物车中有三个商品(一个下架,两个可下单),准备将小白鞋库存改为不足来验证事务一致性,即购物车数据是否应回滚。
    • 操作过程及结果:打开数据库连接客户端,将小白鞋库存从1万改为0使其库存不足,然后下单。
    • 下单依次执行创建订单(插入数据)、
    • 清理购物车(删除数据)、
    • 扣减库存(失败)。
    • 最终下单失败但购物车被清理,出现不一致现象。
  5. 分布式事务概念定义

    • 在分布系统中,一个业务由多个服务合作完成,每个服务有自己的事务,多个事务需同时成功或失败,这样的事务称为分布式事务。其中每个服务的事务叫分支事务,整个业务的统一事务叫全局事务。
  6. 后续课程预告

    • 分布式事务出现问题,下一课将讲解如何解决分布式事务。

Seata

  1. Seata简介
    • 开源背景:Seata是2019年1月由蚂蚁金服和阿里巴巴共同开源的分支事务解决方案。
  1. 分布式事务问题及Seata解决思路
    • 问题场景:以订单业务为例,下单涉及多个微服务,如订单操作、购物车清理、库存扣减等,可能出现部分成功部分失败的情况,导致分支事务间状态不一致。
    • 问题原因:微服务相互独立,执行时不知对方状态,各自提交事务。
    • 解决思路:引入事务协调者(TC),各微服务与之联系并报告状态,TC根据情况通知各服务提交或回滚,Seata基于此思路实现。
  1. Seata实现方式中的角色及功能
    • 事务协调者(TC) :维护全局和分支事务状态,协调各分支提交或回滚,各分支事务向其报告状态,独立于微服务。
    • 事务管理器(TM)
      • 定义事务范围 :确定全局事务 开始和结束时间,全局事务从请求进入方法开始,如订单业务中进入create order方法,到该方法执行完结束。
      • 监控事务:通过引入Seata依赖监控方法运行,知晓全局事务开始和结束情况,但不了解分支事务内部状态。
    • 资源管理器(RM)
      • 管理分支事务状态:与TC交互,注册分支事务并报告执行结果(成功或失败),使分支与全局事务建立联系,TC借此知晓各分支结果。
      • 注册与报告流程:事务开始调用分支时,RM向TC注册分支事务,告知所属分支,执行完后报告执行结果。
  2. 后续操作
    • 搭建TC服务:TC独立于微服务之外,需搭建该服务。
    • 微服务引入依赖与配置:在微服务中引入Seata依赖,Seata提供TM功能,同时需做简单配置,告知微服务联系TC的方式。

相关推荐
40岁的系统架构师5 小时前
5 分布式ID
分布式·算法
程序猿阿伟12 小时前
《深度学习模型在鸿蒙分布式框架下的跨设备高效之旅》
分布式·深度学习·harmonyos
sg_knight13 小时前
RabbitMQ如何实现队列持久化
分布式·消息队列·rabbitmq·springcloud·持久化
易雪寒13 小时前
Java大厂面试题之10种分布式ID的生成方案
java·开发语言·分布式
明达技术14 小时前
MR30分布式IO模块引领装配调试智能化升级
分布式
安科瑞王可14 小时前
浙江安吉成新的分布式光伏发电项目应用
大数据·运维·分布式·科技·自动化
Acrel 288095607114 小时前
安科瑞Acrel-1000DP分布式光伏监控系统在浙江安吉成3234.465kWp分布式光伏发电项目中的应用
分布式
kk无敌怕14 小时前
分布式主键ID生成方式-snowflake雪花算法
分布式·算法
牛马程序员‍14 小时前
云商城--基础数据处理和分布式文件存储
分布式
bug_null15 小时前
RabbitMQ-死信队列
分布式·rabbitmq