MST
星途 面试题库

面试题:如何在复杂微服务架构中设计有效的熔断与降级策略

假设你正在负责一个拥有多个相互依赖微服务的复杂系统,系统中部分微服务因网络波动、资源瓶颈等原因经常出现不稳定情况。请描述你会如何设计一套全面且有效的熔断与降级策略,以保障系统整体的稳定性和可用性,同时说明你选择这些策略的原因。
38.3万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

熔断策略设计

  1. 熔断触发条件
    • 基于失败率:统计一定时间窗口(如10秒)内微服务请求的失败率。当失败率超过设定阈值(如50%)时,触发熔断。例如,在10秒内有100个请求,其中50个失败,就满足触发条件。这是因为较高的失败率通常意味着微服务出现了严重问题,继续请求可能无意义且浪费资源。
    • 基于错误计数:设定一个请求失败的累计数量阈值。若在特定时间内失败请求数达到该阈值(如20个),熔断开启。比如一些关键错误(如数据库连接异常),即使失败率未达到很高,但连续出现一定次数也表明服务不稳定。
  2. 熔断状态
    • 关闭(Closed):正常状态,所有请求都直接转发到微服务。
    • 打开(Open):熔断触发后进入该状态。此时所有请求不再转发到微服务,直接返回预设的降级响应,避免继续向不稳定的微服务发送请求,防止系统资源被耗尽。
    • 半打开(Half - Open):熔断打开一段时间(如1分钟)后进入半打开状态。在此状态下,允许少量请求(如总请求量的10%)尝试发送到微服务。若这些请求大部分成功(如成功率达到80%),则认为微服务恢复正常,将熔断状态切换回关闭;若失败率仍然较高,则重新回到打开状态。这样可以逐步试探微服务是否恢复,避免过早或过晚关闭熔断。

降级策略设计

  1. 业务功能降级
    • 核心与非核心功能区分:梳理系统业务,确定核心业务功能和非核心业务功能。例如在电商系统中,下单功能是核心,而商品推荐的个性化算法是非核心。当资源紧张或微服务不稳定时,优先保障核心功能。对于非核心功能,可以采用简化版本或暂时禁用。如商品推荐从个性化推荐降级为热门商品推荐。这样能在资源有限的情况下,最大程度保证系统对用户的基本可用性。
    • 数据缓存与异步处理:对于依赖外部微服务的数据请求,在本地缓存数据。当微服务不可用时,直接从缓存返回数据。例如商品详情数据,缓存一定时间(如1小时)内的信息。同时,将一些非实时性的任务(如订单处理后的积分计算)改为异步处理,降低对实时处理资源的需求,保证主流程的顺畅。
  2. 服务调用降级
    • 备用服务调用:为关键微服务准备备用服务。当主微服务熔断时,调用备用服务。例如主订单服务不可用时,调用备用的轻量级订单服务,该服务可能功能相对简单,但能保证基本的订单记录功能。这提供了一种兜底方案,使系统在部分服务不可用时仍能维持一定程度的运行。
    • 本地模拟数据返回:在无法调用远程微服务或备用服务也不可用时,返回本地模拟的默认数据。如在获取用户信息的微服务不可用时,返回一个默认的“匿名用户”信息,避免因等待远程服务响应而导致页面长时间加载或系统卡顿。

策略选择原因

  1. 熔断策略
    • 基于失败率和错误计数:能够从不同角度准确捕捉微服务的不稳定状态。失败率反映了整体服务质量的恶化程度,错误计数针对特定严重错误进行监控,两者结合能更全面地判断是否需要熔断。
    • 熔断状态转换:关闭状态保证正常运行时的服务调用;打开状态及时切断对不稳定微服务的请求,防止故障扩散;半打开状态通过试探性请求,平衡了系统的稳定性和微服务恢复后及时恢复正常调用的需求。
  2. 降级策略
    • 业务功能降级:区分核心与非核心功能,确保在资源受限情况下优先保障关键业务,维持用户对系统的基本使用。数据缓存与异步处理优化了资源利用,减少对不稳定微服务的依赖。
    • 服务调用降级:备用服务和本地模拟数据返回为系统提供了多层兜底方案,进一步增强了系统在面对微服务故障时的可用性和稳定性,最大程度降低对用户体验的影响。