分布式事务问题

分布式前
      单机单库没这个问题
      从1:1 -> 1:N -> N:N
    分布式之后


    一句话
      一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用,就会产生分布式事务问题

Seata简介

      Senta是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务
      官网地址
        http://seata.io/zh-cn/
      一个典型的分布式事务过程
        分布式事务处理过程的ID+三组件模型
          Transaction ID全局唯一的事务ID
          三组件概念
            TC - 事务协调者
              维护全局和分支事务的状态,驱动全局事务提交或回滚。
            TM - 事务管理器
              定义全局事务的范围:开始全局事务、提交或回滚全局事务。
            RM - 资源管理器(数据库)
              管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
        处理过程


   

去哪下
      发布说明: https://github.com/seata/seata/releases
    怎么玩
      本地@Transational
      全局@GlobalTransactional
        seata的分布式交易解决方案

Seata-Server安装

1、官网地址
      https://seata.io/zh-cn/blog/download.html
    2、下载版本
    3、seata-server-0.9.0.zip解压到指定目录并修改conf目录下的file.conf配置文件
      先备份原始file.conf文件
      主要修改:自定义事务组名称+事务日志存储模式为db+数据库连接信息
      file.conf
        service模块
        store模块
    4、mysql5.7数据库新建库seata
    5、在seata库里建表
      建表db_store.sql在\seata-server-0.9.0\seata\conf目录下
        db_store.sql
      sql
    6、修改seata-server-0.9.0\seata\conf目录下的registry.conf配置文件
    7、先启动Nacos端口号8848
    8、再启动seata-server
      \seta\bin\
        seata-server.bat

订单/库存/账户业务数据库准备

以下演示都需要先启动Nacos后启动seata,保证两个OK
    分布式事务业务说明
    创建业务数据库
      seata_order:存储订单的数据库
      seata_storage:存储库存的数据库
      seata_account:存储账户信息的数据库
      建库SQL
    按照上诉3库分别建对业务表
      seata_order库下建t_order表
      seata_storage库下建t_storage表
      seata_account库下建t_account表
    按照上诉3库分别建立对应的回滚日志表
      订单-库存-账户3个库下都需要建各自的回滚日志表
      \seata-server-0.9.0\seata\conf目录下的db_undo_log.sql
      建表sql
    最终效果

订单/库存/账户业务微服务准备

业务需求
      下订单 -> 减库存->扣余额 ->改(订单)状态
    新建订单Order-Module
      1、seata-order-service2001
      2、POM
        我自己配置新增 0.9.0的seata包时报错了
          com.google.errorprone
          如果你遇到和我一样的错误,建议引入这个包error_prone_core
      3、YML
      4、file.conf
        就是seata文件夹下的file.conf
      5、registry.conf
      6、domain
        CommonResult
        Order
      7、Dao接口及实现
        orderDao
        resources文件夹下新建mapper文件夹后添加
      8、Service接口及实现
        OrderService
        StorageService
        AccountService
        OrderServiceImpl
      9、Controller
      10、Config配置
        MyBatisConfig
        DataSourceProxyConfig
      11、主启动
    新建库存Storage-Module
    新建账户Account-Module

Test

数据库初始情况
    下订单->减库存->扣余额->改订单状态
    正常下单
      http://localhost:2001/order/create?userId=1&productId=1&count=10&money=100
      数据库情况
    超时异常,没加@GlobalTransational
      AccountServiceImpl添加超时
      数据库情况
      故障情况
        当库存和账户金额扣减后,订单状态并没有设置为依据完成,没有从零改为1
        而且由于feign的重试机制,账户余额还有可能被多次扣减
    超时异常,添加@GlobalTransational
      结果
      各数据库无记录新增
      OrderServiceImpl

一部分补充

Seata
      2019年1月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案
      Simple Extensible Autonomous Transaction Architecture ,简单可扩展自治事务框架
      2020起始,参加工作后使用1.0以后的版本
    再看TC/TM/RM三大组件
      分布式事务的执行流程
        TM开启分布式事务(TM向TC注册全局事务记录)
        按业务场景,编排数据库、服务等事务内资源(RM向TC汇报资源准备状态)
        TM结束分布式事务,事务一阶段结束(TM通知TC提交/回滚分布式事务)
        TC汇总事务信息,决定分布式事务是提交还是回滚
        TC通知所有RM提交/回滚 资源,事务二阶段结束
    AT模式如何做到对业务的无侵入
      是什么
      一阶段加载
      二阶段提交
      二阶段回滚
    debug
    补充

SpringCloud Alibaba Senta处理分布式事务相关推荐

  1. SpringCloud Alibaba Seata处理分布式事务-微服务(三十九)

    订单/库存/账户业务微服务准备 业务需求 下订单->减库存->扣余额->改(订单)状态 新建订单Order-Module seata-order-service2001 POM &l ...

  2. springCloud整合seata实现分布式事务

    seata简介 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务.Seata 将为用户提供了 AT.TCC.SAGA 和 XA 事务模式,为用户打造一站式的分布式 ...

  3. Spring Cloud Alibaba 高级特性 分布式事务:Alibaba Seata 如何实现分布式事务

    本讲咱们要解决分布式事务这一技术难题,这一讲咱们将介绍三方面内容: 讲解分布式事务的解决方案: 介绍 Alibaba Seata 分布式事务中间件: 分析 Seata 的 AT 模式实现原理. 分布式 ...

  4. Spring Cloud Alibaba系列之分布式事务Seata

    Spring Cloud Alibaba系列之分布式事务Seata 1.分布式事务 分布式事务不是在现在微服务分布式架构上才产生的问题,在单体应用同样存在分布式事务问题,典型的场景就是单体应用使用了多 ...

  5. 微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.2 实现XA 模式

    微服务框架 [SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务] 分布式事务 文章目录 微服务 ...

  6. 分布式事务解决方案 - SpringCloud Alibaba Seata

    目录 github代码:GitHub - 18409489244/seata: 基于springcloud alibaba seata 的分布式事务demo 一.常见分布式事务解决方案 二.分布式事务 ...

  7. 电商架构设计与开发 - 20分布式组件-SpringCloud Alibaba简介

    Spring Cloud Netflix Spring Cloud Alibaba 注册中心 Eureka Nacos 配置中心 SpringCloud Config Nacos API网关 zuul ...

  8. 最详细SpringCloud+nacos整合Seata1.4.2 实现分布式事务

    SpringCloud整合Seata 实现分布式事务 Seata 简介和工作原理 看seata官网吧 安装Seata 使用浏览器访问"https://github.com/seata/sea ...

  9. SpringCloud Alibaba实战第九课 分布式事务理论、DevOps运维

    22 一致性挑战:微服务架构下的数据一致性解决方案 上一讲我们介绍了如何在微服务架构中设计统一的用户认证方案.本讲咱们填之前埋下的一个坑,如何在微服务架构下有效保障数据一致性问题.本讲咱们涉及三方面内 ...

最新文章

  1. 清华北大浙大大学开放课程
  2. 头文件的用法及注意事项
  3. 随机变量X与随机变量函数Y=g(X)的概率分布
  4. Linux 命令之 id -- 显示用户ID和组ID
  5. iOS-自定义导航栏后侧滑返回功能失效
  6. 高级电工技术实训考核装置
  7. 新手CrossApp 之demo SecondViewController小结
  8. java中null字符串与字符串长度为0的区别
  9. STM32的函数ssert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  10. 【OpenGL】室内3D弹球
  11. 尚德机构推出2019版CPA系列纸质书 配套小程序刷题
  12. 初探HazelCast IMDG内存数据网格-简介
  13. java实验报告可下载_JAVA实验报告.doc
  14. 量化初级 -- akshare获得股票代码,最简策略
  15. 循环队列 C++ 实现
  16. 第19章、 认识与分析登录档
  17. 【调剂】北方民族大学2022年硕士研究生调剂公告(二)
  18. php某年某月某日是否闰年,【后端开发】PHP判断一个年份是否为闰年
  19. 阿里面试官的”说一下从url输入到返回请求的过程“问的难度就是不一样!
  20. docker tag详解

热门文章

  1. 一个食品专业本科生的自白:能不吃最好别吃
  2. java book打印机_java如何调用本地打印机进行图片打印
  3. 计算机中bcd的中文意思,BCD码
  4. 使用DIV+CSS布局设计个人主页 设计个人主页,使用DIV+CSS的方式进行页面布局。
  5. 中国工商银行网银不能识别U盾或打不开网页
  6. 企立方集团:拼多多场景推广怎么设置
  7. CCleaner 垃圾文件清理规则 编写指南
  8. ssh_init: Network error: Cannot assign requested address的解决办法
  9. 人工智能泡妞第一步 · 了解学科
  10. 【大数据/分布式】MapReduce学习-结合6.824课程