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

分布式事务详解

一、背景与问题引入

在单体系统中,事务(Transaction)通常由数据库本身保证——ACID(原子性、一致性、隔离性、持久性)特性足以覆盖大多数业务需求。

然而,随着系统拆分为多个微服务后,一个完整的业务流程往往需要多个服务、多个数据库的协作。例如:

  • 下单服务 → 库存服务 → 支付服务
  • 用户服务 → 积分服务 → 消息通知服务

此时,单一数据库事务无法覆盖整个业务链,分布式事务问题由此产生:

如何在多服务、多数据源的协作中,依然保证数据一致性?


二、核心概念与一致性模型

1. 本地事务与全局事务

  • 本地事务(Local Transaction):仅作用于单个数据库,由数据库自身保证 ACID。
  • 全局事务(Global Transaction):跨多个节点或服务的事务,需要协调各方共同提交或回滚。

2. 一致性模型的取舍

模型描述适用场景
强一致性所有节点在任意时刻数据一致金融核心系统
最终一致性数据最终达到一致,但短时可能不一致电商、积分、库存
弱一致性某些节点可能长期不一致高可用优先的场景

三、分布式事务的典型实现方案

1. XA 协议(两阶段提交)

核心思路
协调者(Transaction Manager)通过两阶段操作控制多个资源(数据库、消息系统等):

  • 阶段一(Prepare):各参与者预提交并锁定资源;
  • 阶段二(Commit/Rollback):协调者统一决策提交或回滚。

优点:标准化、理论上可保证强一致性。
缺点:性能开销大、资源锁定时间长,难以应对高并发。
典型实现:Atomikos、Bitronix、Narayana。


2. TCC 模型(Try-Confirm-Cancel)

思想:将业务操作拆分为三个阶段:

  1. Try:预留资源;
  2. Confirm:确认执行;
  3. Cancel:取消执行。

示例(下单流程):

阶段操作
Try预扣库存、冻结资金
Confirm扣减库存、完成支付
Cancel回滚库存、解冻资金

优点:业务可控,补偿逻辑灵活。
缺点:开发成本高,需要业务方显式实现三种接口。
典型实现:Seata TCC、Hmily。


3. 本地消息表 / Outbox 模式

核心思想
通过“事务内写消息 + 异步发送”实现最终一致性。

  • 在本地事务中同时写入业务数据与消息表;
  • 消息发送器异步扫描消息表并推送;
  • 下游消费成功后删除消息。

优点:实现简单,无需全局锁。
缺点:消息补偿、重复投递需额外处理。
适用场景:订单创建、状态变更通知等异步链路。


4. Saga 模型

核心思路
将长事务拆分为一系列可补偿的本地事务。每一步有对应的补偿操作:

T1, T2, T3 ...
C1, C2, C3 ...

当某个步骤失败时,反向调用补偿逻辑(C3、C2、C1)回滚。

优点:易于理解,适合长事务场景。
缺点:补偿逻辑复杂,不适合强一致性场景。
典型实现:Seata Saga、ServiceComb Saga、LRA。


四、分布式事务框架对比

框架模型语言支持优点缺点
SeataAT / TCC / Saga / XAJava社区活跃、集成简单对复杂事务性能有限
RocketMQ 事务消息本地消息表变体Java与消息耦合度高、最终一致性无全局事务
HmilyTCCJava性能较好、注解驱动手动实现接口较繁琐
LCNTxManager协调Java使用透明维护成本高
http://www.dtcms.com/a/511936.html

相关文章:

  • Flink重启策略有啥用
  • 怎样做好物流网站建设免费商业wordpress主题
  • 怎么把qq空间做成企业网站网站用ps下拉效果怎么做
  • 输电线路绝缘子污秽度在线监测装置工作原理及优势解析
  • MOSHELL (7) : 构建3G RNC端到端性能可观测性体系
  • UE5 使用Lyra地图加载插件完成简易Loading
  • 最好的家:干净、烟火与书香
  • 普集网站开发湛江有哪些网站建设公司
  • 青岛开发区做网站海外服务器ip免费
  • 华为OD-23届转行-C++面经
  • 做腰椎核磁证网站是 收 七php如何制作网页
  • tail-f
  • 卸载Python3.12.6报错0x80070643安装时发生严重错误
  • 『 数据库 』MySQL复习 - 内置函数详解
  • Linux中Expect脚本和Shell的脚本核心特点解析、以及比对分析和应用场景
  • 网站建设公司未来发展方向傻瓜式php网站开发
  • Redis缓存--Jedis
  • 三点式振荡器(Colpitts/Hartley)的相关问题
  • 西安淘宝网站建设公司ui设计需要学哪些课程
  • h5游戏免费下载:任意球大师
  • DL2421P1 24V DFN1006封装低电容ESD保护二极管0.3pF,80W,1.5A IPP@8/20uS VC53V
  • 【Threejs-sdk】使用 mogl.js 快速匹配烘焙.
  • 泸州市住房和城乡建设局网站企业信息查询系统官网上海
  • Web原生架构 vs 传统C/S架构:在数据库管理中的性能与安全差异
  • HTTPS 爬虫实战指南 从握手原理到反爬应对与流量抓包分析
  • 淘宝客网站开发服务商酒类营销网站
  • QT:控件VLC播放视频时,如何获得鼠标事件
  • 杭州网站建站商城网站都有什么功能
  • 南宁企业网站设计陕西建设厅网站首页
  • 高频疲劳试验机主要技术规格