面试题答案
一键面试设计方案整体思路
- 熔断降级机制:在微服务架构中,通过引入熔断组件(如Hystrix、Sentinel等)实现熔断降级。以Hystrix为例,它会监控每个微服务调用的健康状况,当失败率或调用时长超过设定阈值时,触发熔断,直接返回降级策略处理结果,避免级联故障,保证服务稳定性。
- 数据最终一致性:采用合适的分布式事务模型来保障。常见的如TCC(Try - Confirm - Cancel)和SAGA模式。
结合TCC模型
- 正常流程:
- Try阶段:各个微服务检查业务资源可用性,并预留资源。例如在电商场景下,库存服务的Try操作会检查库存是否足够,并锁定库存;订单服务的Try操作会检查用户账户余额是否足够,并冻结金额。
- Confirm阶段:如果所有微服务的Try操作都成功,那么依次执行Confirm操作,完成实际业务操作。库存服务Confirm操作扣除已锁定库存,订单服务Confirm操作扣除已冻结金额并生成订单。
- Cancel阶段:若某个微服务的Try操作失败,或在Confirm过程中有微服务失败,则执行Cancel操作,释放Try阶段预留的资源。库存服务Cancel操作解锁已锁定库存,订单服务Cancel操作解冻已冻结金额。
- 熔断降级处理:
- Try阶段熔断:若在Try阶段某个服务熔断,直接进入Cancel阶段,释放已预留资源,保证数据一致性。例如库存服务熔断,订单服务执行Cancel操作解冻金额,避免资金冻结而库存无预留情况。
- Confirm阶段熔断:若Confirm阶段某个服务熔断,需重试该服务的Confirm操作。可以设置重试次数和重试间隔。若多次重试仍失败,可人工介入处理,如通过补偿操作修正数据。例如订单服务Confirm操作熔断,重试几次后若仍失败,可人工检查并手动完成订单创建和金额扣除,同时通知库存服务扣除相应库存。
- 极端情况处理:
- 网络分区:若发生网络分区,将系统分为多个子网。在每个子网内继续执行分布式事务。当网络恢复后,各子网之间进行数据同步。例如采用分布式日志(如Zookeeper)记录各子网内事务操作,网络恢复后,根据日志进行数据合并和修复。
- 大量服务熔断:启动应急处理机制,优先处理关键业务服务。对于熔断的服务,可采用备用方案,如使用缓存数据替代实时查询。同时,通过监控系统实时分析熔断原因,快速修复故障服务。待部分服务恢复后,逐步重试未完成的事务操作,确保数据最终一致。
结合SAGA模式
- 正常流程:
- 事务步骤:将一个分布式事务分解为多个本地事务步骤,每个步骤都有对应的正向操作和补偿操作。例如在订单创建、库存扣除、支付流程中,订单创建本地事务成功后记录日志,若后续库存扣除失败,可根据日志执行订单回滚的补偿操作。
- 协调器:使用SAGA协调器来管理事务流程,按照顺序依次调用各个本地事务步骤。协调器记录事务执行状态,若某个步骤失败,协调器触发相应的补偿操作。
- 熔断降级处理:
- 本地事务熔断:若某个本地事务熔断,协调器立即触发该事务的补偿操作,撤销之前的操作影响。例如库存扣除服务熔断,协调器触发订单回滚补偿操作,确保数据一致性。
- 协调器熔断:可采用多协调器冗余方案,一个协调器熔断后,其他备用协调器接管事务管理。同时,通过日志记录已执行的事务步骤,新协调器可根据日志继续完成或补偿事务。
- 极端情况处理:
- 网络分区:在各子网内独立运行SAGA事务,每个子网记录自己的事务日志。网络恢复后,通过全局事务日志合并算法,合并各子网日志,完成数据同步和一致性修复。
- 大量服务熔断:与TCC类似,优先处理关键服务,采用备用方案替代熔断服务。同时,加强监控和故障诊断,快速恢复服务。对于已熔断服务执行的部分事务,通过补偿操作和重试机制确保数据最终一致。例如支付服务熔断,先补偿订单和库存操作,待支付服务恢复后重试支付事务。