首页 > 其他分享 >sentinel限流并发线程数限流 与 直接QPS限流 区别

sentinel限流并发线程数限流 与 直接QPS限流 区别

时间:2024-08-08 09:39:06浏览次数:12  
标签:请求 数据库 并发 限流 线程 sentinel QPS

发线程数限流和直接 QPS 限流是 Sentinel 中两种不同的限流策略,它们分别从不同的角度来控制系统的流量和负载。下面详细解释这两种限流的区别:

并发线程数限流 (Concurrency Level Threshold)

  • 定义:

    • 并发线程数限流关注的是某一时刻正在执行的请求的数量。
    • 当一个请求开始执行并占用一个线程(或线程池中的线程),直到该请求完成,这段时间内该请求都计入并发数。
  • 适用场景:

    • 适用于那些处理时间较长、可能阻塞的操作,例如数据库查询、外部服务调用等。
    • 对于一些资源消耗较大的操作,通过限制并发数可以有效防止资源耗尽。
  • 特点:

    • 当并发数达到设定的阈值时,新的请求将被限流,直到有请求完成释放了并发数。
    • 更加关注系统的负载和资源使用情况。

直接 QPS 限流 (QPS Threshold)

  • 定义:

    • 直接 QPS 限流关注的是单位时间内到达的请求数量。
    • 通常是以秒为单位来计算每秒可以处理的请求数量。
  • 适用场景:

    • 适用于需要均匀分布请求负载的场景,如 Web 服务接口。
    • 对于短时高并发的情况,QPS 限流可以帮助平滑请求。
  • 特点:

    • 当每秒的请求数量超过设定的阈值时,超出的请求将被限流。
    • 更加关注请求频率,适用于快速响应的服务。

总结

  • 并发线程数限流关注的是系统处理能力的上限,即同一时刻能处理多少个请求,这有助于防止服务因为过多的并发而崩溃。
  • 直接 QPS 限流关注的是单位时间内的请求频率,这有助于防止瞬时高峰导致的负载突增。

示例

假设我们有一个服务,该服务每次请求都需要访问数据库,并且数据库连接有限,此时采用 并发线程数限流 更为合适,因为它能够控制同时访问数据库的请求数量,避免数据库连接耗尽。

另一方面,如果我们有一个 API 接口,它需要对外提供稳定的服务,并且希望避免突发的大流量冲击,那么 直接 QPS 限流 就是一个更好的选择,因为它可以保证在任何时间点上的请求不会超过一定的速率。

标签:请求,数据库,并发,限流,线程,sentinel,QPS
From: https://www.cnblogs.com/use-D/p/18348321

相关文章

  • 【线程同步机制】Day13线程同步:互斥锁、条件变量、自旋锁、读写锁
    进程间通信详解,移步:https://blog.csdn.net/Thmos_vader/article/details/140743256线程同步对于一个单线程进程来说,不需要处理线程同步的问题,所以线程同步是在多线程环境下是需要注意的一个问题。线程的主要优势在于,资源的共享性,譬如通过全局变量来实现信息共享,不过这种......
  • linux 软件编程学习第八天 线程
    进程1.waitpid   pid_twaitpid(pid_tpid,int*wstatus,intoptions);  功能:    回收指定的子进程空间  参数:    pid:要回收的子进程的pid    wstatus:回收状态的指针    options:回收选项      0阻......
  • Java并发编程——线程创建的4种常见方式
    文章目录一、继承Thread类创建创建线程类1.1Thread类解析1.2使用方法1.3优缺点二、实现Runable接口创建线程类2.1Runable接口解析2.2使用方法2.3优缺点三、使用Callable和FutureTask创建线程3.1Callable接口解析3.2RunnableFuture接口解析3.3Futu......
  • 线程池实现范例
    1初始化线程池   确定线程数量,并做好互斥访问2启动所有线程  std::vector<std::thread*>threads_;unique_lock<mutex>lock(mutex_);for(inti=0;i<thread_num_;i++){autoth=newthread(&XThreadPool::Run,this);threads_.push_back(th);}3准备......
  • Linux:线程同步之信号量
    信号量(1)What(什么是信号量)提供一种计数器的方式控制对共享资源的访问;当计数器大于0时,请求资源成功并计数器-1;当计数器小于0时,线程阻塞,等待其它线程执行signal(V操作)唤醒它(2)Why(信号量的作用)实现线程的同步与互斥:通过信号量的设计,可以实现对共享资源的串行访问实现线......
  • Java多线程Demo简介
    多线程文件下载管理器1.环境准备Java8或更高版本任何文本编辑器或IDE(如IntelliJIDEA或Eclipse)2.需求分析功能需求:支持从多个URL同时下载文件显示下载进度异常处理和重试机制3.实现步骤3.1创建Downloader类这个类实现了Runnable接口,用于下载单个文件。pa......
  • Day19--Java多线程编程入门学习
    1.什么是多线程?多线程是一种并发编程技术,它允许程序同时执行多个线程。线程是程序执行的基本单位,一个程序至少有一个线程,即主线程。通过使用多线程,可以在一个程序中同时处理多个任务,提高程序的效率和响应能力。2.为什么要使用多线程?提升性能:在多核处理器上,多线程可以将......
  • JavaEE 第3节 线程安全知识铺垫2
    Java中线程终止的方式下面代码我们创建了一个thread线程,如何在main线程(main方法中)终止thread线程?1、手动标记publicclassThreads{publicstaticvoidmain(String[]args){Threadthread=newThread(()->{while(true){......
  • 【多线程-从零开始-肆】线程安全、加锁和死锁
    进程状态进程状态:就绪:正在CPU上执行,或者随时可以去CPU上执行阻塞:暂时不能参与CPU的执行Java的线程,对应状态做了更详细的区分,不仅仅是就绪和阻塞了六种状态:NEW当前Thread对象虽然有了,但是内核的线程还没有(还没调用过start)TERMINATE当前Thread对......
  • 【多线程-从零开始-伍】volatile关键字和内存可见性问题
    volatile关键字importjava.util.Scanner;publicclassDemo2{privatestaticintn=0;publicstaticvoidmain(String[]args){Threadt1=newThread(()->{while(n==0){//啥都不写......