MST

星途 面试题库

面试题:特定场景下微服务架构服务编排策略的选择

假设我们正在开发一个电商系统,订单处理服务依赖库存服务和支付服务,在高并发场景下,为了确保数据一致性和系统的高可用性,你会选择哪种服务编排策略?请详细阐述选择的理由及该策略的具体实施方式。
27.8万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

选择的服务编排策略: Saga模式

理由

  1. 数据一致性:在高并发电商场景中,订单处理涉及库存扣减和支付操作,任何一个环节失败都可能导致数据不一致。Saga模式通过一系列本地事务组成分布式事务,每个本地事务对应订单处理、库存服务、支付服务的一个操作,并且每个本地事务都有对应的补偿事务。如果某个环节失败,Saga会调用之前已执行事务的补偿事务,回滚已完成的操作,保证数据一致性。
  2. 高可用性:Saga模式不需要像传统两阶段提交那样长时间锁定资源,各服务可以异步执行本地事务,减少了资源竞争和阻塞。即使某个服务出现故障,其他服务的本地事务依然可能成功执行,并且可以通过补偿机制进行恢复,从而提高了系统整体的可用性。

具体实施方式

  1. 事务定义
    • 订单创建事务:在订单服务中创建订单记录,并记录订单状态为“待支付”。对应的补偿事务是删除订单记录。
    • 库存扣减事务:库存服务根据订单商品信息扣减库存。补偿事务是增加库存。
    • 支付事务:支付服务处理支付操作,更改支付状态。补偿事务是发起退款操作。
  2. Saga协调器:可以通过代码实现一个Saga协调器,负责按照顺序调用各个服务的事务。例如,先调用订单创建事务,成功后调用库存扣减事务,最后调用支付事务。
  3. 故障处理:如果在执行过程中某个事务失败,比如库存扣减失败,Saga协调器会按照相反顺序调用补偿事务,即先调用支付补偿事务(退款),再调用订单补偿事务(删除订单),确保数据回到初始状态。同时,记录失败日志以便后续排查问题。
  4. 异步执行:利用消息队列(如Kafka、RabbitMQ等)来异步触发各个事务。例如,订单创建成功后,发送一条消息到消息队列,库存服务监听该队列,接收到消息后执行库存扣减事务,以此类推。这样可以提高系统的并发处理能力和响应速度。