MST

星途 面试题库

面试题:微服务架构分布式事务下熔断降级与数据最终一致性的协同保障

在分布式事务中,既要保证服务的稳定性通过熔断降级机制,又要确保数据的最终一致性。请详细阐述如何设计一个完整的方案,使得在微服务架构下,熔断降级操作不会破坏数据最终一致性,并且描述在极端情况下(如网络分区、大量服务熔断),如何通过技术手段保障数据最终能达到一致状态,可结合具体的分布式事务模型(如TCC、SAGA等)进行说明。
13.4万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

设计方案整体思路

  1. 熔断降级机制:在微服务架构中,通过引入熔断组件(如Hystrix、Sentinel等)实现熔断降级。以Hystrix为例,它会监控每个微服务调用的健康状况,当失败率或调用时长超过设定阈值时,触发熔断,直接返回降级策略处理结果,避免级联故障,保证服务稳定性。
  2. 数据最终一致性:采用合适的分布式事务模型来保障。常见的如TCC(Try - Confirm - Cancel)和SAGA模式。

结合TCC模型

  1. 正常流程
    • Try阶段:各个微服务检查业务资源可用性,并预留资源。例如在电商场景下,库存服务的Try操作会检查库存是否足够,并锁定库存;订单服务的Try操作会检查用户账户余额是否足够,并冻结金额。
    • Confirm阶段:如果所有微服务的Try操作都成功,那么依次执行Confirm操作,完成实际业务操作。库存服务Confirm操作扣除已锁定库存,订单服务Confirm操作扣除已冻结金额并生成订单。
    • Cancel阶段:若某个微服务的Try操作失败,或在Confirm过程中有微服务失败,则执行Cancel操作,释放Try阶段预留的资源。库存服务Cancel操作解锁已锁定库存,订单服务Cancel操作解冻已冻结金额。
  2. 熔断降级处理
    • Try阶段熔断:若在Try阶段某个服务熔断,直接进入Cancel阶段,释放已预留资源,保证数据一致性。例如库存服务熔断,订单服务执行Cancel操作解冻金额,避免资金冻结而库存无预留情况。
    • Confirm阶段熔断:若Confirm阶段某个服务熔断,需重试该服务的Confirm操作。可以设置重试次数和重试间隔。若多次重试仍失败,可人工介入处理,如通过补偿操作修正数据。例如订单服务Confirm操作熔断,重试几次后若仍失败,可人工检查并手动完成订单创建和金额扣除,同时通知库存服务扣除相应库存。
  3. 极端情况处理
    • 网络分区:若发生网络分区,将系统分为多个子网。在每个子网内继续执行分布式事务。当网络恢复后,各子网之间进行数据同步。例如采用分布式日志(如Zookeeper)记录各子网内事务操作,网络恢复后,根据日志进行数据合并和修复。
    • 大量服务熔断:启动应急处理机制,优先处理关键业务服务。对于熔断的服务,可采用备用方案,如使用缓存数据替代实时查询。同时,通过监控系统实时分析熔断原因,快速修复故障服务。待部分服务恢复后,逐步重试未完成的事务操作,确保数据最终一致。

结合SAGA模式

  1. 正常流程
    • 事务步骤:将一个分布式事务分解为多个本地事务步骤,每个步骤都有对应的正向操作和补偿操作。例如在订单创建、库存扣除、支付流程中,订单创建本地事务成功后记录日志,若后续库存扣除失败,可根据日志执行订单回滚的补偿操作。
    • 协调器:使用SAGA协调器来管理事务流程,按照顺序依次调用各个本地事务步骤。协调器记录事务执行状态,若某个步骤失败,协调器触发相应的补偿操作。
  2. 熔断降级处理
    • 本地事务熔断:若某个本地事务熔断,协调器立即触发该事务的补偿操作,撤销之前的操作影响。例如库存扣除服务熔断,协调器触发订单回滚补偿操作,确保数据一致性。
    • 协调器熔断:可采用多协调器冗余方案,一个协调器熔断后,其他备用协调器接管事务管理。同时,通过日志记录已执行的事务步骤,新协调器可根据日志继续完成或补偿事务。
  3. 极端情况处理
    • 网络分区:在各子网内独立运行SAGA事务,每个子网记录自己的事务日志。网络恢复后,通过全局事务日志合并算法,合并各子网日志,完成数据同步和一致性修复。
    • 大量服务熔断:与TCC类似,优先处理关键服务,采用备用方案替代熔断服务。同时,加强监控和故障诊断,快速恢复服务。对于已熔断服务执行的部分事务,通过补偿操作和重试机制确保数据最终一致。例如支付服务熔断,先补偿订单和库存操作,待支付服务恢复后重试支付事务。