微服务Sentinel流控难题:QPS模式与线程数模式区别

news2024/12/23 9:22:35

问题引入

不少新学Sentinel的小伙伴在配置Sentinel流控规则时犯迷糊,如下图:

 其中迷糊点是阈值类型这里:

QPS:当调用该接口的QPS达到阈值的时候,进行限流

线程数:当调用该接口的线程数达到阈值的时候,进行限流

咋一看,好像解释了,又好像没有解释,哈哈,要理解上面2个逻辑,先明白QPS而是啥,线程数又是啥。

QPS

每秒查询率(QPS,Queries-per-second)是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

上面解释是从百度百科中摘取的,有点专业,我们以web项目举例,在web中, QPS可以理解为单位时间内,发起请求(可以是接口/可以是页面/可以是资源)的个数。

回归到sentinel,看下面的配置

配置意思:QPS阈值为3, 单位时间能访问接口次数 <= 3,超过3之后表示不满足流控规则,拒绝访问。

线程数

先假设:当前是web项目,使用tomcat作为web服务器

web项目中的线程数,表示web请求进来服务器,tomcat开启几个线程来处理这些web请求。

先看一个例子:使用springboot 搭建web项目

不理解的同学,可以先看:SpringBoot 极简入门

@RestController
public class TestController {
    public Set<Thread> set= new HashSet<>();
    @GetMapping("/test")
    public Object test() throws InterruptedException {
        Thread thread = Thread.currentThread();
        set.add(thread);
        System.out.println(set.size());
        return thread.toString();
    }
}

启动服务,访问: http://localhost:8080/test,你会发现返回数据:

Thread[http-nio-8080-exec-1,5,main]
Thread[http-nio-8080-exec-2,5,main]
Thread[http-nio-8080-exec-3,5,main]
Thread[http-nio-8080-exec-4,5,main]
Thread[http-nio-8080-exec-5,5,main]
Thread[http-nio-8080-exec-6,5,main]
Thread[http-nio-8080-exec-7,5,main]
Thread[http-nio-8080-exec-8,5,main]
Thread[http-nio-8080-exec-9,5,main]
Thread[http-nio-8080-exec-10,5,main]
Thread[http-nio-8080-exec-1,5,main]
Thread[http-nio-8080-exec-2,5,main]
....

一直访问,一直循环1到10

后台打印输出

1
2
3
4
5
6
7
8
9
10
10
....

1到10之后,set.size()值一直停留在10。

这是啥回事?

SpringBoot web项目内置了tomcat, 项目启动后,tomcat会初始化一个线程池,当请求进入tomcat服务器,tomcat会从线程池中获取处理请求线程。其中线程池一个配置:默认最小工作空闲线程数为10,当请求并发数(同一个时刻能处理的请求数)没有超过10次时,线程数会一直维持在10个。下面是默认springboot 内嵌tomcat 默认线程池配置

# 等待队列长度,默认100。
server.tomcat.accept-count=100

# 最大工作线程数,默认200。
server.tomcat.max-threads=200

# 最小工作空闲线程数,默认10。
server.tomcat.min-spare-threads=10

#最大连接数,默认为10000
server.tomcat.max-connections=10000

有了这铺垫,再看下面的sentinel的配置

配置意思:线程数阈值为3,意味着单位时间内,允许开启的线程数为3,换句话讲,请求并发数<=3,超过3 表示超过流控限制,触发流控限制。

为啥会出现并发线程流量控制,官方给出解释:

区分小结

QPS:单位时间内,请求接口次数限制。

线程数:单位时间内,请求并发数限制。

 看文字不过瘾可以切换视频版:SpringCloud Alibaba 极简入门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/66830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 面试题 (二) -------- Java 集合相关

1、Java Bean 的命名规范 JavaBean 类必须是一个公共类&#xff0c;并将其访问属性设置为 public JavaBean 类必须有一个空的构造函数&#xff1a;类中必须有一个不带参数的公用构造器&#xff0c;此构造器也应该通过调用各个特性的设置方法来设置特性的缺省值。 一个 JavaB…

【云原生·k8s】k8s集群安装部署

带着理论&#xff0c;再去部署&#xff0c;验证你的理论 文章目录1、环境准备2、环境初始化3、防火墙初始化3、关闭swap4、yum源配置5、ntp配置6、修改linux内核参数&#xff0c;开启数据包转发功能7、安装docker基础环境&#xff08;&#xff09;8、安装k8s的初始化工具kubead…

互联网舆情监控分析

近年来&#xff0c;互联网的快速发展&#xff0c;不论是新闻中、报纸上&#xff0c;还是电视里&#xff0c;都能屡屡看到一些企业被负面缠身&#xff0c;进而损害企业效益&#xff0c;在人人都是自媒体的时代&#xff0c;并非只有重大事件才会引发舆情&#xff0c;小事情也会&a…

kubernetes介绍和安装(1.25版本)

kubernetes介绍和安装&#xff08;1.25版本&#xff09; K8S 是什么&#xff1f; K8S官网文档&#xff1a;https://kubernetes.io/zh/docs/home/ K8S 是Kubernetes的全称&#xff0c;源于希腊语&#xff0c;意为“舵手”或“飞行员”&#xff0c;基于go语言开发&#xff0c;官…

liteos启动流程

一,启动流程 从这里开始我们开始讲解liteos的启动过程,通过前面连接器脚本的分析,我们已经对程序启动阶段期望的内存布局有了一个宏观的认识,然后系统上电从0x08000000地址boot起来之后要做的就是生成这个布局,然后初始化时钟,内存,任务,锁信号量等等基础的系统管理单…

leetcode 332. 重新安排行程

题目描述&#xff1a; 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c;所以该行程必须从 …

Torch.nn模块学习-池化

池化对数据起到了浓缩的效果&#xff0c;通过池化可以减少数据量&#xff0c;降低内存压力&#xff0c;简单地理解&#xff0c;池化操作都是通过池化的kernel的选取一定的区域&#xff0c;通过某种计算将这个区域一系列数值转化为一个数值&#xff0c;需要注意的是&#xff1a;…

【LeetCode】No.108. Convert Sorted Array to Binary Search Tree -- Java Version

题目链接&#xff1a;https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/description/ 1. 题目介绍&#xff08;Convert Sorted Array to Binary Search Tree&#xff09; Given an integer array nums where the elements are sorted in ascending …

全网最新注册ChatGPT账号攻略

OpenAI 推出超神 ChatGPT&#xff0c;但是由于不可抗力原因&#xff0c;加上网站限制&#xff0c;导致大部分人无法体验到。这里我分享一下注册的攻略。 前提准备 首先能能访问 Google&#xff08;前置条件&#xff0c;不能明确说&#xff0c;懂得都懂&#xff09;。 其次你…

利用pymupdf编辑修改pdf

利用pymupdf编辑修改pdf 本文背景 为了修改pdf的文本, 在pymupdf官方手册查了一通,没看到明显的说明,然后到github的讨论区看了发现了修改pdf的方案,在此记录一下 参考链接: https://github.com/pymupdf/PyMuPDF/discussions/1019 主要方法: 找到需要替换的文本块,然后添…

抗疫逆行者HTML网页作业 感动人物网页代码成品 最美逆行者网页模板 致敬疫情感动人物网页设计制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

8.论文学习Liver Tumor Segmentation and Classification: A Systematic Review

目录摘要1.引言2.文献调查3.肝脏肿瘤分割的一般步骤A.CT肝脏图像B.图像预处理C.肝脏分割和肿瘤分割D.特征提取E.分类4.肝脏图像预处理方法A.中值滤波B.双边滤波器(BF)C. Wiener滤波器D.导向滤波guided filterE.递归高斯滤波Recursive Gaussian filteringF.Kirsch算子5.肝脏和肿…

基于Springboot的宠物医院管理系统-JAVA【数据库设计、论文、源码、开题报告】

1 绪论 1.1 课题背景 在信息技术高速发展的今天&#xff0c;新知识、新技术层出不穷&#xff0c;计算机技术早已广泛的应用于各行各业之中&#xff0c;利用计算机的强大数据处理能力和辅助决策能力叫&#xff0c;实现行业管理的规范化、标准化、效率化。 管理信息系统(Manag…

HummerRisk V0.6.0发布:升级列表高级搜索功能,扩充对象存储和操作审计支持范围等

HummerRisk V0.6.0发布&#xff1a;新增表头高级搜索功能&#xff0c;可按名称快速搜索与组合查询&#xff0c;动态调整显示列&#xff0c;新增对象存储七牛云与青云类型&#xff0c;新增操作审计火山引擎&#xff08;火山云&#xff09;类型。 感谢社区中小伙伴们的反馈&…

用DIV+CSS技术设计的西安旅游网站18页(web前端网页制作课作业)HTML+CSS旅游网站设计与实现

&#x1f468;‍&#x1f393;静态网站的编写主要是用 HTML DⅣV CSSJS等来完成页面的排版设计&#x1f469;‍&#x1f393;&#xff0c;一般的网页作业需要融入以下知识点&#xff1a;div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉…

C# WPF 基础等待动画Loading...动态转圈 Storyboard ContentControl

这个效果图...直接放上吧&#xff0c;实际是转圈效果&#xff0c;使用起来最方便的一种。 【这是个基础版&#xff0c;灵活度很高】 Xaml 绘制Loading图案&#xff0c;及触发的动画效果&#xff0c;实际控制的每个组件 Opacity - 透明度 属性。 <Style TargetType"{x…

元宇宙工程系,来了一位“吃螃蟹”者

转自《中国科学报》 记者 温才妃 潘志庚&#xff08;右&#xff09;给学生讲授元宇宙技术。受访者供图 元宇宙办学潮正在高校中暗涌。 不久前&#xff0c;南京信息工程大学人工智能学院&#xff08;未来技术学院&#xff09;信息工程系正式更名为元宇宙工程系&#xff0c;成为…

【密码加密原则二】

目录 1 密码加密原则&#xff08;续&#xff09; 1.1 使用加盐的方式可以使得“密码” 1.2 优缺点 1 密码加密原则&#xff08;续&#xff09; 1.1 使用加盐的方式可以使得“密码” 如果用户的密码过于简单&#xff0c;使用加盐的方式可以使得“密码”&#xff08;其实是…

数据结构-八大排序

八大排序一&#xff0c;直接插入排序二&#xff0c;希尔排序三&#xff0c;选择排序四&#xff0c;堆排序五&#xff0c;冒泡排序六&#xff0c;快速排序1&#xff0c;递归版本&#xff08;1&#xff09;hoare法&#xff08;2&#xff09;挖坑法&#xff08;3&#xff09;前后指…

5 年 Python ,总结的 10 条 Python 使用技巧

今天给大家分享 10 个我平时整理非常实用的 Python 开发小技巧&#xff0c;内容目录如下&#xff1a; 值得一提的是&#xff0c;这 10 个技巧全部收录在我自己写的 《Python黑魔法指南》里。 1. 如何在运行状态查看源代码&#xff1f; 查看函数的源代码&#xff0c;我们通常…