fix(test): stabilize gRPC and Getty transaction tests (#1211)
fix(test): make gRPC transaction tests race-safe
fix(test): cover timeout rollback and scope Go compatibility CI
docs(ci): explain Go version scope for transaction tests
fix(test): stabilize Getty transaction race tests
Inject the Getty remoting client in transaction tests, keep timeout rollback delegation unchanged for production managers, and extend the Go compatibility matrix to cover Getty.
Co-authored-by: ThunGuo tew@apache.org
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802047560号
什么是 Seata-go?
Apache Seata(incubating)是一个非常成熟的分布式事务框架,是 Java 领域事实上的标准分布式事务平台。Seata-go 是其在多语言生态中 Go 语言的实现版本,实现了 Java 与 Go 之间的互操作,使得 Go 开发者也可以使用 seata-go 实现分布式事务。请访问 Seata 官网 获取快速入门和文档。
Seata-go 的原理与 Seata-java 一致,由 TM、RM 和 TC 三部分组成。其中 TC 功能复用 Java 的实现,而 TM 和 RM 则已与 Seata-java 对接。
微服务中的分布式事务问题
假设我们有一个传统的单体应用,其业务由三个模块组成,使用一个本地数据源,自然由本地事务保障数据一致性。
但在微服务架构中,这三个模块被设计成了三个不同的服务,分别使用不同的数据源(数据库每服务模式)。单个服务内的数据一致性可以通过本地事务保障。
但整个业务范围的一致性如何保障?
Seata-go 如何做?
Seata-go 就是为了解决上述问题而生。
首先,如何定义一个分布式事务?
我们认为,分布式事务是一个全局事务,由一组分支事务组成,而分支事务通常就是本地事务。

Seata-go 中有三个角色:
事务协调器(TC):维护全局和分支事务的状态,驱动全局提交或回滚。
事务管理器(TM):定义全局事务的范围,开始、提交或回滚全局事务。
资源管理器(RM):管理分支事务所处理的资源,与 TC 通信注册分支事务并报告状态,驱动分支事务提交或回滚。
Seata-go 分布式事务的典型生命周期如下:
TM 请求 TC 开启一个新的全局事务,TC 生成表示全局事务的 XID。
XID 在微服务调用链中传播。
RM 将本地事务注册为该 XID 对应的全局事务的分支事务。
TM 请求 TC 提交或回滚该 XID 对应的全局事务。
TC 驱动该 XID 对应的所有分支事务进行提交或回滚。
更多原理和设计细节,请参阅 Seata Wiki 页面。
历史背景
阿里巴巴
TXC:淘宝事务构建器。2014 年阿里中间件团队启动,用于应对从单体架构转向微服务带来的分布式事务问题。
GTS:全局事务服务。2016 年 TXC 在阿里云上线,更名为 GTS。
Fescar:2019 年开始基于 TXC/GTS 启动开源项目 Fescar,与社区合作。
蚂蚁金服
XTS:扩展事务服务。自 2007 年开始开发的分布式事务中间件,被广泛应用于蚂蚁金服,解决跨库跨服务数据一致性问题。
DTX:分布式事务扩展。2013 年起在蚂蚁金服云发布,命名为 DTX。
Seata 社区
Seata:简单可扩展的自主事务架构。蚂蚁金服加入 Fescar,使其成为一个更加中立开放的社区,Fescar 更名为 Seata。
如何运行?
Seata-go v2 需要 Go 1.20 或更高版本。
如果你想了解如何使用和集成 seata-go,请参考 apache/seata-go-samples
如何查找最新版本
访问 Seata-Go 的 GitHub Releases 页面
打开:https://github.com/apache/incubator-seata-go/releases
最新的 tag / release 就是目前的最新稳定版本。
文档
快速开始
你可以访问 Seata 官方网站获取完整文档:Seata 官网
问题报告
若有问题,请遵循 issue 选择页面 报告问题。
安全
请勿使用公开的问题跟踪器,详情请参阅我们的 安全政策
参与贡献
Seata-go 当前处于建设阶段,欢迎业界同仁加入我们,共同推进 Seata-go 建设!如果你想为 Seata-go 贡献代码,请参考 代码贡献规范,也可以加入我们的社区钉钉群:33069364 一起交流!
联系方式
* dev@seata.apache.org - 用于开发/用户讨论 订阅、取消订阅、归档
Seata 生态系统
Seata 官网- Seata官方网站
Seata - Seata 客户端和服务端
Seata GoLang - Seata Go 客户端和服务端
Seata 示例- Seata 示例
Seata Go 示例- Seata GoLang 示例
Seata K8s 集成- Seata 与 K8S 集成
Seata 命令行工具- Seata CLI 工具
贡献者
Seata-go感谢所有贡献者的付出。[贡献者列表]
许可证
Seata-go 使用 Apache 2.0 协议,详情请查看 LICENSE 文件