限流算法

下面对常见的限流算法进行讨论。目前,常用的限流算法主要有三种:计数器法、滑动窗口算法、漏桶算法和令牌桶算法。下面分别介绍其原理。
在这里插入图片描述

1. 计数器法

计数器法是通过计数对到来的请求进行选择性处理。如系统限制一秒内最多有X个请求,则在该秒时间内对到来的请求进行计数,当计数达到X后,拒绝所有后续请求。直到下一秒开始,对计数器进行清空。该方法的主要弊端是会造成所谓的“突刺现象”:若请求的产生并不均匀(如在某一秒的前0.01秒内就产生了X个请求),则会造成在后续的大部分时间内无法处理新的请求。

2. 滑动窗口算法

将时间窗口划分为多个子窗口,每个子窗口内限定请求的数量,例如每秒钟最多允许处理100个请求,每0.1秒钟内最多允许处理10个请求。这种算法可以更平滑地限制请求的数量。
在这里插入图片描述

3. 漏桶算法

漏桶算法是在计数器算法的基础上,为了处理“突刺现象”提出的一种限流算法。该算法将所有到来的请求保存入一个队列(漏桶)中,并以恒定的速率从该队列中获取请求并加以执行。当队列大小达到限制(桶满)后,则拒绝后续请求。其示意图如下。
在这里插入图片描述
可以看出,该算法的核心思想是利用能够临时存储请求的“漏桶”,对请求的序列进行整形,从而对“突刺现象”进行处理。该算法的整形能力由漏桶的大小限制,当累计堆积的请求数量过多,超过漏桶大小时,整形就会失效,造成后续时间内到来的请求无法得到处理。此外,由于漏出的速率固定,漏桶算法在突发特性的流量场景下无法充分利用资源。

4. 令牌桶算法

令牌桶算法与漏桶算法看起来十分近似。该算法以恒定的速率创建令牌,并放入指定大小的队列(令牌桶)中,若令牌桶已满,则丢弃令牌。每个请求到来时,需要从令牌桶中尝试获取令牌,若拿到令牌,则消耗令牌进行操作;否则将该请求阻塞,直到获取到令牌。其原理图如下。
在这里插入图片描述
令牌桶具有“先消费后生产”的性质:当请求到来时,可以先使用令牌桶中初始已有的令牌进行操作,而后再生产令牌对令牌桶进行补充。
与漏桶算法相比,令牌桶算法对突发特性的流量具有更好的处理能力。由于其“先消费后生产”的性质,只要令牌桶中存在令牌,就可以进行对突发的请求进行处理,充分利用资源。此外,令牌桶算法可以通过改变令牌生成的速率,方便地对限流效果进行调节。

小结

漏桶算法与令牌桶算法看似相似,但设计思路与性能均存在较大差别。漏桶算法将请求作为桶的生产方,通过限制桶桶漏出的速度实现限流。令牌桶算法则是将请求作为桶的消费方,通过控制桶的注入速度而实现限流。两者各有特点,均被广泛使用,没有一定的优劣之分。
下表总结了两者的差异:

限流思路优点缺点
漏桶算法限制桶的流出速度能够严格控制请求处理速率上限在存在突发特性流量时可能无法充分利用系统资源
令牌桶算法限制桶的输入速度可处理具有突发特性流量易于调节无法严格控制瞬时请求处理速率

5. QoS

有三大主流QoS模型,Best-Effort服务模型、IntServ预留资源模型、DiffServ差分服务模型‘

5.1 Best-Effort

Best-Effort是最简单的QoS服务模型,用户可以在任何时候,发出任意数量的报文,而且不需要通知网络。提供Best-Effort服务时,网络尽最大的可能来发送报文,但对时延、丢包率等性能不提供任何保证。Best-Effort服务模型适用于对时延、丢包率等性能要求不高的业务,是现在Internet的缺省服务模型,它适用于绝大多数网络应用,如FTP、E-Mail等

5.2 IntServ

IntServ模型是指用户在发送报文前,需要通过信令(Signaling)向网络描述自己的流量参数,申请特定的QoS服务。网络根据流量参数,预留资源以承诺满足该请求。在收到确认信息,确定网络已经为这个应用程序的报文预留了资源后,用户才开始发送报文。用户发送的报文应该控制在流量参数描述的范围内。网络节点需要为每个流维护一个状态,并基于这个状态执行相应的QoS动作,来满足对用户的承诺。
IntServ模型使用了RSVP(Resource Reservation Protocol)协议作为信令,在一条已知路径的网络拓扑上预留带宽、优先级等资源,路径沿途的各网元必须为每个要求服务质量保证的数据流预留想要的资源,通过RSVP信息的预留,各网元可以判断是否有足够的资源可以使用。只有所有的网元都给RSVP提供了足够的资源,“路径”方可建立。

5.3 DiffServ

DiffServ模型的基本原理是将网络中的流量分成多个类,每个类享受不同的处理,尤其是网络出现拥塞时不同的类会享受不同级别的处理,从而得到不同的丢包率、时延以及时延抖动。同一类的业务在网络中会被聚合起来统一发送,保证相同的时延、抖动、丢包率等QoS指标。
Diffserv模型中,业务流的分类和汇聚工作在网络边缘由边界节点完成。边界节点可以通过多种条件(比如报文的源地址和目的地址、ToS域中的优先级、协议类型等)灵活地对报文进行分类,对不同的报文设置不同的标记字段,而其他节点只需要简单地识别报文中的这些标记,即可进行资源分配和流量控制。
与Intserv模型相比,DiffServ模型不需要信令。在DiffServ模型中,应用程序发出报文前,不需要预先向网络提出资源申请,而是通过设置报文的QoS参数信息,来告知网络节点它的QoS需求。网络不需要为每个流维护状态,而是根据每个报文流指定的QoS参数信息来提供差分服务,即对报文的服务等级划分,有差别地进行流量控制和转发,提供端到端的QoS保证。DiffServ模型充分考虑了IP网络本身灵活性、可扩展性强的特点,将复杂的服务质量保证通过报文自身携带的信息转换为单跳行为,从而大大减少了信令的工作,是当前网络中的主流服务模型。

5.4 基于DiffServ模型的QoS组成

基于Diffserv模型的QoS业务主要分为以下几大类:
(1)报文分类和标记
要实现差分服务,需要首先将数据包分为不同的类别或者设置为不同的优先级。报文分类即把数据包分为不同的类别,可以通过MQC配置中的流分类实现。报文标记即为数据包设置不同的优先级,可以通过优先级映射和重标记优先级实现。不同的报文使用不同的QoS优先级,例如VLAN报文使用802.1p,IP报文使用DSCP,MPLS报文使用EXP。
(2)流量监管、流量整形和接口限速
流量监管和流量整形可以将业务流量限制在特定的带宽内,当业务流量超过额定带宽时,超过的流量将被丢弃或缓存。其中,将超过的流量丢弃的技术称为流量监管,将超过的流量缓存的技术称为流量整形。接口限速分为基于接口的流量监管和基于接口的流量整形。
(3)拥塞管理和拥塞避免
拥塞管理在网络发生拥塞时,将报文放入队列中缓存,并采取某种调度算法安排报文的转发次序。而拥塞避免可以监督网络资源的使用情况,当发现拥塞有加剧的趋势时采取主动丢弃报文的策略,通过调整流量来解除网络的过载。

小结

优点缺点
Best-Effort实现机制简单对不同业务流不能进行区分对待
IntServ可提供端到端QoS服务,并保证带宽、延迟需要跟踪和记录每个数据流的状态,实现较复杂,且扩展性较差,带宽利用率较低
DiffServ不需跟踪每个数据流状态,资源占用少,扩展性较强且能实现对不同业务流提供不同的服务质量, 需要在端到端每个节点都进行手工部署,对人员能力要求较高

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

飞天使-k8s知识点23-kubernetes实操8-数据存储1

文章目录 持久化存储的必要EmptyDirHostPathNFS 持久化存储的必要 Volume是Pod中能够被多个容器访问的共享目录,它被定义在Pod上,然后被一个Pod里的多个容器挂载到具体的文件目录下,kubernetes通过Volume实现同一个Pod中不同容器之间的数据共…

Nest创建神经元,并显示电压变化曲线

nest 安装与介绍 NEST(神经模拟工具)最初是在 1990 年代后期开发的。它的主要目标是作为计算神经科学模拟器。它支持具有不同生物学细节水平的各种神经元和突触模型。例如,NEST 的神经元模型范围从泄漏积分和激发模型到详细的 Hodgkin-Huxle…

深度学习手写字符识别:推理过程

说明 本篇博客主要是跟着B站中国计量大学杨老师的视频实战深度学习手写字符识别。 第一个深度学习实例手写字符识别 深度学习环境配置 可以参考下篇博客,网上也有很多教程,很容易搭建好深度学习的环境。 Windows11搭建GPU版本PyTorch环境详细过程 数…

抖音视频提取软件使用功能|抖音视频下载工具

我们的抖音视频提取软件是一款功能强大、易于操作的工具,旨在解决用户在获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们的软件支持通过关键词搜索和分享链接两种方式获取抖音视频,方便用户快速找到自己感兴趣的内容。 主要功能模块:…

论文阅读:Ground-Fusion: A Low-cost Ground SLAM System Robust to Corner Cases

前言 最近看到一篇ICRA2024上的新文章,是关于多传感器融合SLAM的,好像使用了最近几年文章中较火的轮式里程计。感觉这篇文章成果不错,代码和数据集都是开源的,今天仔细读并且翻译一下,理解创新点、感悟研究方向、指导…

PX4FMU和PX4IO最底层启动过程分析(上)

PX4FMU和PX4IO最底层启动过程分析(上) 主处理器和协处理器的固件烧写和运行过程 PX4FMU:各种传感器数据读取、姿态解算、PWM控制量的计算、与PX4IO通信。负责飞控最主要的工作。 PX4IO(STM32F103):为PIXHA…

查看仓库版本记录

打开命令行窗口 输入git log即可。 若发现分支不对,方法如下 查看项目目录,命令行输入dir可以查看 多个moudel,进入到需要查版本记录的moudel下 命令行输入cd .\文件名如wowo-win-server\ 切换到wowo-win-server文件夹下后,再输入…

C语言第三十弹---自定义类型:结构体(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 结构体 1、结构体类型的声明 1.1、结构体回顾 1.1.1、结构的声明 1.1.2、结构体变量的创建和初始化 1.2、结构的特殊声明 1.3、结构的自引用 2、结构体内存…

【Java多线程】对线程池的理解并模拟实现线程池

目录 1、池 1.1、线程池 2、ThreadPoolExecutor 线程池类 3、Executors 工厂类 4、模拟实现线程池 1、池 “池”这个概念见到非常多,例如常量池、数据库连接池、线程池、进程池、内存池。 所谓“池”的概念就是:(提高效率) 1…

acwing算法学习笔记 ------ 双链表

1、定义 这里可以做一个投机取巧,我们不再像单链表去用head去存头和尾,直接让r[0] 1,l[1] 0; idx 2.进行初始化, 解释一下l[N] 和 r[N] l[N]:是表示指向左面下一个节点下标, r[N]:表示指向下一个节点的下标。大家不用担心i…

基础复习(IDA调试器)

1.选择IDA调试后端 在顶部有一个下拉菜单,选择调试器后端位置 很多用户实际上使用的是Windows版本的IDA,该IDA可以直接调试Windows下32bit和64bit的程序 2.本地调试启动方法 载入IDA后,程序实际上在对程序内置的一个字符串进行base64解码…

【03】逆序数组

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 一、逆序函数是什么? 二、逆序函数原码 1.直接逆序 2.创建临时数组逆序 三、结言 💥一、逆序函数是什么? 示例:输入1 4 …

综合服务 IntServ

目录 综合服务 IntServ IntServ 定义的两类服务 IntServ 的四个组成部分 流 (flow) 资源预留协议 RSVP RSVP 协议的工作原理 IntServ 体系结构在路由器中的实现 综合服务 IntServ 体系结构存在的主要问题 综合服务 IntServ 综合服务 IntServ (Integrated Services) 可…

Linux进程间通信详解

文章目录 进程间通信进程间通信介绍一. 管道1. 管道的基本概念2. 管道的创建①. 匿名管道②. 命名管道匿名与命名管道的区别 3. 删除管道4. 管道的4种特殊情况 二、system V1. 共享内存( shm )shm基本概念shm函数 2. 消息队列( msg )msg基本概念msg函数 3. 信号量sem函数 三、指…

【GameFramework框架内置模块】3、数据表(Data Table)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录: https://blog.csdn.net/q7…

你要不要搞副业

最近看到了几个网友关于年轻人要不要搞副业的一点讨论,学习到了很多。整理分享如下: plantegg 你要不要搞副业? 最近网上看到很多讨论搞副业和远程工作的,我也说点自己的经验看法 当然这完全是出于个人认知肯定不是完全对的、也…

第十三章 Linux——备份与恢复

第十三章 Linux——备份与恢复 基本介绍安装dump和restore使用dump完成备份dump语法说明dump应用案例1dump应用案例2dump-w查看备份时间文件备份文件或者目录备注 使用restore基本语法基本介绍restore基本语法应用案例1应用案例2应用案例3应用案例4 基本介绍 实体机无法做快照…

wcf 简单实践 数据绑定 数据校验

1.概要 1.1 说明 数据校验&#xff0c;如果数据不合适&#xff0c;有提示。 1.2 要点 class User : IDataErrorInfothis.DataContext user;<Window.Resources><Setter Property"ToolTip" Value"{Binding RelativeSource{RelativeSource Self},Pat…

【电子通识】认识FMEA(失效模式和影响分析)

FMEA是Failure Mode and Effect Analysis的英文缩写&#xff0c;中文名称为失效模式和影响分析。主要应用于航空航天、食品、汽车和核电等行业。 FMEA讨论的是事先策划以及执行措施&#xff0c;预防问题的发生或控制问题的发展&#xff0c;降低设计和过程的风险。由于问题还没…

AI:134-基于深度学习的社交媒体图像内容分析

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…