Seata 分布式事务解决方案

80 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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的服务端独立部署,如下图 image.png

  • TC (Transaction Coordinator) - 事务协调者

维护全局和分支事务的状态,驱动全局事务提交或回滚。

  • TM (Transaction Manager) - 事务管理器

定义全局事务的范围:开始全局事务、提交或回滚全局事务。

  • RM (Resource Manager) - 资源管理器

管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。 在

Seata 中,分布式事务的执⾏流程

  • TM 开启分布式事务, TM会 向 TC 注册全局事务记录;
  • 操作具体业务模块的数据库操作之前, RM 会向 TC 注册分⽀事务;
  • 当业务操作完事后.TM会通知 TC 提交/回滚分布式事务;
  • TC 汇总事务信息,决定分布式事务是提交还是回滚;
  • TC 通知所有 RM 提交/回滚 资源,事务⼆阶段结束。

Seata 特色功能

如下图 image.png

微服务框架⽀持

目前已支持Dubbo、Spring Cloud、Sofa-RPC、Motan 和 gRPC 等RPC框架,其他框架持续集成中。

AT 模式

提供无侵入自动补偿的事务模式,在 AT 模式下,⽤户只需关注⾃⼰的“业务 SQL”,⽤户的 “业务 SQL” 作为⼀阶段,Seata 框架会⾃动⽣成事务的⼆阶段提交和回滚操作; 目前已支持MySQL、Oracle、PostgreSQL、TiDB 和 MariaDB。H2、DB2、SQLServer、达梦开发中

整体机制

两阶段提交协议的演变:

  • 一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。

  • 二阶段:

    • 提交异步化,非常快速地完成。
    • 回滚通过一阶段的回滚日志进行反向补偿

使用要点:

  1. 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" 
    }
}
  1. 向nacos中添加配置信息config.txt(需下载)
  2. 所有服务创建 UNDO_LOG 表
  • TCC 模式
    • 支持 TCC 模式并可与 AT 混用,灵活度更高
  • SAGA 模式
    • 为长事务提供有效的解决方案,提供编排式与注解式(开发中)
  • XA 模式
    • 支持已实现 XA 接口的数据库的 XA 模式,目前已支持MySQL、Oracle、TiDB和MariaDB
  • 高可用
    • 支持计算分离集群模式,水平扩展能力强的数据库和 Redis 存储模式.Raft模式Preview阶段