saga模型

Saga源于Hector Garcaa-Molrna和Kenneth Salem发表的论文Sagas。一个LLT事务(Long Lived Transaction)可以分成若干个小的事务执行单元,这些小执行单元就是saga事务。Saga方案更适合用于长事务场景。Saga模型将一个分布式事务拆分为多个本地事务,每个本地事务都有相应的执行模块(Transaction)和补偿模块(Compensation),任和一个本地事务出错时,都可以通过调用相关的补充方法实现事务的最终一致性。

当每个Saga子事务序列 T1,T2,...,Tn都有对应的补偿定义C1,C2,...,Cn-1时,Saga系统可以保证如下状态。

子事务序列可以完成。这是事务的最佳情况,即无须回滚。

或者序列 T1, T2, ..., Tx,和Cx, ..., C2, C1(其中x小于n)可以完成。这种状态能够保证,当回滚发生时补偿操作按照正向操作的相反顺序依次执行。

Saga模型同时支持正向恢复和逆向恢复。正向恢复是指重试当前失败的事务,它的实现前提是每个子事务最终都能够执行成功;逆向恢复则是指在任意一个子事务失败时补偿所有已完成的事务。

显然,正向恢复没有必要提供补偿事务,如果在业务中的子事务最终总会成功,那么正向恢复能够降低Saga模型的使用复杂度。另外,即使补偿事务难以实现,正向恢复也是不错的选择。

虽然在理论上来讲,补偿事务永不失败。但是在分布式的世界中,服务器可能会宕机,网络可能会失败,数据中心也可能会停电。因此,需要提供故障恢复后的回退机制,比如人工干预机制等。

Saga模型没有实现事务隔离性。如果两个Saga事务同时操作同一资源则会产生更新丢失、脏数据读取等问题,这时就需要使用Saga作为事务管理机制的应用程序,在应用层面加入资源锁定的逻辑了。

Saga 模式的优缺点

优点

解耦:Saga 模式将长寿命事务拆分为一系列可独立执行的本地事务,降低了不同服务间的耦合度。

高可用:由于 Saga 模式采用了补偿操作来实现事务的原子性,使得每个本地事务可以独立提交,降低了锁的粒度,提高了整个系统的可用性。

容错:Saga 模式可以通过执行补偿操作来处理中断的事务,提高了系统的容错能力。

缺点

一致性:由于 Saga 模式采用了非严格的一致性模型,因此在特定场景下可能出现数据不一致的情况。

复杂性:为确保数据一致性,开发人员需要为每个本地事务编写相应的补偿操作,增加了开发和维护的复杂性。

相关推荐
向夏威夷 梦断明暄6 小时前
从架构特点到功能缺陷,重新认识分析型分布式数据库
数据库·分布式·架构
AAA@峥8 小时前
Ceph 集群配置管理完整指南
运维·数据库·分布式·ceph
心如鉄补9 小时前
分布式链路追踪系统之docker-compose安装skywalking
分布式·docker·skywalking
努力努力再努力wz9 小时前
【分布式系统与 RPC 框架系列】从单机瓶颈到远程调用:一文理解分布式架构与 RPC 原理
linux·网络·c++·分布式·网络协议·rpc·架构
ACP广源盛1392462567311 小时前
此芯 P1 AI BOX / AI NAS@ACP#IX8008、IX8024 应用场景与市场机会
大数据·人工智能·分布式·单片机·嵌入式硬件
网络工程小王1 天前
【HCIE-AI】12.deepspeed分布式并行训练进阶版
人工智能·pytorch·分布式·学习·昇腾·deepspeed
ACP广源盛139246256731 天前
国产算力互联IX8024@ACP#Kimi K3 开源后的端侧部署硬件架构分析
大数据·人工智能·分布式·单片机·嵌入式硬件
花生了什么事o1 天前
分布式 ID 生成方案:从数据库自增到雪花算法
数据库·分布式·算法
爱吃提升2 天前
python 分布式爬虫、爬虫合规与综合实战项目
分布式·爬虫·python
ZENERGY-众壹2 天前
跨品牌逆变器升级:华为锦浪德业 API 对接的 7 个坑
分布式·华为·数据归一化·光伏运维·逆变器api