常见的限流算法有哪些
计数器算法
- 原理:在固定的时间窗口内,对请求进行计数,当请求数量达到设定的阈值时,就开始限流,拒绝多余的请求。例如,设定 1 分钟的时间窗口内允许最多 100 个请求,那么在这 1 分钟内每来一个请求,计数器就加 1,当计数器达到 100 后,后续的请求就会被拒绝,直到下一个 1 分钟开始,计数器重置为 0 重新计数。
- 优点:实现简单,易于理解和部署,在一些对精度要求不是特别高的场景下能很好地控制流量。
- 缺点:存在临界问题,比如在时间窗口切换的瞬间,可能会出现两倍于阈值的请求被允许,导致限流不够精确。
滑动窗口算法
- 原理:将时间窗口划分成更小的单元,比如将 1 分钟的时间窗口划分为 60 个 1 秒的小窗口,每个小窗口都有独立的计数器。随着时间的推移,窗口会像滑动一样移动,每过 1 秒,就会有一个新的小窗口进入时间窗口,同时最老的小窗口移出。通过对这些小窗口内的请求数量进行统计和累加,来判断是否超过限流阈值。
- 优点:相比计数器算法,能更精确地控制流量,解决了计数器算法在时间窗口切换时的临界问题。
- 缺点:实现相对复杂一些,需要维护多个小窗口的计数器,占用的内存空间相对较大。
漏桶算法
- 原理:可以想象有一个漏桶,请求就像水一样流入漏桶,而漏桶以固定的速率将水漏出。当水流入的速度超过漏桶的漏水速度时,漏桶就会被填满,此时再流入的水就会溢出,也就是请求被拒绝。漏桶算法能保证请求以固定的速率处理,起到平滑流量的作用。
- 优点:能够很好地平滑流量,保证系统以稳定的速度处理请求,适用于对流量稳定性要求较高的场景。
- 缺点:不能很好地利用系统的空闲资源,如果漏桶的漏水速度较慢,而系统还有处理能力时,也会拒绝请求,可能导致资源利用率不高。
令牌桶算法
- 原理:有一个令牌桶,系统会以固定的速率向令牌桶中放入令牌,每个请求在处理之前需要从令牌桶中获取一个令牌,如果令牌桶中没有令牌了,请求就会被拒绝。令牌桶有一定的容量限制,当令牌桶满了之后,新生成的令牌会被丢弃。
- 优点:既能限制流量的速率,又能在系统空闲时允许一定的突发流量,因为令牌桶可以预先积累一定数量的令牌。相比漏桶算法,能更合理地利用系统资源。
- 缺点:实现相对复杂一些,需要考虑令牌的生成、获取和存储等问题。
固定速率采样算法
- 原理:按照固定的时间间隔或者请求数量间隔对请求进行采样,只处理采样到的请求,其他请求则被丢弃或延迟处理。比如每 10 个请求中只处理第 5 个请求,或者每隔 1 秒处理一个请求,其余时间的请求都不处理。
- 优点:实现简单,能够在一定程度上控制请求的处理数量,降低系统负载。
- 缺点:可能会丢弃大量的请求,对业务的影响较大,而且不能很好地应对突发流量,因为它的采样策略是固定的,不考虑系统的实际负载情况。
自适应限流算法
- 原理:根据系统当前的负载情况、资源使用情况等动态地调整限流策略和阈值。例如,通过监控系统的 CPU 使用率、内存占用、响应时间等指标,当发现系统负载较高时,自动降低限流阈值,减少请求处理量;当系统负载较低时,适当提高限流阈值,充分利用系统资源。
- 优点:能够根据系统的实际情况自动调整限流策略,更好地适应不同的业务场景和流量变化,提高系统的稳定性和资源利用率。
- 缺点:实现难度较大,需要对系统的各项指标进行实时监控和分析,并且需要有合理的算法来根据这些指标调整限流策略,对技术要求较高。
分享
漏桶算法和令牌桶算法的区别是什么?
如何在分布式系统中实现限流算法?
怎样根据系统的实际情况选择合适的限流算法?
相关文章:
常见的限流算法有哪些
计数器算法 原理:在固定的时间窗口内,对请求进行计数,当请求数量达到设定的阈值时,就开始限流,拒绝多余的请求。例如,设定 1 分钟的时间窗口内允许最多 100 个请求,那么在这 1 分钟内每来一个请…...
Android 低功率蓝牙之BluetoothGattCallback回调方法详解
BluetoothGattCallback 是 Android 中用于处理蓝牙低功耗(BLE)设备通信的核心回调类。它负责处理与 BLE 设备的连接、服务发现、数据读写等操作的结果。以下是对 BluetoothGattCallback 的详细解析: 1. onConnectionStateChange 触发时机&am…...
socket.io协议内容详解
Socket.IO 是一个基于事件的实时通信库,支持双向通信。它并非单一协议,而是结合了 Engine.IO 传输层和 Socket.IO 应用层协议的复合体系。以下是其协议核心内容的详细解析: 1. 协议分层 Engine.IO:负责底层传输(如 WebSocket、HTTP 长轮询),处理连接稳定性、心跳和断线重…...
在Oracle中编写雪花算法升学雪花ID
雪花算法的定义不详细说了哈,直接给出代码! --雪花配置 --DROP TABLE SNOWFLAKE_CONFIG; CREATE TABLE SNOWFLAKE_CONFIG ( DATA_CENTER_ID NUMBER(5) NOT NULL, WORKER_ID NUMBER(5) NOT NULL, LAST_TIMESTAMP NUMBER(20) NOT NULL, SEQUENCE NUMBE…...
我们来学nginx -- 优化下游响应速度
优化下游响应速度 题记启用 Gzip 压缩优化缓冲区设置设置超时时间 题记 专家给出的配置文件真是…,信息量有点大啊! nginx:我只想作为一个简单的代理专家爸爸:都是为了你好! 这样,先从有关响应速度的角度&…...
SELECT ... FOR UPDATE 加锁后,其他线程能读取数据吗
在执行 SELECT * FROM table WHERE ... FOR UPDATE 语句时,MySQL 会对查询结果集中的行加 排他锁(X锁)。这种锁的行为会影响其他事务对这些行的读写操作。以下是具体的影响: 1. 加锁后的效果 当前事务: 对查询结果集中…...
【论文阅读】多模态——LSeg
文献基本信息 标题:Language-Driven Semantic Segmentation作者:Boyi Li、Kilian Q. Weinberger、Serge Belongie、Vladlen Koltun、Ren Ranftl单位:Cornell University、University of Copenhagen、Apple、Intel Labs会议/期刊:…...
GBT32960 协议编解码器的设计与实现
GBT32960 协议编解码器的设计与实现 引言 在车联网领域,GBT32960 是一个重要的国家标准协议,用于新能源汽车与监控平台之间的数据交互。本文将详细介绍如何使用 Rust 实现一个高效可靠的 GBT32960 协议编解码器。 整体架构 编解码器的核心由三个主要组…...
Tomcat之 配置https协议即SSL证书
太难了,Tomcat7服务器配置Https协议的SSL证书,半天没搞定啊 切换,Tomcat8 分分钟 参考 https://blog.csdn.net/u014553029/article/details/86672342 https://blog.csdn.net/qq_37138756/article/details/103516627 https://blog.csdn.net/r…...
如何将飞书多维表格与DeepSeek R1结合使用:效率提升的完美搭档
将飞书的多维表格与DeepSeek R1结合使用,就像为你的数据管理和分析之旅装上一台涡轮增压器。两者的合作,不仅仅在速度上让人耳目一新,更是将智能化分析带入了日常的工作场景。以下是它们如何相辅相成并改变我们工作方式的一些分享。 --- 在…...
JPA编程,去重查询ES索引中的字段,对已有数据的去重过滤,而非全部字典数据
一、背景 课程管理界面,查询前,需要把查询元数据给出。 学科列表、学段列表和分类列表,我们把它定义为查询元数据。 一般的业务需求是: 系统维护好多个字典,比如学科、学段等等,相当于属性库。 但是&…...
Kubermetes 部署mysql pod
步骤 1: 创建 PersistentVolume 和 PersistentVolumeClaim 首先为 MySQL 创建一个 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来确保数据的持久性。 mysql-pv.yaml: apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volume spec:cap…...
自定义wordpress三级导航菜单代码
首先,在你的主题functions.php文件中,添加以下代码以注册一个新的菜单位置: function mytheme_register_menus() {register_nav_menus(array(primary-menu > __(Primary Menu, mytheme))); } add_action(init, mytheme_register_menus); …...
剑指 Offer II 060. 出现频率最高的 k 个数字
comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20060.%20%E5%87%BA%E7%8E%B0%E9%A2%91%E7%8E%87%E6%9C%80%E9%AB%98%E7%9A%84%20k%20%E4%B8%AA%E6%95%B0%E5%AD%97/README.md 剑指 Offer II 060. 出现频率最高的…...
SQL Server数据库中用存储过程来取顺序号
SQL Server数据库中用存储过程来取顺序号 表sys_number,字段name字符,表示前缀,value数字,一个一个递增 存储过程代码: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[usp_GetSysid]name varchar(5…...
JS—组成:2分钟掌握什么是ECMAScript操作,什么是DOM操作,什么是BOM操作
个人博客:haichenyi.com。感谢关注 1. 目录 1–目录2–组成3–内置对象 2. 组成 一直都在说JS,JS,到底啥是JS有了解过吗?JS由哪几部分组成的呢? 定义: JavaScript是一种轻量级、解释型或即时编译型的编程语…...
如何使用 Ollama 的 API 来生成聊天
如何使用 Ollama 的 API 来生成聊天 简介 生成聊天 生成聊天的示例 加载模型 卸载模型 简介 Ollama 提供了一个 RESTful API,允许开发者通过 HTTP 请求与 Ollama 服务进行交互。这个 API 覆盖了所有 Ollama 的核心功能,包括模型管理、运行和监控。本…...
Jenkins学习笔记
文章目录 一、Jenkins简介二、Jenkins的安装1. 安装前准备2. 安装Jenkins3. 启动Jenkins 三、Jenkins的配置1. 初始配置2. 全局工具配置3. 插件安装 四、Jenkins的使用1. 创建新任务2. 配置任务3. 触发构建4. 查看构建结果 五、Jenkins的高级功能1. 分布式构建2. 流水线&#x…...
公开笔记:自然语言处理(NLP)中文文本预处理主流方法
在自然语言处理(NLP)领域,将中文文本转化为数字的主流方法主要集中在预训练语言模型和子词编码技术上。这些方法能够更好地捕捉语义信息,并且在各种NLP任务中表现出色。以下是目前主流的文本编码方法: 1. 基于预训练语…...
第5章 使用OSSEC进行监控(网络安全防御实战--蓝军武器库)
网络安全防御实战--蓝军武器库是2020年出版的,已经过去3年时间了,最近利用闲暇时间,抓紧吸收,总的来说,第5章开始进入主机安全(HIDS)领域了,2022年的时候有幸做过终端安全一段时间&a…...
计算机毕业设计SpringBoot+Vue.js电商平台(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
【音视频】ffplay简单过滤器
一、ffplay简单过滤器 视频旋转:借助transpose滤镜 ffplay -i 1.mp4 -vf transpose1这里选择不同的数字是不同的方向: 视频翻转:借助hflip/vflip实现水平和垂直翻转: 水平翻转 ffplay 1.mp4 -vf hflip垂直翻转 ffplay 1.mp4 …...
大白话html第十一章
大白话html第十一章 在网页开发的第十一章,会涉及到很多前沿且复杂的技术和概念,主要聚焦于性能极致优化、前沿交互技术以及与人工智能的融合等方面。 1. 极致性能优化 概念 这就好比给一辆赛车进行全方位的精细调校,让它跑得又快又稳。在…...
基于websocket搭建聊天室
基于websocket搭建聊天室 1.后端配置 1.依赖一个web一个websocket <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.spr…...
Metal学习笔记十一:贴图和材质
在上一章中,您设置了一个简单的 Phong 光照模型。近年来,研究人员在基于物理的渲染 (PBR) 方面取得了长足的进步。PBR 尝试准确表示真实世界的着色,真实世界中离开表面的光量小于表面接收的光量。在现实世界中…...
STM32-USART串口数据包
一:HEX数据包发送 1.为了收发数据包,先定义两个缓存区的数组 ,这4个数据只存储发送或者接收的载荷数据,包头和包尾不存 uint8_t Serial_TxPacket[4]; uint8_t Serial_RxPacket[4]; uint8_t Serial_RxFlag;//接收一个数据包就置F…...
【LeetCode 热题 100】438. 找到字符串中所有字母异位词 | python 【中等】
继续学!嗨起来!!!(正确率已经下30%了,我在干什么) 题目: 438. 找到字符串中所有字母异位词 给定两个字符串 s 和 p,找到 s 中所有 p 的子串,返回这些子串的…...
Ollama+Deepseek-R1+AnythingLLM本地个人知识库搭建
一、OllamaDeepseek-R1AnythingLLM本地个人知识库搭建 在搭建强大的本地个人知识库以及提升开发效率的技术体系中,Ollama、DeepSeek-R1 和 AnythingLLM 扮演着举足轻重的角色。Ollama 作为模型运行与管理工具,是整个技术架构中的关键枢纽,负…...
决策树(Decision Tree)基础知识
目录 一、回忆1、*机器学习的三要素:1)*函数族2)*目标函数2.1)*模型的其他复杂度参数 3)*优化算法 2、*前处理/后处理1)前处理:特征工程2)后处理:模型选择和模型评估 3、…...
跨域-告别CORS烦恼
跨域-告别CORS烦恼 文章目录 跨域-告别CORS烦恼[toc]1-参考网址2-思路整理1-核心问题2-个人思考3-脑洞打开4-个人思考-修正版1-个人思考2-脑洞打开 3-知识整理1-什么是跨域一、同源策略简介什么是源什么是同源是否是同源的判断哪些操作不受同源策略限制跨域如何跨域 二、CORS 简…...
浅论数据库聚合:合理使用LambdaQueryWrapper和XML
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、数据库聚合替代内存计算(关键优化)二、批量处理优化四、区域特殊处理解耦五、防御性编程增强 前言 技术认知点:使用 XM…...
css实现元素垂直居中显示的7种方式
文章目录 * [【一】知道居中元素的宽高](https://blog.csdn.net/weixin_41305441/article/details/89886846#_1) [absolute 负margin](https://blog.csdn.net/weixin_41305441/article/details/89886846#absolute__margin_2) [absolute margin auto](https://blog.csdn.net…...
Nerf流程
一.数据处理: 在输入数据时,并没有给出相机的内参与外参,需要在数据处理得出相机的内外惨数,作者使用COLMAP得到相机参数后,转成NeRF可以读取的格式即可以用于模型训练。 旋转矩阵的第一列到第三列分别表示了相机坐标系…...
Spring Cloud Alibaba学习 5- Seata入门使用
Spring Cloud Alibaba学习 5- Seata入门使用 Seata是Spring Cloud Alibaba中用于分布式事务管理的解决方案 一. Seata的基本概念 1. Seata的三大角色 1> TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。TC作…...
Select 下拉菜单选项分组
使用<select>元素创建下拉菜单,并使用 <optgroup> 元素对选项进行分组。<optgroup> 元素允许你将相关的 <option> 元素分组在一起,并为每个分组添加一个标签。 <form action"#" method"post"><la…...
【无人机与无人车协同避障】
无人机与无人车协同避障的关键在于点云数据的采集、传输、解析及实时应用,以下是技术实现的分步解析: 1. 点云数据采集(无人机端) 传感器选择: LiDAR:通过激光雷达获取高精度3D点云(精度达厘米…...
AI视频领域的DeepSeek—阿里万相2.1图生视频
让我们一同深入探索万相 2.1 ,本文不仅介绍其文生图和文生视频的使用秘籍,还将手把手教你如何利用它实现图生视频。 如下为生成的视频效果(我录制的GIF动图) 如下为输入的图片 目录 1.阿里巴巴全面开源旗下视频生成模型万相2.1模…...
飞机大战lua迷你世界脚本
-- 迷你世界飞机大战 v1.2 -- 星空露珠工作室制作 -- 最后更新:2024年1月 ----------------------------- -- 迷你世界API适配配置 ----------------------------- local UI { BASE_ID 7477478487091949474-22856, -- UI界面ID ELEMENTS { BG 1, -- 背景 BTN_LE…...
Android15请求动态申请存储权限完整示例
效果: 1.修改AndroidManifest.xml增加如下内容: <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-perm...
Java 导出大数据到 Excel 表格
背景 之前的项目一直是用XSSFWorkbook来做 Excel 导出,在遇到大数据导出时,经常会遇到 OOM。在 Apache Poi 3.8 之后的版本提供的 SXSSFWorkbook 可以优雅的解决这个问题。 原理 SXSSFWorkbook 被称为流式 API,主要是因为它采用了流式写入…...
GCC RISCV 后端 -- GCC Passes 注释
在前面文章提到,当GCC 前端完成对C源代码解析完成后,就会使用 处理过程(Passes)机制,通过一系列的处理过程,将 GENERIC IR 表示的C程序 转步转换成 目标机器的汇编语言。过程描述如下图所示: 此…...
稚晖君级硬核:智元公司开源机器人通信框架AimRT入驻GitCode平台
在科技的浪潮中,机器人技术正以前所未有的速度发展。它们不再只是科幻小说中的概念,而是逐渐融入到我们的日常生活中,从工厂的自动化生产线到家庭的智能助手,机器人的身影无处不在。然而,随着机器人应用的日益复杂&…...
STM32L051系列单片机低功耗应用
STM32L051单片机支持多种低功耗模式,包括 Sleep(睡眠)、Stop(停止) 和 Standby(待机) 模式。不同模式的功耗和唤醒方式不同。 一、低功耗相关介绍 1.1 低功耗模式概览 模式功耗唤醒源时钟状态…...
【代码分享】基于IRM和RRT*的无人机路径规划方法详解与Matlab实现
基于IRM和RRT*的无人机路径规划方法详解与Matlab实现 1. IRM与RRT*的概述及优势 IRM(Influence Region Map)通过建模障碍物的影响区域,量化环境中的安全风险,为RRT算法提供启发式引导。RRT(Rapidly-exploring Random…...
【JAVA架构师成长之路】【JVM实战】第1集:生产环境CPU飙高排查实战
课程标题:生产环境CPU飙高排查实战——从现象到根因的15分钟攻防战 目标:掌握CPU飙高问题的系统性排查方法,熟练使用工具定位代码或资源瓶颈 0-1分钟:问题引入与核心影响 线上服务器CPU突然飙升至90%以上,导致服务响应延迟激增,用户投诉激增。CPU飙高可能由死循环、线程…...
android edittext 防止输入多个小数点或负号
有些英文系统的输入法,或者定制输入法。使用xml限制不了输入多个小数点和多个负号。所以代码来控制。 一、通过XML设置限制 <EditTextandroid:id="@+id/editTextNumber"android:layout_width="wrap_content"android:layout_height="wrap_conten…...
Spring MVC 页面重定向返回后通过nginx代理 丢失端口号问题处理
Spring MVC页面重定向通过Nginx代理后出现端口丢失问题,通常由以下原因及解决方案构成: ## 一、Nginx配置问题(核心原因) 1. Host头传递不完整 Nginx默认未将原始请求的端口信息传递给后端,导致应用生成重定向…...
DeepSeek V3 源码:从入门到放弃!
从入门到放弃 花了几天时间,看懂了DeepSeek V3 源码的逻辑。源码的逻辑是不难的,但为什么模型结构需要这样设计,为什么参数需要这样设置呢?知其然,但不知其所以然。除了模型结构以外,模型的训练数据、训练…...
基于国产芯片的AI引擎技术,打造更安全的算力生态 | 京东零售技术实践
近年来,随着国产AI芯片的日益崛起,基于国产AI芯片的模型适配、性能优化以及应用落地是国产AI应用的一道重要关卡。如何在复杂的京东零售业务场景下更好地使用国产AI芯片,并保障算力安全,是目前亟需解决的问题。对此,京…...
LINUX网络基础 [一] - 初识网络,理解网络协议
目录 前言 一. 计算机网络背景 1.1 发展历程 1.1.1 独立模式 1.1.2 网络互联 1.1.3 局域网LAN 1.1.4 广域网WAN 1.2 总结 二. "协议" 2.1 什么是协议 2.2 网络协议的理解 2.3 网络协议的分层结构 三. OSI七层模型(理论标准) …...