面试题答案
一键面试Saga模式处理分布式事务主要步骤和流程
- 事务发起:
- 业务流程开始,初始服务启动一个Saga事务,该事务由一系列有序的本地事务组成。
- 正向操作顺序执行:
- Saga按照预先定义的顺序依次执行每个本地事务的正向操作。例如,在一个电商下单的Saga中,可能先执行库存扣减的正向操作,再执行订单创建的正向操作。每个本地事务执行完成后,会将执行结果记录下来,并且释放本地资源锁等。
- 事务协调与监控:
- 存在一个协调器(可以是集中式或分布式的),负责跟踪Saga事务的执行进度,协调各个本地事务之间的顺序调用。如果某个本地事务执行失败,协调器会触发补偿操作。
- 补偿操作执行:
- 当某个正向操作失败时,协调器根据已执行成功的正向操作记录,反向依次执行相应的补偿操作。例如,如果订单创建成功但库存扣减失败,那么会先执行订单取消的补偿操作,再执行库存回滚的补偿操作,以保证整个分布式系统的一致性。
- 事务结束:
- 当所有正向操作都成功执行完毕,Saga事务成功结束;若在执行过程中因正向操作失败而完成所有补偿操作,Saga事务以失败结束。
正向操作和补偿操作的配合
- 正向操作在前:
- 正向操作按照业务流程的逻辑顺序依次执行,实现业务流程的正常推进。每个正向操作都是对业务状态的一次变更,向最终期望的状态靠近。
- 补偿操作跟随:
- 补偿操作是正向操作的反向操作,用于撤销正向操作所带来的影响。一旦某个正向操作失败,已成功执行的正向操作对应的补偿操作会被依次触发,将业务状态回滚到Saga事务开始前的状态,从而保证数据的一致性。例如,正向操作是创建订单并扣减库存,补偿操作就是取消订单并回滚库存。
- 操作对应关系:
- 每个正向操作都必须有对应的补偿操作,这种对应关系在Saga设计时就需明确。并且补偿操作应该具有幂等性,即多次执行补偿操作的效果与执行一次相同,以应对可能出现的重复调用情况(如网络故障导致协调器多次发送补偿指令)。