Go微服务分布式事务SAGA模式与TCC实现 Go微服务分布式事务SAGA模式与TCC实现文章导语微服务架构下数据分布在多个数据库中传统的ACID事务不再适用。分布式事务的解决方案中SAGA和TCC是最常用的两种模式。本文在Go中实现这两种模式的核心逻辑。一、SAGA编排模式typeSagaStepstruct{Actionfunc(ctx context.Context)errorCompensatefunc(ctx context.Context)error}typeSagastruct{steps[]SagaStep log[]int// 已执行的步骤索引}func(s*Saga)Execute(ctx context.Context)error{fori,step:ranges.steps{iferr:step.Action(ctx);err!nil{// 执行补偿returns.compensate(ctx,i)}s.logappend(s.log,i)}returnnil}func(s*Saga)compensate(ctx context.Context,failedAtint)error{fori:failedAt-1;i0;i--{iferr:s.steps[i].Compensate(ctx);err!nil{log.Printf(补偿步骤%d失败: %v,i,err)}}returnfmt.Errorf(事务在步骤%d失败,failedAt)}// 使用saga:Saga{steps:[]SagaStep{{Action:createOrder,Compensate:cancelOrder},{Action:deductInventory,Compensate:restoreInventory},{Action:processPayment,Compensate:refundPayment},},}saga.Execute(ctx)二、TCC模式typeTCCServiceinterface{Try(ctx context.Context)errorConfirm(ctx context.Context)errorCancel(ctx context.Context)error}typeTCCCoordinatorstruct{services[]TCCService}func(c*TCCCoordinator)Execute(ctx context.Context)error{// Phase 1: Tryfor_,svc:rangec.services{iferr:svc.Try(ctx);err!nil{// 回滚已Try的服务c.cancel(ctx)returnerr}}// Phase 2: Confirmfor_,svc:rangec.services{iferr:svc.Confirm(ctx);err!nil{// Confirm失败需要重试或人工介入returnerr}}returnnil}三、全文总结SAGA适合长事务通过补偿实现最终一致性TCC适合资源预留场景Try-Confirm-Cancel三阶段分布式事务代价高优先考虑业务层面的最终一致性参考文献Hector Garcia-Molina - Sagas论文Seata分布式事务框架《微服务架构设计模式》

相关新闻

最新新闻

EV 驱动电机零转速满转矩起步(Align→OpenLoop→FOC)Simulink 完整原型

EV 驱动电机零转速满转矩起步(Align→OpenLoop→FOC)Simulink 完整原型

目录 一、为什么“零转速满转矩起步”要单独做 二、起步控制原理简述 2.1 预定位(Align / Pre‑Excite) 2.2 开环旋转(Open‑Loop Voltage‑Oriented) 2.3 切闭环 FOC

2026/8/22 13:34:43
StereoNet实时立体匹配:轻量级CNN架构解析与工程实践指南

StereoNet实时立体匹配:轻量级CNN架构解析与工程实践指南

1. 项目概述:StereoNet与实时立体匹配的破局点在计算机视觉领域,立体匹配一直是个经典又充满挑战的问题。简单来说,它的目标就是从一对左右视角拍摄的图像中,计算出每个像素点的深度信息,从而“看”到三维世界。传统的…

2026/8/22 13:34:43
ADEPT框架:预训练与后训练加速机器人灵巧操作强化学习

ADEPT框架:预训练与后训练加速机器人灵巧操作强化学习

1. 先搞清楚 ADEPT 到底在解决什么实际问题如果你在关注机器人灵巧操作,尤其是想让机械手像人一样完成抓取、旋转、装配这类精细活儿,那么 ADEPT 这个框架值得你花时间了解一下。它不是一个全新的算法,而是一个结合了预训练和后训练的强化学习…

2026/8/22 13:34:43
X-AnyLabeling 数据标注工具快速上手指南:AI 预标注 + 手动修正

X-AnyLabeling 数据标注工具快速上手指南:AI 预标注 + 手动修正

X-AnyLabeling 数据标注工具快速上手指南:AI 预标注 手动修正 【免费下载链接】X-AnyLabeling X-AnyLabeling: A lightweight, efficient, and unified cross-platform desktop application for annotating text, image, video, and multimodal data, combining ve…

2026/8/22 13:34:43
acados 非线性最优控制实时求解器完整拆解:从 Python 建模到嵌入式部署

acados 非线性最优控制实时求解器完整拆解:从 Python 建模到嵌入式部署

acados 非线性最优控制实时求解器完整拆解:从 Python 建模到嵌入式部署 【免费下载链接】acados Fast and embedded solvers for nonlinear optimal control and nonlinear model predictive control 项目地址: https://gitcode.com/gh_mirrors/ac/acados 发…

2026/8/22 13:34:43
kaml快速开始:data class与YAML双向转换,4个实战例子讲清核心用法

kaml快速开始:data class与YAML双向转换,4个实战例子讲清核心用法

kaml快速开始:data class与YAML双向转换,4个实战例子讲清核心用法 【免费下载链接】kaml YAML support for kotlinx.serialization 项目地址: https://gitcode.com/gh_mirrors/ka/kaml kaml 是一个为 Kotlin 生态提供 YAML 支持的开源库&#xff…

2026/8/22 13:29:43