持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情
Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。
Seata网址:seata.io/zh-cn/index…
Seata产品模块
Seata 有三大模块,分别是TC (Transaction Coordinator)、TM (Transaction Manager)、RM (Resource Manager) 。其中 TM 和 RM 是 Seata 的客户端与业务系统集成在一起,TC 作为Seata的服务端独立部署,如下图
- TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。
- TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。
- RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。 在
Seata 中,分布式事务的执⾏流程
:
- TM 开启分布式事务, TM会 向 TC 注册全局事务记录;
- 操作具体业务模块的数据库操作之前, RM 会向 TC 注册分⽀事务;
- 当业务操作完事后.TM会通知 TC 提交/回滚分布式事务;
- TC 汇总事务信息,决定分布式事务是提交还是回滚;
- TC 通知所有 RM 提交/回滚 资源,事务⼆阶段结束。
Seata 特色功能
如下图
微服务框架⽀持
目前已支持Dubbo、Spring Cloud、Sofa-RPC、Motan 和 gRPC 等RPC框架,其他框架持续集成中。
AT 模式
提供无侵入自动补偿的事务模式,在 AT 模式下,⽤户只需关注⾃⼰的“业务 SQL”,⽤户的 “业务 SQL” 作为⼀阶段,Seata 框架会⾃动⽣成事务的⼆阶段提交和回滚操作; 目前已支持MySQL、Oracle、PostgreSQL、TiDB 和 MariaDB。H2、DB2、SQLServer、达梦开发中
整体机制
两阶段提交协议的演变:
-
一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
-
二阶段:
- 提交异步化,非常快速地完成。
- 回滚通过一阶段的回滚日志进行反向补偿
使用要点:
- registry.con行配置注册中心(支持多种注册中心)
registry {
#注册中⼼
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
# 这⾥选择 nacos 注册配置
type = "nacos"
loadBalance = "RandomLoadBalance"
loadBalanceVirtualNodes = 10
nacos {
application = "seata-server"
serverAddr = "127.0.0.1:8848"
group = "SEATA_GROUP"
namespace = ""
cluster = "default"
username = "nacos"
password = "nacos"
}
}
- 向nacos中添加配置信息config.txt(需下载)
- 所有服务创建 UNDO_LOG 表
- TCC 模式
- 支持 TCC 模式并可与 AT 混用,灵活度更高
- SAGA 模式
- 为长事务提供有效的解决方案,提供编排式与注解式(开发中)
- XA 模式
- 支持已实现 XA 接口的数据库的 XA 模式,目前已支持MySQL、Oracle、TiDB和MariaDB
- 高可用
-
支持计算分离集群模式,水平扩展能力强的数据库和 Redis 存储模式.Raft模式Preview阶段
-