seata几种模式介绍
一、AT(auto transaction)模式
这是一种无侵入式分布式事务解决方案,该模式下,用户只需要关注自己的“业务SQL”(这是第一个阶段),seata框架会自动生成分布式事务的二阶段提交或回滚。
一阶段:
在该阶段,seata会拦截业务SQL,首先解析SQL语义,找到对应要更新的业务数据,在业务数据更新之前,将其保存成“before image”(未更新前的原始数据--回滚数据),然后执行业务SQL,更新业务数据。在更新之后,再将其保存为“after image”(更新之后的数据--提交数据),最后生成行锁,以上操作全部在一个数据库事务内完成,这样保证了一阶段事务的原子性。
二阶段提交:
二阶段如果是提交的话,因为业务SQL在一阶段已经提交至数据库,所以seata框架只需要将一阶段保存的快照数据和行锁删掉即可。
二阶段回滚:
seata需要回滚一阶段已经执行的业务SQL,使用一阶段存储的“before image”还原业务数据;但在还原前,要首先校验脏写,对比数据库当前业务数据和“after image”,如果两份数据完全一样,说明没有脏写,
可以还原业务数据,如果不一致,说明出现脏写,需要人工干预。
二、TCC模式
该模式需要用户根据自己的业务场景(因此侵入性太强,但是整个过程不涉及锁,性能较高),实现Try、Confirm和Cancel三个操作,事务发起方在一阶段执行Try方法,二阶段执行Confirm或Cancel方法。
三、可靠消息最终一致性
这里我们一般选择RocketMQ。
转载:基于RocketMQ分布式事务 - 完整示例 - 知乎 (zhihu.com)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2021-02-18 NameNode故障处理
2021-02-18 HDFS的I/O流操作
2019-02-18 docker数据管理
2019-02-18 访问docker仓库