Seata

Seata 是一款 Apache 孵化器中的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。以下是对它的详细介绍:

发展历程

  • 2019 年 1 月,Seata 正式开源,开源一周收获超 3k star,曾一度蝉联 GitHub Trending 排行榜第一。
  • 2023 年 10 月,Seata 正式被捐赠进入 Apache 基金会,并以全票通过的优秀表现成为 Apache 孵化器项目。

功能特性

  • 多种事务模式:提供 AT、TCC、SAGA 和 XA 事务模式,支持事务模式的混用,满足不同业务场景的数据一致性需求。
  • 多语言支持:提供 Java、Golang 等多语言 SDK 支持,方便不同语言开发的微服务使用。
  • 多框架支持:支持 Apache Dubbo、Spring Cloud Alibaba、gRPC、Motan、SofaRPC、HttpClient 等服务调用框架。
  • 多数据库支持:支持 MySQL、MariaDB、Oracle、PostgreSQL、OceanBase、TiDB、SQL Server、PolarDB、达梦等关系数据库,且对无侵入 AT 事务模式提供支持。
  • 集群模式丰富:支持基于多种关系数据库、Redis 存储的存算分离集群模式,以及基于 Raft 的存算不分离集群模式,满足不同运维场景下的集群高可用需求。还支持市面上主流的注册中心和配置中心。
  • 插件化扩展:提供丰富的插件化扩展机制,支持用户自定义 SDK 侧 30 多个扩展点。

架构组成

  • 事务协调器(TC):维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。
  • 事务管理器(TM):控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。
  • 资源管理器(RM):控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚。

应用场景

  • 分库分表场景:随着业务规模扩大,单一数据库在容量、性能上遭遇瓶颈,向分库、分表架构演进时,Seata 可解决分库分表场景下的分布式事务问题。
  • 跨服务场景:应用微服务化拆分后,每个微服务使用独立的数据库资源,在涉及跨服务调用的数据一致性场景时,Seata 可保证全局数据的一致性。