分布式事务解决方案

Seata架构

Seata事务管理中有三个重要的角色:

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

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

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

image-20251113150527471

Srata的XA模式

image-20251113151057960

Seata的AT模式

AT模式同样是分阶段提交的事务模型,不过弥补了XA模式中资源锁定周期过长的缺陷

image-20251113151316020

TCC模式原理

Try:资源的检测和预留

Confirm:完成资源操作业务;要求Try成功Confirm一定要成功

Cancel:预留资源释放,可以理解为Try的反向操作

image-20251113152415378

MQ分布式事务

在A服务写数据的时候,需要在同一事务内发消息到另一个事务,异步,性能最好

image-20251113152634276

接口幂等

基于RESTful API的角度对部分常见类型请求的幂等性特点进行分析

image-20251113153528939

三种幂等方式:

  • 数据库唯一索引
  • token+redis
  • 分布式锁

token+redis来实现,性能较好

第一次请求生成一个唯一token存入redis,并返回给前端

第二次请求业务处理,携带之前的token,到redis进行验证,如果存在,可以执行业务,删除token;如果不存在,则直接返回,不处理业务

image-20251113154208607

分布式锁,性能较低

XXL-job分布式任务调度平台

xxl-job解决的问题:

  • 解决集群任务的重复执行问题
  • cron表达式定义灵活
  • 定时任务失败了,重试和统计
  • 任务量大,分片执行

xxl-job的路由策略有哪些

  • 轮询(ROUND)
  • 故障转移:按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度
  • 分片广播:广播触发对应集群中所有机器执行一次任务,同时系统自动传递分片参数;可根据分片参数开发分片任务

xxl-job任务执行失败怎么解决

  • 路由策略选择故障转移,使用健康的实例来执行任务
  • 设置重试次数
  • 查看日志+邮件告警来通知相关负责人来解决

如果有大数据量任务同时需要执行怎么解决

  • 多个实例一起去执行(部署集群),路由策略广播分片
  • 让任务执行的代码可以获取分片总数和当前分片,按照取模的方式分摊到各个实例执行
posted @ 2025-11-13 16:33  Leo0OO  阅读(7)  评论(0)    收藏  举报