【Sentinel】Sentinel与gateway的限流算法
文章目录
- 1、Sentinel与Hystrix的区别
- 2、限流算法
- 3、限流算法对比
- 4、Sentinel限流与Gateway限流
1、Sentinel与Hystrix的区别
线程隔离有两种方式实现:
- 线程池隔离(Hystrix默认采用)
- 信号量隔离(Sentinel默认采用)
服务I需要远程调用服务A、服务B,则创建两个线程池,分别用来处理服务I–>服务A,和服务I–>服务B的请求。和线程池隔离不同的是,信号量隔离比较轻量级,就维护一个计数器就好,不用去维护线程数量。二者的优缺点来说,线程池隔离的优点是:
- 支持主动超时:线程是我定义的,我自己可以来中断、超时
- 支持异步调用
缺点则是:
- 线程的额外开销比较大
总结就是:
Hystix默认是基于线程池实现的线程隔离,每一个被隔离的业务都要创建一个独立的线程池,线程过多会带来额外的CPU开销,性能一般,但是隔离性更强
。
Sentinel是基于信号量(计数器)实现的线程隔离,不用创建线程池,性能较好,但是隔离性一般
。
2、限流算法
限流:对应用服务器的请求做限制,避免因过多请求而导致服务器过载甚至宕机。
限流算法常见的包括两种:
- 计数器算法,又包括窗口计数器算法、滑动窗口计数器算法
- 令牌桶算法(Token Bucket)
- 漏桶算法(Leaky Bucket)
计数器算法之固定窗口计数器算法:
固定窗口计数器的实现为:
- 将时间划分为多个窗口,窗口的时间跨度称为Interval,比如取1000ms
- 每个窗口维护一个计数器,每有一次请求就将计数器加一,限流就是设置计数器阈值,本例为3
- 当该窗口所在时间里,请求数超过阈值,则超出部分的请求直接都被丢弃
固定窗口计数,有个问题就是:如下图,当4000-5000ms的前500ms没请求,4500-5000ms刚好三个请求,此时,未达阈值。5000-6000ms中,前500ms有三个请求,后500ms没请求,则5000-6000也未达阈值。但从4500-5500ms这一秒,则有6个请求,如果服务真的最多只能承受QPS3,则这样服务可能宕机。
计数器算法之滑动窗口计数器算法:
滑动窗口计数器算法会将一个窗口划分为n个更小的区间:(在窗口的基础上引入区间的概念)
- 窗口时间跨度Interval为1秒;区间数量 n = 2 ,则每个小区间时间跨度为500ms
- 限流阈值依然为3,时间窗口(1秒)内请求超过阈值时,超出的请求被限流
- 此时的窗口不再是固定的1000-2000ms或者1500-2500ms,而是 根据当前请求所在时间(currentTime)移动 ,
这个滑动窗口范围是从(currentTime减去Interval)之后的第一个时区开始,到currentTime所在时区结束,来做为统计的窗口
举个例子:如上图,比如1250ms有个请求进来,则1250-1000=250,250ms之后的第一个时区则是500到1000区间,1250ms自身所在时区为1000到1500ms,所以对应的滑动窗口就是500到1500ms这个时区。(图中紫色虚线)
如上图,再往后,1300ms有个请求,此时,滑动窗口计算后还是500-1500ms,这个窗口当前共有三个请求,分别在900ms、1250ms、1300ms到达。此时1400ms再来一个,滑动窗口计算后还是500-1500ms,但显然这个窗口QPS已经到3了,1400ms的请求会被丢弃。到此,固定窗口的统计问题得到了解决。
再往后,2100ms,则计算后,滑动窗口在1500到2500ms(紫色虚线),未达QPS阈值,但看1250ms到2100ms这850ms的时间,不到一个窗口时间跨度Interval,却有4个请求 > 3 。这个就是区间划分的问题了,区间越小,则限流越准。 比如以125ms为一个区间,2100-1000=1100,在1000到1125区间,下一个为1125到1250,所以滑动窗口为1125到2125ms,这个窗口已有1250、1300、1600到的三个请求,因此2100会被丢弃。
当然,不管这个区间多小,总有可能有卡边界前后请求导致QPS超过的情况。考虑上现实世界,这个窗口是没必要设置成极限值的,比如1ms,差不多100ms就已经可以解决大多情况。
令牌桶算法:
- 以固定的速率生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃
- 请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理
- 如果令牌桶中没有令牌,则请求等待或丢弃
漏桶算法:
- 将每个请求视作"水滴"放入"漏桶"进行存储
- "漏桶"以固定速率向外"漏"出请求来执行,如果"漏桶"空了则停止"漏水”
- 如果"漏桶"满了则多余的"水滴"会被直接丢弃
- 可以理解成请求在桶内排队等待
Sentinel在实现漏桶算法时,采用了排队等待模式。让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。并发的多个请求必须等待,预期的等待时长 =最近一次请求的预期等待时间 + 允许的间隔。如果请求预期的等待时间超出最大时长,则会被拒绝。
例如:
- QPS = 5,意味着每200ms处理一个队列中的请求;
- timeout = 2000,意味着预期等待超过2000ms的请求会被拒绝并抛出异常
3、限流算法对比
因为计数器算法一般都会采用滑动窗口计数器,所以这里我们对比三种算法:
4、Sentinel限流与Gateway限流
限流算法常见的有三种实现:滑动时间窗口、令牌桶算法、漏桶算法。Gateway则采用了基于Redis实现的令牌桶算法。而Sentinel内部却比较复杂:
- 默认限流模式是基于滑动时间窗口算法
- 排队等待的限流模式则基于漏桶算法
- 而热点参数限流则是基于令牌桶算法
相关文章:
【Sentinel】Sentinel与gateway的限流算法
文章目录 1、Sentinel与Hystrix的区别2、限流算法3、限流算法对比4、Sentinel限流与Gateway限流 1、Sentinel与Hystrix的区别 线程隔离有两种方式实现: 线程池隔离(Hystrix默认采用)信号量隔离(Sentinel默认采用) 服…...
python实现对excel表中的某列数据进行排序
如下需要对webCms中的B列数据进行升序排序,且不能影响到其他列、工作表中的数据和格式。 import pandas as pd import openpyxl from openpyxl.utils.dataframe import dataframe_to_rows# 读取 Excel 文件 file_path 1.xlsx sheet_name webCms# 读取 Excel 文件并…...
CMS指纹识别
一.什么是指纹识别 常见cms系统 通过关键特征,识别出目标的CMS系统,服务器,开发语言,操作系统,CDN,WAF的类别版本等等 1.识别对象 1.CMS信息:比如Discuz,织梦,帝国CMS࿰…...
STL- 常用算法
概述: 算法主要是由头文件<algorithm> <functional> <numeric>组成。 <algorithm>是所有STL头文件中最大的一个,范围涉及到比较、 交换、查找、遍历操作、复制、修改等等 <numeric>体积很小,只包括几个在序列上面进行简…...
苹果铃声怎么设置?3招教你设置个性化铃声!
苹果手机因其颜值、性能与生态吸引了一大批粉丝用户。在拿到新手机后,大家第一时间就是给手机设置好听的铃声。那么,苹果铃声怎么设置呢?手机铃声能设置成自己喜欢的歌曲吗?当然可以了!本文将给大家介绍3种轻松设置苹果…...
LRTimelapse 6 for Mac(延时摄影视频制作软件)
LRTimelapse 是一款适用于macOS 系统的延时摄影视频制作软件,可以帮助用户创建高质量的延时摄影视频。该软件提供了直观的界面和丰富的功能,支持多种时间轴摄影工具和文件格式,并具有高度的可定制性和扩展性。 LRTimelapse 的主要特点如下&am…...
数据结构和算法(4):栈与队列
栈 ADT 及实现 栈(stack)是存放数据对象的一种特殊容器,其中的数据元素按线性的逻辑次序排列,故也可定义首、末元素。 尽管栈结构也支持对象的插入和删除操作,但其操作的范围仅限于栈的某一特定端。 也就是说…...
pdf怎么转换成dwg格式?简单转换方法分享
当我们需要在CAD中编辑PDF文件中的向量图形时,将PDF转换成DWG格式是一个非常好的选择。因为PDF是一种非常流行的文档格式,很多时候我们会接收到PDF文件,但是PDF文件中的向量图形无法直接在CAD中编辑。而将PDF转换成DWG格式后,就可…...
uniapp使用H5实现预览pdf文件
下载后把压缩包解压到自己的项目的static文件夹下的pdf文件下,如图 新建一个文件名为filePreview.vue <template><view><web-view :src"allUrl"></web-view></view> </template><script>export default {dat…...
Studio 3T for MongoDB的介绍及语法简单介绍
用法介绍 Studio 3T是一款用于MongoDB数据库管理和开发的图形化工具,它提供了许多功能来简化MongoDB的操作和开发过程。以下是一些常见的Studio 3T用法: 连接到MongoDB服务器: 打开Studio 3T并创建一个新连接配置。输入MongoDB服务器的主机名…...
MySQL数据库——存储引擎(1)-MySQL体系结构、存储引擎简介
目录 MySQL体系结构 连接层 服务层 引擎层 存储层 存储引擎简介 概念 语句 演示 下面开始学习进阶篇的第一个内容——存储引擎 分为四点学习: MySQL体系结构存储引擎简介存储引擎特点存储引擎选择 MySQL体系结构 连接层 最上层是一些客户端和链接服务&am…...
211. 添加与搜索单词 - 数据结构设计
211. 添加与搜索单词 - 数据结构设计 class WordDictionary { public:struct Node{Node *node[26];bool is_end;Node(){is_endfalse;for(int i0;i< 26;i){node[i]NULL;}}};Node *root;WordDictionary() {root new Node();}void addWord(string word) {auto p root;for(aut…...
【深度学习】You Only Segment Once: Towards Real-Time Panoptic Segmentation,YOSO全景分割
论文:https://arxiv.org/abs/2303.14651 代码:https://github.com/hujiecpp/YOSO 文章目录 Abstract1. Introduction2. Related Work3. Method3.1. Task Formulation3.2. Feature Pyramid Aggregator3.3. Separable Dynamic Decoder 4. Experiments4.1. …...
ping与Traceroute是如何工作的
ping 是基于 ICMP 协议工作的。ICMP 全称 Internet Control Message Protocol,就是互联网控制报文协议。 ICMP 报文是封装在 IP 包里面的。因为传输指令的时候,肯定需要源地址和目标地址。它本身非常简单。 ICMP 报文有很多的类型,不同的类型…...
CentOS Python环境搭建
安装依赖 yum install -y libffi-devel wget gcc make zlib-devel openssl openssl-devel ncurses-devel openldap-devel gettext bzip2-devel xz-devel下载安装包 wget "https://www.python.org/ftp/python/3.9.10/Python-3.9.10.tar.xz" 编译安装 # 3.1、解压安装包…...
亚马逊云科技与伊克罗德推出AI绘画解决方案——imAgine
在过去的数月中,亚马逊云科技已经推出了多篇介绍如何在亚马逊云科技上部署Stable Diffusion,或是如何结合Amazon SageMaker与Stable Diffusion进行模型训练和推理任务的内容。 为了帮助客户快速、安全地在亚马逊云科技上构建、部署和管理应用程序&#x…...
机器学习课后习题 --- 逻辑回归
(一)单选题 1.一监狱人脸识别准入系统用来识别待进入人员的身份,此系统一共包括识别4种不同的人员:狱警,小偷,送餐员,其他。下面哪种学习方法最适合此种应用需求: A:二分类问题 …...
软件设计师学习笔记9-进程调度
目录 1. PV操作 1.1进程的同步与互斥 1.1.1互斥 1.1.2同步 1.2 PV操作 1.2.1信号量 1.2.2 PV操作的概念 2.信号量与PV操作 2.1 PV操作与互斥模型 2.2 PV操作与同步模型 2.3 互斥与同步模型结合 3.前趋图与PV操作 1. PV操作 1.1进程的同步与互斥 1.1.1互斥 互斥&…...
09:STM32-------USART串口通信+串口数据包
目录 一:串口协议 1:通信接口 2:串口通信 3:硬件电路 4:电平标准 5:串口参数及其时序 二:USART介绍 1:简历 2:USART框图 3:USART的基本结构 4:数据帧 5: 波特率发生器 6:数据模式 三:案例 A:串口发送--单发送 1:连接图 2:函数介绍 3:代码 B:串口发送接收 1…...
“安全即服务”为网络安全推开一道门
8月30日,三六零(下称“360”)集团发布了2023年半年报,其中安全业务第二季度收入6.54亿元,同比增长98.76%,环比增长157.16%,安全第二增长曲线已完全成型!特别值得一提的是,…...
vue3的生命周期
1.vue3生命周期官方流程图 2.vue3中的选项式生命周期 vue3中的选项式生命周期钩子基本与vue2中的大体相同,它们都是定义在 vue实例的对象参数中的函数,它们在vue中实例的生命周期的不同阶段被调用。生命周期函数钩子会在我们的实例挂载,更新…...
[E2E Test] Python Behave Selenium 一文学会自动化测试
前言 本文将使用Python Behave与Selenium,和同学们一起认识自动化测试,并附上完整的实践教程。 项目源码已上传:CSDN 郭麻花 Azure Repo python-behave-selenium 核心概念 1. 什么是E2E Test E2E即End-to-end,意思是从头到尾…...
Knowledge Graph Prompting for Multi-Document Question Answering
本文是LLM系列文章,针对《Knowledge Graph Prompting for Multi-Document Question Answering》的翻译。 多文档问答中的知识图谱提示 摘要1 引言2 符号3 知识图谱构建4 LM引导的图形遍历器5 实验6 相关工作7 结论 摘要 大型语言模型的“预训练、提示、预测”范式…...
ElMessageBox.prompt 点击确认校验成功后关闭
ElMessageBox.prompt(, 验证取货码, {inputPattern: /^.{1,20}$/,inputErrorMessage: 请输入取货码,inputPlaceholder: 请输入取货码,beforeClose: (action, instance, done) > {if (action confirm) {if (instance.inputValue) {let flag false;if (flag) {done()} else …...
调整Windows11桌面图标间隔
调整Windows11桌面图标间隔 WinR 快捷键如何使用 在Windows系统中,通过 WinR 的快捷键可以快速打开Windows系统的“运行”窗口,然后在这里输入相应的命令就可以快速执行指定的任务。 具体的操作方法是,同时按下键盘上的Windows键和R键即可。…...
Spring最佳实践: 构建高效可维护的Java应用程序
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
stable diffusion webui中的sampler
Stable Diffusion-采样器篇 - 知乎采样器:Stable Diffusion的webUI中,提供了大量的采样器供我们选择,例如Eular a, Heum,DDIM等,不同的采样器之间究竟有什么区别,在操作时又该如何进行选择&…...
MySQL表的内连和外连
文章目录 MySQL表的内连和外连1. 内连接(1) 显示SMITH的名字和部门名称 2. 外连接2.1 左外连接(1) 查询所有学生的成绩,如果这个学生没有成绩,也要将学生的个人信息显示出来 2.2 右外连接(1) 对stu表和exam表联合查询,把所有的成绩都显示出来…...
StatefulSets In K8s
摘要 StatefulSets是Kubernetes的一种资源对象,用于管理有状态应用程序的部署。与Deployment不同,StatefulSets保证应用程序的有序部署和有状态的维护,确保每个Pod都有唯一的标识和稳定的网络标识。这些特性使得StatefulSets非常适合部署需要…...
leetcode刷题笔记——单调栈
1.模板: stack<int> st; for(int i 0; i < nums.size(); i){while(!st.empty() && st.top() > nums[i]){st.pop();//计算、存放结果}st.push(nums[i]); }2.注意事项:需要注意单调栈中stack存放元素为nums数组的『下标』还是nums数…...
图库 网站 源码/新的营销方式有哪些
目录结构: for_template.py的代码如下: from flask import Flask, render_templateapp Flask(__name__)app.route(/for_template/) def for_template():# 字典for循环数据user {name: 小明,age: 19}# 列表for循环数据L [北京, 上海, 深圳, 广州]# 列…...
wordpress用户中心商城/百度seo算法
很多人在搜索下载过PDF转换器的小伙伴都会有一个灵魂拷问:难道就没有免费还没页数限制的PDF转Word的工具吗?小编经过不断的对比和试用,找到以下两款好用免费的工具,相信总有一个你能用上。一、PDF转换器相信了解PDF这种文档格式设…...
深圳网站建设公司报价单/虎门今日头条新闻
API 现在无处不在。因此,现代开发人员需要一种高效的查询语言 GraphQL 如果您不熟悉 API(应用程序接口),它是 2 个应用程序相互交互的一种方式。例如,如果您单击 Facebook 上的“上传您的照片”按钮,API 将允许您将您的照片上传到 Facebook。有成千上万的 API 可供程序员…...
信息系统开发案例/seo培训公司
题目描述 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:[3,2,3] 输出:3 示例 2&…...
做视频的软件模板下载网站有哪些内容/优化设计四年级上册语文答案
近日,由深度学习技术及应用国家工程实验室与百度联合发起的 AICA|首席 AI 架构师培养计划第五期正式结业。经过为期半年的学习,最终来自中国石油、中国四维测绘、中国石化、霍尼韦尔、中国海油、法国电信、中国东方航空、中国铁塔等企业的57位…...
做调研的网站有哪些/搜索引擎优化的方式有哪些
zx-image-view 图片预览插件,支持图片切换、旋转、缩放、移动... 浏览器支持:IE10, (IE9不支持旋转功能) 效果预览:https://capricorncd.github.io... 源码地址:https://github.com/capricornc... 默认键盘操作 方向键:…...