Sentinel这个限流的原理是什么?基于QPS 限流,并发线程数限流,平均响应时间都分别说说

1 个回答

  • 水云
    自己喜欢的东西,就不要问别人好不好。
    Sentinel 的限流原理主要是基于对**资源的访问频率和系统负载的实时监控**,然后根据配置的限流规则(如 QPS、并发线程数等)来决定是否允许请求通过。下面是 Sentinel 的限流原理及其核心机制的详细说明: ### 1. **资源定义与监控** Sentinel 将所有被保护的业务逻辑视为**资源**。每个资源都会有唯一的名称,以便于限流和监控。资源可以是具体的方法、接口、或任何一段代码块。 **核心概念**: - **Entry**:每次请求进入资源时会生成一个 Entry,表示对资源的一个访问记录。 - **Slot**:对 Entry 进行一系列操作的过程,包括统计、限流、熔断等。 Sentinel 通过 Entry 和 Slot 来监控资源的访问频率、并发量等统计数据,并与配置的限流规则实时对比,决定是否放行请求。 ### 2. **限流规则类型** Sentinel 支持多种限流规则,主要包括以下几种: 1. **QPS 限流(每秒请求数限流)** - **原理**:QPS 限流基于固定窗口统计请求数量,默认是按秒统计的滑动窗口。当某个资源在某个时间窗口内的请求数超过配置的最大 QPS 值时,超出的请求将被拒绝。 - **实现**:Sentinel 对每个资源的请求数进行实时统计,并使用滑动窗口来平滑请求波动。若 QPS 超过配置值,后续的请求会直接被拒绝。 2. **并发线程数限流** - **原理**:并发线程数限流是基于某个资源的并发请求线程数。当进入资源的线程数超过配置的阈值时,超出的请求将被阻塞或拒绝。 - **实现**:Sentinel 使用线程计数器来统计每个资源的当前并发请求数,若超过设置的阈值,超出部分的请求会被限流。 3. **平均响应时间(基于系统负载的限流)** - **原理**:当系统的平均响应时间超过某个设定阈值,并且当前的并发量和系统负载较高时,会触发限流。 - **实现**:Sentinel 根据资源的平均响应时间、CPU 利用率等指标动态调整限流策略,若系统负载持续超标,将自动拒绝部分请求。 4. **自定义限流规则** - **原理**:Sentinel 允许用户基于业务需求自定义限流策略,例如按用户 ID、请求参数或 IP 进行限流。 - **实现**:用户可以实现自定义的限流逻辑,在特定条件下触发限流。 ### 3. **滑动窗口计数法** Sentinel 使用滑动窗口计数法对请求频率进行统计,确保限流规则能够平滑处理流量波动: - **固定窗口**:Sentinel 默认的滑动窗口会将每秒划分为多段小的时间片(如 500 ms),每个时间片分别计数。 - **滑动窗口统计**:通过多个时间片统计请求数,并在新的时间片到来时,剔除过期时间片的数据,从而计算一段时间内的 QPS。 - **优势**:滑动窗口计数法可以缓冲短时间内的请求高峰,避免限流过于严格,保证系统在负载波动时的平滑性。 ### 4. **令牌桶算法** Sentinel 的 QPS 限流还可使用**令牌桶算法**,这在突发流量处理上尤为有效。令牌桶算法的实现方式如下: - **令牌生成**:Sentinel 会以固定的速率向“令牌桶”中放入令牌,每次请求到来时都需要消耗一个令牌。 - **限流原理**:若请求到来时桶内没有令牌,则该请求会被拒绝。 - **适用场景**:适合突发流量,但总请求速率有上限的情况。 令牌桶算法在 Sentinel 中能防止请求量突增导致系统崩溃,保证整体服务质量。 ### 5. **预热(Warm Up)限流** 预热限流机制用于防止系统从低负载突然变成高负载导致系统资源被耗尽,特别是在服务初次启动或长时间闲置后。 - **预热原理**:在资源刚开始被大量请求时,QPS 阈值会逐步增加,而不是立即达到配置的最大值。 - **实现机制**:Sentinel 会逐步提升限流阈值,例如在最初 60 秒内缓慢增加到最大 QPS,使系统有时间进行预热并适应高负载。 预热限流特别适用于那些对系统压力较大、容易因为突发流量导致宕机的场景。 ### 6. **排队等待机制** Sentinel 提供了一种简单的排队等待机制,通过限制请求的处理速率来保护系统。 - **实现原理**:Sentinel 根据配置的阈值设置请求的处理速率,当请求数超过该阈值时,新的请求会排队等待。 - **排队机制**:请求在等待过程中如果超过一定时间未被处理,也会被拒绝。 这种机制类似于漏桶算法(Leaky Bucket),在保证处理速率稳定的情况下尽可能缓解流量高峰。 ### 7. **控制流量流入的其他机制** 除了限流规则,Sentinel 还结合了一些额外的控制策略: 1. **降级与熔断机制**:Sentinel 可以对资源的错误率、异常率或响应时间进行监控,设置触发降级和熔断的阈值,达到保护系统的目的。 2. **系统自适应限流**:Sentinel 会检测系统的整体负载(如 CPU、内存占用),在系统负载高时主动降低请求流量,保护系统。 ### 总结 Sentinel 的限流原理主要基于**实时监控**和**限流规则**,包括 QPS 限流、并发线程限流、响应时间限流等。同时 Sentinel 通过滑动窗口、令牌桶、预热限流、排队等待等机制来保证系统在面对高并发流量时的稳定性和响应速度。
    发布于 2024-10-22 03:59 •IP属地 安徽
    举报
    评论
    收藏