【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%,安全第二增长曲线已完全成型!特别值得一提的是,…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
Spring AOP代理对象生成原理
代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】,这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...
