订单服务saga的空补偿和悬挂问题,为什么没有使用子事务屏障?
dtm中的子事务屏障可以解决空补偿和悬挂的问题,课程中的订单服务为什么没有用到呢?这一块使用时分场景的吗,平常的项目中怎么衡量是否需要使用子屏障来做呢?还有重试等相关的配置?
正在回答 回答被采纳积分+1
1. 子事务屏障的作用:
空补偿问题:空补偿问题指的是某些分布式事务中,补偿操作被触发,但实际没有执行任何业务逻辑,因为之前的主事务阶段可能并没有发生真正的业务操作。子事务屏障可以避免这种补偿操作对系统的不必要消耗。
悬挂问题:悬挂问题指的是在一些特定情况下,子事务已经开始执行,但主事务没有进行提交或撤销,导致系统中的事务处于一种挂起的状态,难以确定如何处理。子事务屏障可以确保子事务不会在悬挂状态下被不正确地执行。
2. 订单服务为什么没有使用子事务屏障:
课程中的订单服务没有使用子事务屏障,可能是基于以下几点原因:
业务场景简单:如果订单服务的业务流程相对简单、没有复杂的分布式事务操作,空补偿和悬挂问题的风险较低,则无需引入子事务屏障。
系统开销考虑:引入子事务屏障会带来额外的复杂性和性能开销。对于没有频繁涉及分布式事务冲突的系统,可能并不需要使用屏障机制。
可靠性依赖性:部分系统可能已经依赖于其他方式来确保事务的一致性,例如更强的锁机制、幂等设计或是基于单一服务的事务管理。
3. 使用场景的衡量:
决定是否需要使用子事务屏障,通常考虑以下因素:
分布式事务的复杂性:如果系统中分布式事务涉及多个服务之间频繁调用,并且这些调用可能出现补偿与悬挂的现象,那么引入子事务屏障是非常必要的。
幂等性保障:如果业务流程已经通过幂等设计解决了重复请求的问题,那么空补偿问题可能已经被处理,子事务屏障的需求就没有那么迫切。
性能开销:子事务屏障会带来额外的系统开销。如果业务场景下对性能要求较高,且分布式事务问题相对可控,通常不会引入额外的复杂性。
4. 重试与相关配置:
对于分布式事务中的重试机制,可以通过配置重试策略来优化事务的执行:
重试次数:设置允许的最大重试次数,防止系统陷入无限重试的状态。
重试间隔:控制重试的时间间隔,避免对服务的过载。
幂等性支持:对于重试机制而言,幂等性是重要的保障,避免因为重试导致的副作用。通过幂等性设计,可以确保重试执行的安全性。
5. 总结:
子事务屏障的使用是场景化的,特别是在复杂的分布式事务中,如支付、订单等可能涉及跨多个服务的场景,使用屏障可以增强事务的安全性。但在业务逻辑简单、幂等性设计良好且性能敏感的场景下,可能不使用屏障也是一种权衡。
- 参与学习 493 人
- 解答问题 572 个
风口上的技术,薪资水平遥遥领先,现在学习正值红利期! 未来3-5年,Go语言势必成为企业高性能项目中不可替代的语言 从基础到项目实战再到重构,对转行人员友好,真正从入门到精通!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星