SpringCloud面试题, 什么是服务限流?
SpringCloud面试题, 什么是服务限流?
QA
Step 1
Q:: 什么是服务限流?
A:: 服务限流是指在高并发环境下,为了保护系统的稳定性和避免系统资源被过度消耗,采取的一种控制请求速率的措施。通过限流,可以防止系统因瞬时的流量激增而导致过载或崩溃,确保系统能够为更多的用户提供持续稳定的服务。常见的限流方式包括基于令牌桶、漏桶算法、固定窗口、滑动窗口等。
Step 2
Q:: Spring Cloud 中有哪些常用的限流组件?
A:: 在 Spring Cloud 中,常用的限流组件有 Netflix Hystrix、Sentinel 和 Resilience4j。Hystrix 是早期广泛使用的熔断和限流工具,但目前已经不再维护。Sentinel 是阿里巴巴开源的流量管理组件,具有功能强大、易于集成等特点。Resilience4
j 是一个轻量级的容错库,支持熔断、限流、重试等功能,且无第三方依赖。
Step 3
Q:: 服务限流与熔断的区别是什么?
A:: 服务限流与熔断虽然都用于提高系统的稳定性,但其目的和机制有所不同。服务限流主要用于控制进入系统的请求速率,防止系统过载;而熔断是当系统的某个服务出现异常时,主动中断对该服务的请求,从而避免故障扩散到整个系统。熔断通常伴随着自动恢复机制,即在检测到服务恢复正常后,自动恢复对该服务的请求。
Step 4
Q:: 如何在 Spring Cloud 中实现服务限流?
A:: 在 Spring Cloud 中实现服务限流,可以使用 Sentinel 或 Resilience4
j 组件。以 Sentinel 为例,只需在项目中引入相关依赖,并在应用启动类中进行简单的配置,即可实现对特定接口或全局的限流。同时,Sentinel 提供了丰富的 Dashboard,用于实时监控流量控制情况和进行动态规则配置。
Step 5
Q:: 限流策略有哪些常见的实现方式?
A:: 常见的限流策略实现方式包括:1) 固定窗口:在一个固定时间窗口内允许固定数量的请求,超出后拒绝服务;2) 滑动窗口:在滑动的时间窗口内计算请求数,允许一定数量的请求;3) 令牌桶算法:系统按照固定速率向令牌桶中添加令牌,请求时从桶中取令牌,若无令牌则拒绝服务;4)
漏桶算法:系统以固定速率处理请求,多余请求排队等待处理。