【Seata 分布式事务原理与 Seata‑Server 部署】

📅 2026/8/19 10:14:26
【Seata 分布式事务原理与 Seata‑Server 部署】
提示本文原创作品良心制作干货为主简洁清晰一看就会文章目录前言一、Seata介绍和工作机制1.1 Seata是什么1.2 Seata三大核心角色1.3 Seata四种事务模式二、Seata Server安装前言微服务架构下业务会被拆分为多个独立服务一次业务操作往往需要跨多个服务、多个数据库完成。传统本地数据库事务只能保障单库的数据一致性一旦其中某个服务执行失败就会出现部分数据成功、部分失败的数据不一致问题为了解决微服务场景下的分布式事务难题Apache Seata 应运而生。本文将介绍 Seata 基础概念、核心角色、事务模式并讲解 Seata Server 的安装部署帮助大家理解分布式事务的实现逻辑完成基础环境搭建一、Seata介绍和工作机制1.1 Seata是什么微服务架构下一次业务会调用多个微服务、操作多个数据库。Spring的Transactional只能管单库本地事务跨服务跨库就失效会出现一部分服务成功、一部分失败数据错乱Seata 就是用来解决这个跨服务的数据一致性问题举例子假设下单业务有三个模块这三个模块分别有三个数据库创建订单 → 扣库存 → 扣余额如果订单创建成功、扣库存成功扣款服务报错没有Seata订单存在、库存少了、钱没扣数据错乱使用Seata要么全部成功要么全部回滚恢复原样1.2 Seata三大核心角色TC 事务协调器Seata‑Server独立部署全局事务大脑保存全局、分支事务状态下发提交/回滚指令需要运维部署TM 事务管理器嵌入业务服务SDKTM 角色对外提供的使用入口开启全局事务告诉TC整体提交/整体回滚开发使用RM 资源管理器嵌入业务服务SDK每个微服务都有RM管理本地数据库注册分支事务给TC接收TC指令执行本地提交或回滚开发使用调用链路会传递一个XID全局事务ID贯穿所有微服务1.3 Seata四种事务模式AT模式最常用默认低侵入只需要TM 角色对外提供的使用入口需要数据库建undo_log回滚日志表。原理一阶段执行业务SQL保存修改前的数据快照undo_log二阶段全部成功就删除日志有失败就用快照自动还原数据。适用高并发互联网应用允许数据出现短时不一致可通过对账程序或补录来保证最终一致性XA模式强一致性分阶段事务模式牺牲了一定的可用性无业务入侵适用于金融行业并发量不大但数据很重要的场景TCC模式Try预留资源、Confirm确认执行、Cancel撤销释放资源业务自己写三套接口侵入业务代码不依赖undo_log适合金融、账户转账场景SAGA模式长事务方案每个分支直接提交本地事务失败时执行预先写好的补偿逻辑反向回滚适合流程很长、第三方外部系统对接场景二、Seata Server安装Seata分TC、TM和RM三个角色TCServer端为单独服务端部署运维负责TM和RMClient端由业务系统集成开发使用Seata下载地址https://seata.apache.org/download/seata-server/## 1. 需要jdk环境rootubuntu:~# java --versionjava 21.0.12 2026-07-21 LTS Java(TM) SE Runtime Environment (build 21.0.127-LTS-205) Java HotSpot(TM) 64-Bit Server VM (build 21.0.127-LTS-205,mixed mode,sharing)## 2. 我在测试新版本的时候有网页缺失的问题所以我这里选择的是2.2版rootubuntu:~# wget https://www.apache.org/dyn/closer.lua/incubator/seata/2.2.0/apache-seata-2.2.0-incubating-bin.tar.gz?actiondownloadrootubuntu:~# mkdir /usr/local/seaterootubuntu:~# tar xf apache-seata-2.2.0-incubating-bin.tar.gz?actiondownload -C /usr/local/seaterootubuntu:~# ls /usr/local/seate/seata-server/bin/seata-server.bat seata-server.sh seata-setup.sh## 3. 启动seatarootubuntu:~# /usr/local/seate/seata-server/bin/seata-server.sh## 4. seata会在/root下生成启动日志如果报错可以查看rootubuntu:~# lsapache-seata-2.2.0-incubating-bin.tar.gz?actiondownload logs nohup.out sessionStore rootubuntu:~# netstat -tnlp浏览器访问本机ip:7091dashboard如下直接给发开使用即可到此我们就部署好了Seata Server注文中若有疏漏欢迎大家指正赐教。本文为100%原创转载请务必标注原创作者尊重劳动成果。求赞、求关注、求评论你的支持是我更新的最大动力评论区等你