分布式事务中Saga的优缺点有哪些?

提问者:帅平 问题分类:面试刷题
分布式事务中Saga的优缺点有哪些?
2 个回答
酷的没边儿
酷的没边儿
Saga方案提交的优点有:
灵活性:Saga 允许每个小事务独立管理,提高了系统的灵活性。
减少资源锁定:由于 Saga 不需要在事务执行过程中持续占用资源,因此可以减少长时间的资源锁定,提高系统的并发能力。
容错性:Saga 通过定义补偿操作来处理失败,增强了系统的容错能力。
适用于微服务架构:在微服务架构中,Saga 可以跨服务边界管理事务,每个服务独立处理自己的事务和补偿逻辑。

Saga方案提交的缺点有:
复杂性:实现 Saga 需要定义每个小事务的补偿操作,这可能会增加系统的复杂性。
数据一致性:Saga 不能提供 2PC 那样的即时一致性保证,它只能保证最终一致性,这在某些业务场景中可能是不够的。
补偿操作的难度:在某些情况下,补偿操作可能很难实现,尤其是当事务有副作用时(比如发送了一个不可撤销的通知)。
测试和调试:由于 Saga 涉及多个服务和补偿逻辑,测试和调试可能会更加困难。
发布于:6个月前 (01-29) IP属地:未知
霸占丶迩德
霸占丶迩德
先解释下Saga方案:
Saga 是一种长事务的解决方案,它将一个大的分布式事务拆分成多个较小的本地事务,这些本地事务通过异步消息传递串联起来。
每个本地事务执行成功后,会发送消息触发下一个事务的执行。如果某个本地事务失败,Saga 会执行一系列补偿操作(回滚之前的操作)来保持数据的一致性。

.下面举个例子:
假设有一个旅游网站,用户可以通过它预订机票、酒店和租车服务。每个预订步骤都可以视为一个 Saga 中的小事务:
用户预订机票。
用户预订酒店。
用户预订租车服务。

如果用户成功完成了所有预订步骤,那么整个旅行预订就完成了。但如果在预订租车服务时失败了,那么 Saga 会开始执行补偿操作:
取消酒店预订。
取消机票预订。

通过这种方式,Saga 确保了用户不会因为部分服务预订失败而损失金钱或留下未处理的预订。
发布于:6个月前 (01-29) IP属地:四川省
我来回答