四十、Saga模式
2023-12-13 23:49:07
目录
一、定义
- Saga模式是一种用于处理复杂异步操作流的模式,通常用于React/Redux的应用程序中。
- 在这种模式中,业务逻辑被分成多个离散步骤,每个步骤都是一个Generator函数,它们可以被以顺序、并发或条件分支方式执行。
- 在Saga模式中,流程被控制在一个中心位置,称为Saga。
- Saga是一个长期运行的进程,它进行异步操作,监视动作并根据其触发器来执行某些操作。
- 它们是纯粹的JavaScript函数,可以派发动作、调用异步API并处理响应。
Saga模式能够让应用程序变得更加可预测、可控,对于解决复杂的并发问题非常有用,同时也可以简化代码的编写。
二、流程
- 一阶段:直接提交本地事务
- 二阶段:成功则什么都不做;失败则通过编写补偿业务来回滚
三、优点
- 事务参与者可以基于事件驱动实现异步调用,吞吐高
- 一阶段直接提交事务,无锁,性能好
- 不用编写TCC中的三个阶段,实现简单
四、缺点
- 软状态持续时间不确定,时效性差
- 没有锁,没有事务隔离,会有脏写
五、四种模式的对比
XA | AT | TCC | SAGA | |
一致性 | 强一致 | 弱一致 | 弱一致 | 最终一致 |
隔离性 | 完全隔离 | 基于全局锁隔离 | 基于资源预留隔离 | 无隔离 |
代码侵入 | 无 | 无 | 有,要编写三个接口 | 有,要编写状态机和补偿业务 |
性能 | 差 | 好 | 非常好 | 非常好 |
场景 | 对一致性、隔离性有高要求的业务 | 基于关系型数据库的大多数分布式事务场景都可以 |
?
对性能要求较高的事务。
?
有非关系型数据库要参与的事务。
|
?
业务流程长、业务流程多
?
参与者包含其它公司或遗留系统服务,无法提供
TCC
模式要求的三个接口
|
文章来源:https://blog.csdn.net/icbbm/article/details/134876829
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!