MST

星途 面试题库

面试题:微服务架构的熔断与限流策略设计

假设你正在设计一个基于微服务架构的电商系统,某些核心微服务可能会面临高并发请求,导致资源耗尽。请阐述如何设计熔断和限流策略,以确保系统的稳定性和可用性,并且说明每种策略的实现原理和关键参数。
14.5万 热度难度
后端开发微服务架构

知识考点

AI 面试

面试题答案

一键面试

熔断策略

  1. 实现原理
    • 熔断器如同一个开关,监控微服务调用的状态。当失败请求的比例或次数达到设定阈值时,熔断器从“闭合”状态切换到“打开”状态。在“打开”状态下,后续请求不再实际调用目标微服务,而是直接返回一个预设的 fallback 响应,避免对可能已过载的微服务继续施加压力。一段时间后,熔断器进入“半打开”状态,允许少量请求试探性地调用目标微服务,如果调用成功,熔断器恢复到“闭合”状态;若再次失败,则回到“打开”状态。
  2. 关键参数
    • 熔断阈值:例如设置失败请求比例达到 50%时触发熔断。该值需根据微服务实际运行情况和业务容忍度来调整,若设置过低,可能导致微服务正常时也频繁熔断;设置过高,则可能无法及时保护微服务。
    • 熔断时间:即熔断器保持“打开”状态的时长,如设置为 10 秒。时间过短,可能微服务还未恢复就重新尝试调用导致再次失败;时间过长,影响业务功能正常使用。
    • 半打开试探请求数:比如设定为 5 个。数量太少可能无法准确判断微服务是否恢复,数量太多则可能对未完全恢复的微服务造成较大压力。

限流策略

  1. 实现原理
    • 令牌桶算法:系统以固定速率生成令牌放入桶中,每个请求在执行前需要从桶中获取一个令牌。如果桶中有足够令牌,请求可以继续;若桶中无令牌,则请求被限流。这就像一个漏斗,水(请求)以任意速度流入,但只有拿到令牌(允许通过的凭证)的水才能流出。
    • 漏桶算法:请求(水)流入漏桶,漏桶以固定速率处理请求(漏水),如果桶满了,新的请求(多余的水)就会被丢弃。保证了请求处理的平稳性,不会因突发大量请求导致系统过载。
  2. 关键参数
    • 令牌桶算法
      • 令牌生成速率:决定了系统允许处理请求的平均速率,如每秒生成 100 个令牌。该速率需根据微服务的处理能力设定,速率过高可能导致微服务过载,过低则限制了系统性能。
      • 令牌桶容量:表示桶能容纳的最大令牌数,例如设置为 1000。它决定了系统能承受的突发请求量,容量越大,能承受的突发请求越多,但也需考虑微服务的突发处理能力。
    • 漏桶算法
      • 漏桶漏水速率:即固定的请求处理速率,如每秒处理 50 个请求。此速率依据微服务稳定处理能力设置,过快可能处理不过来,过慢则浪费资源。
      • 漏桶容量:设定桶的最大容量,比如为 500。容量决定了能暂存的请求数量,容量大小要综合考虑业务需求和系统资源。