面试题答案
一键面试Sentinel实现流量控制的原理
Sentinel 通过对资源的实时监控,统计资源的运行指标,如 QPS(每秒请求数)、并发线程数等。基于这些指标,依据预先设定的流量控制规则,在流量达到阈值时采取相应的措施,如直接拒绝、排队等待等,以防止系统因流量过大而导致过载,保障系统的稳定性。其核心是基于滑动窗口算法来统计实时流量数据,通过对时间窗口的划分与统计,能够精准地获取到一段时间内的流量情况。
常见的流量控制规则
- QPS 控制规则:限制资源每秒的请求数。例如,设定某个接口的 QPS 阈值为 100,当单位时间内该接口的请求数超过 100 时,后续请求将按照配置的流控效果进行处理。
- 并发线程数控制规则:限制资源的并发线程数。比如,一个服务方法,设置最大并发线程数为 50,当同时访问该方法的线程数达到 50 时,新的请求将被限流。
- 预热规则:适用于系统冷启动场景。开始时以较低的阈值接收请求,随着时间推移逐渐提高到正常阈值,避免系统在刚启动时因大量请求涌入而崩溃。例如,设置预热时间为 100 秒,初始阈值为正常阈值的 1/3,在 100 秒内逐渐将阈值提升到正常水平。
- 匀速排队规则:按照固定的间隔时间处理请求,将流量均匀化。例如,设置间隔时间为 100ms,那么请求将每隔 100ms 处理一个,以平滑流量,防止突发流量对系统造成冲击。
配置规则以应对不同业务场景
- 高并发读场景:可主要配置 QPS 控制规则,根据系统硬件资源和接口处理能力,设定合适的 QPS 阈值。如一个查询接口,经过压测得知系统能稳定处理 500 QPS 的读请求,就可将该接口的 QPS 阈值设置为 400 左右,预留一定的缓冲空间,防止流量瞬间过高导致系统响应变慢。
- 资源密集型场景:对于涉及大量计算、数据库连接等资源密集型的业务方法,可配置并发线程数控制规则。例如,一个复杂的数据分析服务,由于服务器内存和 CPU 资源有限,通过测试确定最大并发线程数为 30,避免过多线程同时执行导致资源耗尽。
- 系统启动场景:采用预热规则。在系统启动时,由于缓存未加载、数据库连接池未充分初始化等原因,系统处理能力较弱。此时设置预热规则,如预热时间 60 秒,初始阈值为正常阈值的 20%,在 60 秒内逐步提升到正常阈值,让系统平稳过渡到正常运行状态。
- 突发流量场景:使用匀速排队规则。对于可能出现突发流量的业务,如秒杀活动接口,配置匀速排队规则,设定合理的间隔时间,如 50ms,确保请求均匀地进入系统进行处理,避免瞬间大量请求压垮系统。同时结合 QPS 控制规则,进一步保障系统的稳定性。在实际应用中,可通过 Sentinel 的控制台可视化界面或通过代码动态配置这些规则,以适应不同业务场景的需求变化。