一、回答技巧
- 原理阐述:
先简要介绍限流、熔断和降级的基本概念和原理,让面试官了解你对这些技术的理解深度。
- 项目实践:
结合具体的项目经验,详细描述在项目中是如何实现限流、熔断和降级的,包括使用的技术、框架和工具。
- 问题解决:
分享在实践过程中遇到的问题以及解决方法,展示你的问题解决能力。
- 效果评估:
说明采取这些措施后对系统性能和稳定性的提升效果,让面试官了解这些技术的实际价值。
二、示例回答
(1)先解释下三者的概念及区别
-
限流(Rate Limiting):
限流是一种控制系统请求流量的策略。通过设置一个请求速率阈值,限制客户端在特定时间内的请求次数。这样可以防止过多的请求涌入系统,保护系统免受过载和压力冲击。限流可以平滑流量,避免系统突发流量的影响。限流主要作用在服务提供者本身。
-
熔断(Circuit Breaker):
熔断是一种防止故障扩散的策略。当一个服务出现故障或超时,调用该服务的请求会出现大量超时或失败,服务调用方为避免长时间的阻塞影响其他服务,熔断器会打开并快速失败,拒绝后续的请求,避免请求堆积和资源耗尽。熔断器会暂时屏蔽该服务,并在一段时间后尝试恢复。熔断器的状态变化可用于监控系统健康和提供告警信息。熔断主要用于微服务调用方。
-
降级(Fallback):
降级是当服务不可用时或者资源紧张时,对部分服务降低优先级,有策略的不处理或用简单的方式处理,降级服务会代替原服务提供一些基本功能或返回预设的默认值,以确保系统依然能够提供有限的功能或服务。
其实降级是熔断的一种特殊场景,都是服务断开了,只是由替代服务返回了结果。所以降级逻辑应该应用在消费者(调用者)那里。一般降级都是搭配熔断或者限流一起使用的。服务降级的实现可以基于人工开关降级(秒杀、电商大促等)和自动检测(超时、失败次数、故障).
(2)解释下常见的限流算法及场景
这三种模式中,原理比较复杂的是限流。下面我介绍下常见的限流算法吧。常见的限流算法有固定窗口时间限流算法、滑动窗口限流算法、漏桶算法和令牌桶算法。其中固定窗口算法在窗口边界可能出现流量突增的情况,无法实现平滑流量的效果,滑动窗口算法解决了固定窗口临界值的问题,但并未完全消除流量突变,且滑动窗口和固定窗口算法都无法解决短时间之内集中流量的突击。 漏桶算法是按照固定速率限流,但是无法应对突发流量,而令牌桶算法正好弥补了漏桶算法无法应对突发流量的问题,可在一定限度内解决突发流量的问题。每种限流算法都有优缺点,分别有对应的适用场景。在实际的限流场景中,往往都是多种限流算法综合使用的。具体的限流算法场景请参考我前几篇文章。
(3)简要介绍你们项目中的限流、熔断、降级情况
我们在项目中采用了多层级、多模式的手段来实现限流、熔断和降级,不管是接入层(网关)还是细粒度的接口层(应用内),我们都做了限流逻辑处理,以确保系统的稳定性和可靠性。
首先我们在网关层(spring cloud gateway) 统一对入口流量做了限流和一级熔断和降级处理,但是网关层只能处理入口微服务的限流、降级及熔断逻辑,对于微服务之间相互调用的处理是无能为力的。因此在网关层统一处理后,我们在具体的微服务内部调用还做了二级的限流、熔断及降级逻辑。
同时我们将业务功能划分为核心业务和非核心业务,系统资源不足或服务出现问题时,我们会在网关层进行统一的手动或自动降级处理,会放弃一些非核心业务功能,保证核心业务的正常运行。例如,我们会将非核心业务的请求路由到降级处理函数,返回降级提示信息,而核心业务仍然可以正常处理。
(4)介绍你们项目中使用什么技术实现限流
我们主要使用了阿里巴巴开源的sentinel限流组件进行限流。sentinel组件限流的实现原理主要就是依据上述的几种限流算法,进行了场景划分和适应性的重组及改造,同时实现了自适应限流模式。
Sentinel 是通过 滑动时间窗口计数 + 多种策略(如 QPS、线程数) 来实现限流的,可以对资源(方法、接口、服务)进行精细化的流控设置,确保系统在高并发下的稳定性。
其中我们主要使用了QPS 限流模式,通过 WarmUp(预热,令牌桶)、RateLimiter(匀速器,漏桶)等限流控制器实现削峰,防止系统瞬间过载。配合 fallback 策略或异步队列削峰,保证核心功能稳定。同时可利用热点参数限流防止防止攻击型、倾斜型访问打垮某接口。
通过这些措施,我们有效地提高了系统的容错能力和稳定性,在高并发场景下也能保证系统的正常运行。在实践过程中,我们也遇到了一些问题,比如如何准确设置限流的阈值和熔断的条件(可以继续聊聊自适应限流模式,接下来几篇文章还会继续讲解自适应限流),我们通过不断的测试和优化,最终找到了合适的参数。这些经验也让我对限流、熔断和降级有了更深入的理解和实践经验。
具体做法:
WarmUp 限流器:预热型限流,适合突发流量避免冷启动压垮系统。
RateLimiter 限流器:漏桶方式,匀速处理流量。
热点参数限流:防止攻击型、倾斜型访问打垮某接口。
隔离非核心接口:对非核心接口设低阈值限流。
降级 + 异步队列(削峰):应对高并发压力。