当前位置: 首页 > news >正文

分布式 窗口算法 总结

前言


 相关系列

  • 《分布式 & 目录》
  • 《分布式 & 窗口算法 & 总结》
  • 《分布式 & 窗口算法 & 问题》
     

参考文献

  • 《【算法】令牌桶算法》
     
     

固定窗口算法


简介

    固定窗口算法是最简单的流量控制算法。固定窗口算法的核心原理是将系统的生命周期划分为一个个单位时间的固定窗口,随后再去限制这些固定窗口所能接收的请求数量。固定窗口算法通常在实现时会使用计数器去统计单位时间内已接收的请求总数,而一旦请求数量在下个固定窗口到来前到达阈值,那么系统就会拒绝掉后续的所有请求,直至下个固定窗口到来为止。
 

场景

  • 限制网络带宽:控制访问流量;
  • 功能分级:为不同级别的用户提供不同频率的服务,通过控制单位时间内最大访问数量的方式;
  • 任务调度:限制任务执行频率以避免资源争用。
     

在这里插入图片描述

概念

  • 计数器:一个简单的次数统计,通常使用Redis一类的中间件实现。
     

流程

  • 系统每隔单位时间(通常是1s)的去清空计数器;
  • 客户端访问系统,在网关被拦截。随后网关会判断当前请求是否免限流,是则直接访问;
  • 如果当前请求不免限流,则网关会判断当前固定窗口接收的请求总数是否已达阈值,是则拒绝当前请求;否则允许当前请求访问系统。
     

缺点

    无法限制请求的访问频率。固定窗口算法只能限制请求在单位时间内的整体数量,但却无法限制请求在单位时间内的整体频率,即请求可能不会均匀的散布在单位时间中,而是会在两个单位时间的起/终点处集中发生,并因此边界原因而出现超频问题。

    以每秒50个请求的限制为例,这50个请求可能不会均匀散落于1s的单位时间中,而是集中在终点的0.1 ~ 0.2秒内发生。此时如果下个单位时间的50个请求也集中在起点的0.1 ~ 0.2秒内发生,那么就违背了固定窗口算法在单位时间内不允许请求总数超过阈值的规定。
在这里插入图片描述

 
 

滑动窗口算法


    滑动窗口算法是固定窗口算法的优化版本,用于解决固定窗口算法的边界超频问题。滑动窗口算法与固定窗口算法的核心差异在于其将系统生命周期的时间分段由原本的绝对分段改为了以当前时刻为基点的相对分段,即系统统计的永远都是当前时刻所在单位时间内的请求数量。因此与固定窗口算法一个单位时间就是一个窗口不同,滑动窗口算法永远只有一个窗口,并且该窗口还会随着时间的推移而移动,这也是滑动窗口算法的名称由来。那么当前时刻具体又处于单位时间的那个位置呢?事实上滑动窗口算法会对单位时间进行更加细致的划分,例如将1s的单位时间划分为5个0.2s的区间,并为每个区间分配独立的计数器来追求更加平滑的限流效果,因此当前时刻必然会位于单位时间的最后一个区间划分上。

在这里插入图片描述

 

流程

  • 系统每隔区间时段便滑动一个区间;
  • 客户端访问系统,在网关被拦截。随后网关会判断当前请求是否免限流,是则直接访问;
  • 如果当前请求不免限流,则网关会判断滑动窗口的单位时间内所有区间计数器统计的请求总数“和”是否已达阈值,是则拒绝当前请求;否则允许当前请求访问系统。
  • 上述流程可以大幅降低边界超频问题的发生概率。依然以每秒50个请求的限制为例:如果系统在1.0 ~ 1.8区间内未曾收到任何请求,但在1.8 ~ 2.0区间内却集中接收了50个请求,那么整个单位时间内可接收的请求总数实际便已达到上限。这种情况下如果在2.0 ~ 2.2区间里又有50个请求访问系统,那么在固定窗口算法中是不会触发限流的,但是在滑动窗口算法中由于滑动窗口会剔除尾部/新增头部的1.0 ~ 1.2/2.0 ~ 2.2区间,因此整个单位时间所允许的请求数量依然达到了上限,因此是会触发限流的。而理论上只要区间划分的足够细致,那么最终的限流效果就越平滑,即边界超频的发生概率就越小。

相关文章:

分布式 窗口算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & 窗口算法 & 总结》《分布式 & 窗口算法 & 问题》 参考文献 《【算法】令牌桶算法》 固定窗口算法 简介 固定窗口算法是最简单的流量控制算法。固定窗口算法的核心原理是将系统的生命周期划分为一个个…...

docker容器内部启动jupyter notebook但是宿主机无法访问的解决方法

目录 1.问题2.解决方法 1.问题 在docker容器内启动了jupyter notebook,在宿主机内用如下的url无法访问 http://localhost:8888 http://127.0.0.1:8888 启动方法: jupyter notebook 2.解决方法 启动方法加上选项[ --ip‘*’]或者[–ip‘0.0.0.0’] 即启…...

2.2 数据库设计方法

数据库设计流程: 1.需求分析:准确了解分析用户需求(包括数据与处理)。需求分析是整个设计过程的基础,需求分析决定了构建数据库大厦的速度和质量 2.概念结构设计:概设结构设计是整个数据库设计的关键&…...

ALOHA 协议详解

注:本文为 “ALOHA 协议” 相关文章合辑。 未去重整理。 动态分配信道(ALOHA 协议、CSMA 协议) QuantumYou 于 2021-07-27 09:32:04 发布 ALOHA 协议 纯 ALOHA 协议 -纯 ALOHA 协议思想:不监听信道,不按时间槽发送…...

Quant connect的优势和不足,学习曲线难

Quant connect的优势和不足 Quant connect作为一个成熟的算法交易平台,具有许多优势,包括: 强大的回测功能:Quant connect提供了丰富的数据源和回测功能,可以对各种交易策略进行全面的回测和分析。 容易上手&#xf…...

分布式 漏桶算法 总结

前言 相关系列 《分布式 & 目录》《分布式 & 漏桶算法 & 总结》《分布式 & 漏桶算法 & 问题》 概述 简介 LBA Leaky Bucket Algorithm 漏桶算法是一种流行于网络通信领域的流量控制/频率限制算法。漏桶算法的核心原理是通过一个概念上的“漏桶”来…...

2450.学习周刊-2024年50周

封面 人生五个球 ✍优秀博文 面对老板安排的工作,事事有回应,有必要吗? 职场精英进阶手册:工作推进五原则,让你合理高效地利用时间 上个班而已,千万别畏手畏脚 理解了雷军说的SU7要守正出奇&#xff0…...

前端性能优化实战:从加载到渲染的全链路提升

"这个页面怎么这么慢啊?" 产品经理小李站在我的工位旁,指着屏幕上的数据大屏抱怨道。我打开 Chrome DevTools 看了一眼,首屏加载时间确实有点吓人 - 足足用了 8 秒。作为一个追求极致体验的前端开发者,这个数字让我坐不住了。 回想起上周的性能检测会议,…...

pdf merge

在 Ubuntu 22.04 上,你可以使用以下命令行工具来合并多个 PDF 文件: 1. pdftk pdftk 是一个强大的 PDF 工具,支持合并、拆分和其他操作。安装和使用方法如下: sudo apt install pdftk pdftk file1.pdf file2.pdf cat output me…...

Python高性能web框架-FastApi教程:(3)路径操作装饰器方法的参数

路径操作装饰器方法的参数 1. 定义带有参数的POST请求路由 app.post(/items,tags[这是items测试接口],summary这是items测试的summary,description这是items测试的description,response_description这是items测试的response_description) def test():return {items: items数据…...

怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev

本文引用怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev 在 vscode 设置项中配置 gopls 的 ui.navigation.importShortcut 为 Definition 即可。 "gopls": {"ui.navigation.importShortcut": "Definition" }ui.navigation.i…...

bean创建源码

去字节面试,直接让人出门左拐:Bean 生命周期都不知道! spring启动创建bean流程 下面就接上了 bean生命周期 doGetBean Object sharedInstance this.getSingleton(beanName); sharedInstance this.getSingleton(beanName, new ObjectF…...

axfbinhexelf文件区别

0 Preface/Foreword axf,bin,hex,elf四个都能存在于嵌入式软件领域。 1 文件介绍 嵌入式软件中常见的文件包含: axf,包含调试信息,文件最大。调试信息放在机器码前面。elfhex,包含地址信息,文件内容较大。bin&#x…...

ABAP时间戳与日期时间转换及时区处理

一、时间戳转换为日期时间 1. 基本转换 CONVERT TIME STAMP <fs_back>-lastchangedatetime TIME ZONE sy-zonloINTO DATE DATA(lv_date)TIME DATA(lv_time).2. 解决8小时时差问题的方案 方案1&#xff1a;直接使用UTC时区&#xff08;推荐&#xff09; CONVERT TIME …...

#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍01

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

Flink是什么?Flink技术介绍

官方参考资料&#xff1a;Apache Flink — Stateful Computations over Data Streams | Apache Flink Flink是一个分布式流处理和批处理计算框架&#xff0c;具有高性能、容错性和灵活性。以下是关于Flink技术的详细介绍&#xff1a; 一、Flink概述 ‌定义‌&#xff1a;Fli…...

DETR-ResNet-50:Facebook的革命性目标检测模型

在计算机视觉领域&#xff0c;DETR&#xff08;DEtection TRansformer&#xff09;模型&#xff0c;由Facebook推出&#xff0c;已成为一项具有革命性的技术。DETR-ResNet-50作为一种结合了Transformer和ResNet-50骨干网络的端到端目标检测模型&#xff0c;凭借其出色的性能和创…...

0002.基于springboot +layui二手物品交易平台

适合初学同学练手项目&#xff0c;部署简单&#xff0c;代码简洁清晰&#xff1b; 注:当前项目架构使用前后端未分离哦&#xff01; 一、系统架构 前端&#xff1a;layui| html 后端&#xff1a;springboot | mybatis-plus 环境&#xff1a;jdk1.8 | mysql | maven 二、代…...

【游戏设计原理】7 - 加德纳的多元智能理论

虽然多元智能理论是对认知方式的分类&#xff0c;但它也可以为游戏设计提供丰富的思路和策略&#xff0c;帮助设计师创建更具吸引力、包容性和多样性的游戏。通过理解不同玩家的认知方式和优势&#xff0c;我们可以更精准地设计游戏的元素和玩法&#xff0c;使其能够吸引广泛的…...

React Image Crop——在React应用中轻松实现图片裁剪功能

React Image Crop是一个用于在React应用程序中裁剪和调整图像的库。它提供了一个简单而强大的界面&#xff0c;允许用户选择和调整裁剪区域&#xff0c;并生成裁剪后的图像。 什么是React Image Crop&#xff1f; React Image Crop是一个开源的React组件&#xff0c;用于在浏览…...

FanControl终极指南:3个核心模块助你打造完美风扇控制方案

FanControl终极指南&#xff1a;3个核心模块助你打造完美风扇控制方案 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trendin…...

调查研究-141 全球机器人产业深度调研报告【03篇】机器人产业六大利润池:从核心零部件到软件平台的商业逻辑

TL;DR 场景&#xff1a;关注机器人产业商业模式、利润分配和投资机会的投资者、从业者、分析人士结论&#xff1a;机器人产业利润集中在核心零部件&#xff08;减速器/伺服/电机&#xff09;、软件AI平台和医疗机器人耗材&#xff1b;本体和集成利润率有限产出&#xff1a;六大…...

Spotify推AI应用Studio,结合多信息源生成简报、播客和歌单!能“代你行动”

Spotify Studio&#xff1a;AI驱动的内容生成新利器Spotify Labs推出的全新独立AI应用程序Studio&#xff0c;可根据聊天机器人提示&#xff0c;在用户电脑上生成每日简报、播客和歌单。其生成内容会参考用户在Spotify上的收听历史&#xff0c;以及连接到该应用的其他应用信息&…...

避坑指南:MMSegmentation自定义数据集训练时,如何解决‘xxxDataset is not in the dataset registry’等5个常见报错

MMSegmentation实战避坑&#xff1a;5大训练报错精准解决方案 引言 当你第一次尝试用MMSegmentation训练自定义数据集时&#xff0c;是否遇到过这样的场景&#xff1a;按照教程一步步操作&#xff0c;却在运行train.py时突然遭遇红色报错信息&#xff1f;作为计算机视觉领域最流…...

基于GIS三维地球的全球指挥官推演沙盘软件军迷免费版 谷歌地球 数字孪生 自媒体创作 战术想定编辑

一套完全自主的、基于真实地理坐标系的沉浸式战术推演引擎&#xff0c;其技术栈的构建是对传统可视化与交互范式的系统性革新。 全球指挥官沙盘软件军迷免费版下载 一、 项目概述&#xff1a;一个核心命题与两项技术挑战 本项目源于一个明确的工程命题&#xff1a;构建一个允…...

【顶级EI复现】考虑用户行为基于扩散模型的电动汽车充电场景生成( Python + PyTorch代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 &#x1f381…...

机器学习评价指标之综合指标的关系

综合指标的关系宏平均考虑每个类别的个别表现&#xff0c;并对它们的评价指标&#xff08;比如准确率、召回率等&#xff09;进行平均。每个类别 被视为同等重要&#xff0c;无论类别的大小或样本数量。微平均则关注整体表现&#xff0c;它将所有类别的预测结果合并起来&#x…...

深入理解Famous Engine场景图系统:构建复杂UI的10个技巧

深入理解Famous Engine场景图系统&#xff1a;构建复杂UI的10个技巧 【免费下载链接】engine 项目地址: https://gitcode.com/gh_mirrors/engine2/engine Famous Engine是一个强大的开源框架&#xff0c;专为构建高性能、复杂交互的用户界面而设计。其核心的场景图系统…...

Gramophone安全与权限管理:Android 13+存储权限最佳实践

Gramophone安全与权限管理&#xff1a;Android 13存储权限最佳实践 【免费下载链接】Gramophone A sane music player built with media3 and material design library that is following androids standard strictly. 项目地址: https://gitcode.com/gh_mirrors/gr/Gramopho…...

诸侯割据:不是只有坏处——有些阶段,它是“必要的恶”

在主流的管理话语里&#xff0c;“诸侯割据”几乎是个贬义词。它让人联想到山头主义、资源内耗、总部失控。但有没有一种可能&#xff1a;它在某些阶段、某些条件下&#xff0c;恰恰是企业活下去、长起来的“必要代价”&#xff1f; 一、先看好处&#xff1a;诸侯式架构的“四…...