面试题答案
一键面试熔断策略
- 实现原理:
- 熔断器如同一个开关,监控微服务调用的状态。当失败请求的比例或次数达到设定阈值时,熔断器从“闭合”状态切换到“打开”状态。在“打开”状态下,后续请求不再实际调用目标微服务,而是直接返回一个预设的 fallback 响应,避免对可能已过载的微服务继续施加压力。一段时间后,熔断器进入“半打开”状态,允许少量请求试探性地调用目标微服务,如果调用成功,熔断器恢复到“闭合”状态;若再次失败,则回到“打开”状态。
- 关键参数:
- 熔断阈值:例如设置失败请求比例达到 50%时触发熔断。该值需根据微服务实际运行情况和业务容忍度来调整,若设置过低,可能导致微服务正常时也频繁熔断;设置过高,则可能无法及时保护微服务。
- 熔断时间:即熔断器保持“打开”状态的时长,如设置为 10 秒。时间过短,可能微服务还未恢复就重新尝试调用导致再次失败;时间过长,影响业务功能正常使用。
- 半打开试探请求数:比如设定为 5 个。数量太少可能无法准确判断微服务是否恢复,数量太多则可能对未完全恢复的微服务造成较大压力。
限流策略
- 实现原理:
- 令牌桶算法:系统以固定速率生成令牌放入桶中,每个请求在执行前需要从桶中获取一个令牌。如果桶中有足够令牌,请求可以继续;若桶中无令牌,则请求被限流。这就像一个漏斗,水(请求)以任意速度流入,但只有拿到令牌(允许通过的凭证)的水才能流出。
- 漏桶算法:请求(水)流入漏桶,漏桶以固定速率处理请求(漏水),如果桶满了,新的请求(多余的水)就会被丢弃。保证了请求处理的平稳性,不会因突发大量请求导致系统过载。
- 关键参数:
- 令牌桶算法:
- 令牌生成速率:决定了系统允许处理请求的平均速率,如每秒生成 100 个令牌。该速率需根据微服务的处理能力设定,速率过高可能导致微服务过载,过低则限制了系统性能。
- 令牌桶容量:表示桶能容纳的最大令牌数,例如设置为 1000。它决定了系统能承受的突发请求量,容量越大,能承受的突发请求越多,但也需考虑微服务的突发处理能力。
- 漏桶算法:
- 漏桶漏水速率:即固定的请求处理速率,如每秒处理 50 个请求。此速率依据微服务稳定处理能力设置,过快可能处理不过来,过慢则浪费资源。
- 漏桶容量:设定桶的最大容量,比如为 500。容量决定了能暂存的请求数量,容量大小要综合考虑业务需求和系统资源。
- 令牌桶算法: