沙田东莞网站建设开发软件系统
2026/4/7 12:00:46 网站建设 项目流程
沙田东莞网站建设,开发软件系统,免费简历在线制作网站,建行信用卡网站文章目录SeataSeata——架构原理Seata——实现分布式事务Seata——原理1. 二阶提交协议2. 四种事务模式Seata 官方文档#xff1a;https://seata.apache.org/zh-cn/docs/user/configurations/ 在单体服务中#xff0c;一个请求只会在一个服务中#xff0c;连接一个数据库https://seata.apache.org/zh-cn/docs/user/configurations/在单体服务中一个请求只会在一个服务中连接一个数据库对事务的回滚就可以使用 Transational 进行回滚保证数据的一致性。在微服务项目中一个请求可能会涉及多个服务每个服务会单独连接数据库此时的 Transactional 注解无法保证微服务下数据的一致性。Seata 用于解决分布式下的数据一致性。Seata——架构原理TCTransaction Coordinator事务协调者维护全局和分支事务的状态驱动全局事务提交或回滚。TMTransaction Manager事务管理器定义全局事务的范围开始全局事务、提交或回滚全局事务。RMResource Manager资源管理器管理分支事务处理的资源与TC交谈以注册分支事务和报告分支事务的状态并驱动分支事务提交或回滚。Seata——实现分布式事务在项目中配置Seata之后只需要在 TM 事务管理器的方法上添加GlobalTransactional注解在其他本地事务加EnableTransactionManagementTransactional即可保证事务的一致性。Seata——原理1. 二阶提交协议第一阶段——本地事务提交1解析SQL2生成前镜像根据 SQL 中的 where 条件查询修改操作前的数据称为前镜像3执行业务 SQL4生成后镜像根据 id 查询修改后的数据称为后镜像5插入回滚日志undo_log将前镜像和后镜像保存到 undo_log 日志中6注册分支事务在TC中申请一个全局锁锁定操作的数据防止其他人操作。TC的全局锁相当于MySQL的行级别锁只锁操作的数据。7本地事务提交将业务数据和 undo_log 日志提交保存8向 TC 汇报事务执行状态第二阶段–各事务分支均成功——分支提交1收到 TC 提交响应请求立即响应OK2给异步任务队列添加异步任务3异步和批量删除 undo_log 日志记录–存在某个事务分支失败——分支回滚1先找到uodo_log记录通过XIDBranchID2数据校验后镜像和当前数据是否一致不一致说明当前数据被其他操作给篡改了需要配置相应的策略如果一致就说明一起ok只需要回滚。3回滚数据到前镜像的内容完成后删除uodo_log记录。2. 四种事务模式官方文档https://seata.apache.org/zh-cn/docs/user/mode/atAT 模式默认模式。一阶段业务数据和回滚日志记录在同一个本地事务中提交释放本地锁和连接资源。二阶段1提交异步化非常快速地完成。2回滚通过一阶段的回滚日志进行反向补偿。XA 模式第一阶段不会提交数据阻塞事务请求在第二阶段确认提交再提交或者回滚。全局锁MySQL行锁在第一阶段就开启事务一开始就用阻塞模式性能差。AT和XA区别AT第一阶段执行完SQL释放行锁XA是到第二阶段才提交SQL导致行锁从开始到最后阻塞时间长性能差。但二者都是一直持有seata的全局锁的。Saga 模式Saga 模式是 SEATA 提供的长事务解决方案。对于短时间内执行不完的事务。例如请假审批其他模式都用了锁如果长期锁在那是对系统是非常大的阻塞。Saga是基于消息队列实现。TCC 模式主要是广义上的事务需要写侵入式的代码。需要业务系统自行实现 TryConfirmCancel 三个操作。举例业务需要三个事务一个事务改数据库一个发短信一个发邮件这就用AT和XA行不通了无法回滚如果全局事务失败只能进行补偿性操作例如再发邮件和短信提醒对方扣款失败或者订单失败等。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询