sentinel限流并发线程数限流 与 直接QPS限流 区别
发线程数限流和直接 QPS 限流是 Sentinel 中两种不同的限流策略,它们分别从不同的角度来控制系统的流量和负载。下面详细解释这两种限流的区别:
并发线程数限流 (Concurrency Level Threshold)
-
定义:
- 并发线程数限流关注的是某一时刻正在执行的请求的数量。
- 当一个请求开始执行并占用一个线程(或线程池中的线程),直到该请求完成,这段时间内该请求都计入并发数。
-
适用场景:
- 适用于那些处理时间较长、可能阻塞的操作,例如数据库查询、外部服务调用等。
- 对于一些资源消耗较大的操作,通过限制并发数可以有效防止资源耗尽。
-
特点:
- 当并发数达到设定的阈值时,新的请求将被限流,直到有请求完成释放了并发数。
- 更加关注系统的负载和资源使用情况。
直接 QPS 限流 (QPS Threshold)
-
定义:
- 直接 QPS 限流关注的是单位时间内到达的请求数量。
- 通常是以秒为单位来计算每秒可以处理的请求数量。
-
适用场景:
- 适用于需要均匀分布请求负载的场景,如 Web 服务接口。
- 对于短时高并发的情况,QPS 限流可以帮助平滑请求。
-
特点:
- 当每秒的请求数量超过设定的阈值时,超出的请求将被限流。
- 更加关注请求频率,适用于快速响应的服务。
总结
- 并发线程数限流关注的是系统处理能力的上限,即同一时刻能处理多少个请求,这有助于防止服务因为过多的并发而崩溃。
- 直接 QPS 限流关注的是单位时间内的请求频率,这有助于防止瞬时高峰导致的负载突增。
示例
假设我们有一个服务,该服务每次请求都需要访问数据库,并且数据库连接有限,此时采用 并发线程数限流 更为合适,因为它能够控制同时访问数据库的请求数量,避免数据库连接耗尽。
另一方面,如果我们有一个 API 接口,它需要对外提供稳定的服务,并且希望避免突发的大流量冲击,那么 直接 QPS 限流 就是一个更好的选择,因为它可以保证在任何时间点上的请求不会超过一定的速率。
收藏文章数量从多到少与“把书读薄”是一个道理