个人简历制作网站,吉首建设局网站,中天建设集团有限公司是央企吗,动漫网站开发 百度一下#x1f4dd; 学技术、更要掌握学习的方法#xff0c;一起学习#xff0c;让进步发生 #x1f469;#x1f3fb; 作者#xff1a;一只IT攻城狮 #xff0c;关注我#xff0c;不迷路 。 #x1f490;学习建议#xff1a;1、养成习惯#xff0c;学习java的任何一个技术… 学技术、更要掌握学习的方法一起学习让进步发生 作者一只IT攻城狮 关注我不迷路 。 学习建议1、养成习惯学习java的任何一个技术都可以先去官网先看看更准确、更专业。 学习建议2、然后记住每个技术最关键的特性通常一句话或者几个字从主线入手由浅入深学习。 ❤️ 《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。 文章目录 一、分布式事务1、我们先回顾下事务2、分布式事务问题3、一般事务的解决方案为什么不能作用于分布式事务 二、分布式事务解决方案三、分布式事务框架Seata1、Seata是什么2、Seata整体架构3、Seata支持的配置中心4、事务信息存储配置5、微服务集成seata 我们先来回顾下事务和分布式事务是什么然后我们面临哪些分布式事务问题如何解决带着问题我们一起向下学习。
一、分布式事务
1、我们先回顾下事务
事务是指数据库中的一组操作这些操作要么全部成功执行要么全部回滚以保持数据的一致性和完整性。事务具有以下四个特性通常称为ACID特性
原子性Atomicity事务中的所有操作要么全部执行成功要么全部失败回滚没有中间状态。一致性Consistency事务的执行使数据库从一个一致性状态转移到另一个一致性状态。事务在开始和结束时数据库必须满足预定义的一致性规则。隔离性Isolation事务的执行应该与其他并发执行的事务相互隔离每个事务都感觉不到其他事务的存在。持久性Durability一旦事务提交其对数据库的修改应该是永久性的即使在系统故障的情况下也不应丢失。
本地事务Spring本地事务使用Transactional 大多数场景下我们的应用都只需要操作单一的数据库这种情况下的事务被称之为本地事务Local Transaction。本地事务的ACID特性是数据库直接提供支持。
分布式事务Distributed Transaction是指跨越多个分布式系统的事务其中涉及到多个独立的参与者和资源。分布式事务需要确保多个参与者之间的操作的一致性和原子性。
2、分布式事务问题
如图用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持
仓储服务Stock对给定的商品扣除仓储数量。订单服务Order根据采购需求创建订单。账户服务Account从用户账户中扣除余额。
单体应用被拆分成微服务应用原来的三个模块被拆分为三个独立的应用分别使用三个独立的数据源。 业务操作需要调用三个服务来完成此时每个服务内部的数据一致性由本地事务来保证但是全局的数据一致性问题没法保证。 故一次业务操作需要跨多个数据源或者需要跨多个系统进行远程调用就会产生分布式事务问题。
由于网络延迟、节点故障、通信失败等原因导致分布式事务无法像单个系统的事务那样简单地实现ACID特性。
常见的分布式事务问题包括
部分失败在一个分布式事务中有些参与者执行成功而其他参与者执行失败导致事务的部分操作成功部分操作失败。数据不一致在一个分布式事务中数据的一致性无法保证可能因为参与者之间的数据冲突或者数据同步延迟。
3、一般事务的解决方案为什么不能作用于分布式事务
解决一般事务问题的方法例如使用数据库的ACID特性、锁机制、回滚和恢复机制等无法直接应用于分布式事务问题原因如下
并发控制问题在分布式环境中由于多个事务同时执行并发控制变得更加复杂。传统的锁机制在分布式环境中无法有效地协调多个参与者之间的并发访问。通信故障分布式事务中的参与者之间通过网络进行通信网络延迟、断开连接或消息丢失可能导致事务协调失败或超时。参与者故障在分布式系统中参与者可能由于硬件故障、软件错误或其他原因而崩溃或无响应。这可能导致事务无法完成或导致数据不一致。同步问题在分布式环境中数据的复制和同步可能存在延迟导致不同参与者之间的数据不一致。跨越多个系统分布式事务涉及跨越多个独立的系统每个系统可能具有不同的事务管理机制和数据存储方式这增加了事务管理的复杂性。
二、分布式事务解决方案
这里先简单提及一下常见的分布式事务解决方案
seata阿里分布式事务框架消息队列sagaXA
这四种常见的分布式事务解决方案分别对应着分布式事务的四种模式AT、TCC、Saga、XA
四种分布式事务模式都有各自的理论基础分别在不同的时间被提出每种模式都有他的适用场景同样每个模式也都诞生有各自的代表产品而这些代表产品可能就是我们常见的全局事务、基于可靠消息、最大努力通知、TCC。
分布式事务相关的协议有2PC、3PC。由于三阶段提交协议3PC非常难实现目前市面主流的分布式事务解决方案都是2PC协议。两阶段提交协议顾名思义分为两个阶段Prepare和Commit。 TCCTry-Confirm-Cancel实际上是服务化的两阶段提交协议。 三、分布式事务框架Seata
1、Seata是什么 【Seata官网】 SeataSimple Extensible Autonomous Transaction Architecture是一款开源的分布式事务解决方案致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA四种事务模式为用户打造一站式的分布式解决方案包括事务管理、本地事务协调、分布式事务日志和分布式锁等组件。
Seata通过使用分布式事务日志和分布式锁来保证事务的一致性和可靠性。分布式事务日志记录全局事务的操作日志并提供了事务的恢复和回滚能力。分布式锁用于保护全局事务在不同参与者之间的并发访问确保数据的一致性和正确性。
2、Seata整体架构
一个典型的分布式事务过程分为一ID全局事务id三组件模型。 TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器 定义全局事务的范围开始全局事务、提交或回滚全局事务。 RM (Resource Manager) - 资源管理器 管理分支事务处理的资源与TC交谈以注册分支事务和报告分支事务的状态并驱动分支事务提交或回滚。 Seata的整体架构如上图分TC、TM和RM三个角色TCServer端为单独服务端部署负责维护分布式事务的运行状态TM和RMClient端由业务系统集成TM是一个分布式事务的发起者和终结者而RM则负责本地事务的运行并上报。
一个典型的事务过程
1、TM向TC申请开启一个全局事务 全局事务创建成功并生成一个全局唯一的XID;
2、XID在微服务调用链路的上下文中传播
3、RM向TC注册分支事务将其纳入XID对应全局事务的管辖
4、TM向TC发起针对XID的全局提交或回滚决议
5、TC调度XID下管辖的全部分支事务完成提交或回滚请求
3、Seata支持的配置中心
Seata是一个分布式事务seata服务端也是一个微服务需要和其他微服务一样需要注册中心和配置中心。
Seata支持的配置中心Seata支持的注册中心nacosconsul apollo etcd zookeeperfile (读本地文件, 包含conf、properties、yml配置文件的支持)eureka consul nacos etcdzookeeper sofa redis file (直连)
4、事务信息存储配置
Server 端存储模式store.mode支持三种方式
存储模式初始化说明 file 单机模式默认为此模式无需改动直接启动全局事务会话信息存储在内存中读写并持久化至本地文件 root.data bin\sessionStore\root.data) 中性能较高db 高可用模式Mysql 5.71. 初始DBseata/script/server/db/mysql.sql2. 修改存储模式store.mode“db”3. 修改存储数据源store.db相关属性全局事务会话信息通过db共享相应性能差些redis (Seata-Server 1.3及以上版本支持)1. 修改存储模式store.mode“redis”2. 修改存储数据源store.redis相关属性性能较高存在事务信息丢失风险,需提前配置合适当前场景的redis持久化配置
5、微服务集成seata
Seata安装与环境搭建参看:Seata1.5.2Nacos分布式事务环境搭建