面试题答案
一键面试选择的服务编排策略: Saga模式
理由
- 数据一致性:在高并发电商场景中,订单处理涉及库存扣减和支付操作,任何一个环节失败都可能导致数据不一致。Saga模式通过一系列本地事务组成分布式事务,每个本地事务对应订单处理、库存服务、支付服务的一个操作,并且每个本地事务都有对应的补偿事务。如果某个环节失败,Saga会调用之前已执行事务的补偿事务,回滚已完成的操作,保证数据一致性。
- 高可用性:Saga模式不需要像传统两阶段提交那样长时间锁定资源,各服务可以异步执行本地事务,减少了资源竞争和阻塞。即使某个服务出现故障,其他服务的本地事务依然可能成功执行,并且可以通过补偿机制进行恢复,从而提高了系统整体的可用性。
具体实施方式
- 事务定义:
- 订单创建事务:在订单服务中创建订单记录,并记录订单状态为“待支付”。对应的补偿事务是删除订单记录。
- 库存扣减事务:库存服务根据订单商品信息扣减库存。补偿事务是增加库存。
- 支付事务:支付服务处理支付操作,更改支付状态。补偿事务是发起退款操作。
- Saga协调器:可以通过代码实现一个Saga协调器,负责按照顺序调用各个服务的事务。例如,先调用订单创建事务,成功后调用库存扣减事务,最后调用支付事务。
- 故障处理:如果在执行过程中某个事务失败,比如库存扣减失败,Saga协调器会按照相反顺序调用补偿事务,即先调用支付补偿事务(退款),再调用订单补偿事务(删除订单),确保数据回到初始状态。同时,记录失败日志以便后续排查问题。
- 异步执行:利用消息队列(如Kafka、RabbitMQ等)来异步触发各个事务。例如,订单创建成功后,发送一条消息到消息队列,库存服务监听该队列,接收到消息后执行库存扣减事务,以此类推。这样可以提高系统的并发处理能力和响应速度。