面试题答案
一键面试- Saga模式简介:
- Saga模式是一种用于管理分布式事务的方法,它将一个大的分布式事务分解为多个本地事务,通过协调这些本地事务的执行来保证最终一致性。
- 商品库存扣减与订单状态更新流程:
- 正向流程:
- 当用户下单时,订单服务首先创建一个订单记录,并将订单状态设置为“待支付”。这是订单服务的本地事务。
- 订单服务调用库存服务的接口,请求扣减商品库存。库存服务执行库存扣减操作,如果库存足够,则扣减成功并返回成功响应,这是库存服务的本地事务。
- 订单服务接收到库存服务的成功响应后,将订单状态更新为“已支付(假设下单即支付成功简化场景)”或“已确认(等待支付确认场景)”,完成整个正向流程。
- 补偿流程:
- 如果在正向流程中,库存服务扣减库存失败(比如库存不足),库存服务会抛出异常。订单服务捕获到这个异常后,启动补偿流程。
- 订单服务将已创建的订单记录状态更新为“已取消”,这是订单服务的补偿本地事务。
- 如果之前库存服务已经成功扣减库存,但后续订单服务更新订单状态失败,库存服务也需要执行补偿操作,即增加已扣减的库存,这是库存服务的补偿本地事务。
- 正向流程:
- Saga协调器:
- 可以引入一个Saga协调器来管理整个流程。协调器可以通过消息队列等方式,按顺序发送消息给订单服务和库存服务,触发正向或补偿事务。例如,协调器先发送消息给订单服务创建订单,订单服务成功后发送消息给库存服务扣减库存,若库存服务失败,协调器发送补偿消息给订单服务取消订单。
- 日志记录:
- 每个微服务在执行本地事务和补偿事务时,都要记录详细的日志。这些日志可以用于故障排查、恢复以及审计。比如订单服务记录订单创建、状态更新、取消等操作的时间、参数等信息,库存服务记录库存扣减、增加等操作的日志。通过这些日志,在系统出现问题时可以快速定位并恢复到正确状态。