目录
一、定义
二、流程
三、优点
四、缺点
五、四种模式的对比
一、定义
- Saga模式是一种用于处理复杂异步操作流的模式,通常用于React/Redux的应用程序中。
- 在这种模式中,业务逻辑被分成多个离散步骤,每个步骤都是一个Generator函数,它们可以被以顺序、并发或条件分支方式执行。
- 在Saga模式中,流程被控制在一个中心位置,称为Saga。
- Saga是一个长期运行的进程,它进行异步操作,监视动作并根据其触发器来执行某些操作。
- 它们是纯粹的JavaScript函数,可以派发动作、调用异步API并处理响应。
Saga模式能够让应用程序变得更加可预测、可控,对于解决复杂的并发问题非常有用,同时也可以简化代码的编写。
二、流程
- 一阶段:直接提交本地事务
- 二阶段:成功则什么都不做;失败则通过编写补偿业务来回滚
三、优点
- 事务参与者可以基于事件驱动实现异步调用,吞吐高
- 一阶段直接提交事务,无锁,性能好
- 不用编写TCC中的三个阶段,实现简单
四、缺点
- 软状态持续时间不确定,时效性差
- 没有锁,没有事务隔离,会有脏写
五、四种模式的对比
XA | AT | TCC | SAGA | |
一致性 | 强一致 | 弱一致 | 弱一致 | 最终一致 |
隔离性 | 完全隔离 | 基于全局锁隔离 | 基于资源预留隔离 | 无隔离 |
代码侵入 | 无 | 无 | 有,要编写三个接口 | 有,要编写状态机和补偿业务 |
性能 | 差 | 好 | 非常好 | 非常好 |
场景 | 对一致性、隔离性有高要求的业务 | 基于关系型数据库的大多数分布式事务场景都可以 |
•
对性能要求较高的事务。
•
有非关系型数据库要参与的事务。
|
•
业务流程长、业务流程多
•
参与者包含其它公司或遗留系统服务,无法提供
TCC
模式要求的三个接口
|