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

微服务分布式事务

1、分布式事务是什么?

微服务架构中的分布式事务是指在多个服务实例之间保持数据一致性的机制。由于微服务通常涉及将业务逻辑拆分成独立的服务,每个服务可能有自己的数据库,因此当一个业务操作需要跨多个服务进行时,确保所有服务的数据保持一致性就变得复杂。在单体应用中,数据库事务可以很容易地通过本地事务(如ACID事务)来管理,但在微服务架构中,每个服务可能使用不同的数据库,这就要求一种不同的事务管理策略。

2、分布式事务涉及哪些技术

一般会使用开源的框架来解决分布式事务问题。在众多的开源分布式事务框架中,功能最完善、使用最多的就是阿里巴巴在2019年开源的Seata了

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

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

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

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

3、为什么要引入分布式事务?

引入分布式事务是为了解决在分布式系统中保持数据一致性的问题。在微服务架构或任何分布式系统中,服务可能分布在不同的服务器、容器或甚至是不同的地理位置。每个服务可能有自己的数据库实例。当业务操作需要跨多个服务和数据库进行时,传统的本地事务(如ACID事务)就不再适用,因此需要分布式事务来确保所有相关服务的数据保持一致性

4、分布式事务能解决什么问题?

跨服务数据一致性

在微服务架构中,一个业务操作可能涉及多个服务,每个服务可能管理不同的数据库。分布式事务确保这些操作要么全部成功,要么全部失败,以保持数据一致性。

数据完整性

分布式事务确保在分布式系统中执行的操作满足ACID原则(原子性、一致性、隔离性、持性)。

高并发和可扩展性

在高并发场景下,分布式事务可以协调不同服务的数据库操作,以避免数据冲突和不一致

故障恢复

当系统中的部分服务或组件失败时,分布式事务可以提供一种机制来回滚已经执行的操作,从而防止数据损坏

5、分布式事务的实现步骤

5.1、准备好seata的存储方式

Seata支持多种存储模式,但考虑到持久化的需要,我们一般选择基于数据库存储

5.2、 拉取镜像并创建容器

镜像命令:docker pull seataio/seata-server:1.5.2

创建容器:

docker run --name seata \
-p 8099:8099 \
-p 7099:7099 \
-e SEATA_IP=192.168.150.101 \
-v ./seata:/seata-server/resources \
--privileged=true \
--network hm-net \
-d \
seataio/seata-server:1.5.2
要与项目和数据库在同一个Network

5.3、微服务集成Seata

添加依赖(每个模块都要引入)

<!--seata--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId></dependency>

 5.4、在nacos上添加共享配置

seata:registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址type: nacos # 注册中心类型 nacosnacos:server-addr: 192.168........:8848 # nacos地址namespace: "" # namespace,默认为空group: DEFAULT_GROUP # 分组,默认是DEFAULT_GROUPapplication: seata-server # seata服务名称username: nacospassword: nacostx-service-group: hmall # 事务组名称service:vgroup-mapping: # 事务组与tc集群的映射关系hmall: "default"

在bootstart添加读取各项配置文件的配置项

- dataId: shared-seata.yaml # 共享seata配置

5.5、创建日志表

在每个服务模块对应的数据库创建日志表,用来存放Seata所产生的数据

 5.6、开启事务并测试

@GlobalTransactional注解就是在标记事务的起点,将来TM就会基于这个方法判断全局事务范围,初始化全局事务

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ipsec协议簇(详解)
  • 学懂C语言(十三):C语言中判断与循环的用法
  • 云监控(华为) | 实训学习day6(10)
  • 【华为机考真题】字符串压缩
  • 汽车技术智能化程度不断提升,线束可靠性如何设计?
  • 笔记 3 : 继续彭老师课本第 3 章的 arm 的汇编指令
  • lua 游戏架构 之 LoaderWallet 异步加载
  • 在python中使用正则表达式
  • 微服务和VUE入门教程(16): zuul 熔断
  • JMeter使用手册
  • Redis集群部署Windows版本
  • EXCEL怎么自动添加表格吗?
  • STM32高级运动控制系统教程
  • 时钟芯片LMK04828调试记录
  • unity 实现图片的放大与缩小(根据鼠标位置拉伸放缩)
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • ES6核心特性
  • HTTP 简介
  • Laravel 中的一个后期静态绑定
  • miaov-React 最佳入门
  • Protobuf3语言指南
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • 程序员该如何有效的找工作?
  • 机器学习 vs. 深度学习
  • 解析 Webpack中import、require、按需加载的执行过程
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 阿里云服务器购买完整流程
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 通过调用文摘列表API获取文摘
  • ​2020 年大前端技术趋势解读
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • # 职场生活之道:善于团结
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • (175)FPGA门控时钟技术
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (9)目标检测_SSD的原理
  • (C11) 泛型表达式
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (poj1.2.1)1970(筛选法模拟)
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (zt)最盛行的警世狂言(爆笑)
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (十) 初识 Docker file
  • (原創) 未来三学期想要修的课 (日記)
  • (转)3D模板阴影原理
  • (转)fock函数详解
  • (转)Unity3DUnity3D在android下调试
  • (转)Windows2003安全设置/维护
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET 8.0 中有哪些新的变化?
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段