什么是分布式事务
分布式事务就是事务的一个升级,在分布式系统中保证多个系统的事务的一个数据一致性,常见的像seata组件,它里面会有像2pc,3pc,AT等模型来适应不同的场景。
2pc过程和存在的问题
2pc是一种分布式事务的协议,它把一个事物的提交流程拆分成两个阶段,第一个是准备阶段,事务协调者会向所有参与者发送事务预提交请求,所有参与者执行本地事务操作但并不提交并返回事务操作成功结果,第二个是提交阶段,如果事务协调者收到所有事务参与者的成功响应,然后向所有事务参与者发送提交指令,各个事务参与者收到提交指令后真正完成事务的提交,否则就会发送事务回滚的指令,撤销第一阶段的事务操作。
主要存在几个问题,1,阻塞,第二个阶段开始之前必须等 待第一阶段 所有参与者的返回结果,否则会一直等待,无法处理其他事务,2,会存在数据不一致的风险,因为如果出现网络分区的情况下可能导致部分事务参与者收不到提交或者终止指令。
相对与2pc,三阶段提交做了哪些改进,这些改进 如何解决或缓解2pc问题。
三阶段提交引入了cancommit阶段 ,在实际提交之前协调者会向所有参与者发送一个cancommit请求,询问他们是否准备好提交事务,这一步减少了2pc中立即锁定资源的时,降低了阻塞,参与者可以在不锁定资源的情况下评估自己的执行能力,3pc在2pc的基础上把单一的提交决定拆分成两个步骤,对决策与执行做了分离,这样的话可以使参与者在PreCommit阶段做出更加 确定的执行准备,而最终的Docommit阶段则是执行这些准备好的操作,在每个阶段的引入了超时机制,如果在规定时间内没有收到协调者的指令参与者可以根据上一阶段 的状态来做出默认决策,这样的话可以有效解决协调者单点故障的问题,减少系统整体因等待协调者响应而长时间阻塞的情况
解释saga模式的基本思想以及应用场景,他是如何通过一系列的业务操作实现最终一致性的
saga模式是一种分布式事务的处理策略,他把一个长事务分解成一系列短的,可以独立提交的本地事务,并且可以通过每个子事务中记录变更前后的信息 ,来确保后续步骤失败后的 逆向补偿操作,来达到最终一致性的目的,saga模式可以应用在微服务架构下,涉及到多个服务协同完成一个业务流程的场景。比如订单流程,金融交易系统等。
saga实现 最终一致性会涉及到两个关键 的处理流程第一个是补偿逻辑,任意一个子事务处理失败,都可以通过补偿来实现事务回滚,第二是幂等性,不管是正向补偿还是逆向补偿都会满足幂等性。
分享一次在实际项目中处理分布式事务的经验
在我最近负责的一个电商项目中,在 用户下单环节,会涉及到商品库存服务,订单服务,用户账户服务等多个服务的一个对接,当用户提交订单 的时候需要确保商品扣减库存减少,订单创建成功,用户账户余额减少三个操作的原子性,于是采用了seata分布式事务框架并采用saga模式作为解决方案,正好因为本身采用了微服务架构,每个服务负责一个独立领域的本地事务操作,基于sata来实现整个大事务的协调,另外saga又是一个最终一致性方案,所以他相比传统的强一致性方案来说性能上有比较大的提升,而且即便是出现网络不稳定或者服务出现故障的情况下seata也能够通过补偿机制来进行一个处理,保证业务的连续性。
seata事物的理解
于 2024-07-10 09:59:45 首次发布