关于两种限流模式

简介: 流量预警和限流方案中,比较常用的有两种。第一种滑窗模式,通过统计多个单元时间的访问次数来进行控制,当单位时间的访问次数达到的某个峰值时进行限流。第二种为响应模式,通过控制当前活跃请求数,来进行流量控制。下面来简单分析下两种的优缺点。 1、滑窗模式 模式分析:在每次有访问进来时,我们判断前N个单位

流量预警和限流方案中,比较常用的有两种。第一种滑窗模式,通过统计多个单元时间的访问次数来进行控制,当单位时间的访问次数达到的某个峰值时进行限流。第二种为响应模式,通过控制当前活跃请求数,来进行流量控制。下面来简单分析下两种的优缺点。

1、滑窗模式

模式分析:

在每次有访问进来时,我们判断前N个单位时间里总访问量是否超过了设置的阈值,若超过则不允许执行。

这种模式的实现的方式更加契合流控的本质意义。理解较为简单。但由于访问量的预先不可预见性,会发生单位时间的前半段有大量的请求涌入,而后半段则拒绝所有请求的情况发生。(一般,需要会将单位时间切的足够的细来解决这个问题)其次,我们很难确定这个阈值设置在多少比较合适,只能通过经验或者模拟(如压测)来进行估计,不过即使是压测也很难估计的准确,线上每台机器的硬件参数的不同,或者同一台机子在不同的时间点其可以接受的阈值也不尽相同(系统中),每个时间点导致能够承受的最大阈值也不尽相同,我们无法考虑的周全。

所以滑窗模式往往用来对某一资源的保护上(或者说是承诺比较合适:我对某一接口的提供者承诺过,最高调用量不超过XX),如对db的保护,对某一服务的调用的控制上。因为对于我们应用来说,db或某一接口就是一共单一的整体。

代码实现思路:

每一个窗(单位时间)就是一个独立的计数器(原子计数器),用以数组保存。将当前时间以某种方式(比如取模)映射到数组的一项中。每次访问先对当前窗内计数器+1,再计算前N个单元格的访问量综合,超过阈值则限流。

这里有个问题,时间永远是递增的,单纯的取模,会导致数组过长,使用内存过多,我们可以用环形队列来解决这个问题。

2、响应模式

模式分析:

每次操作执行时,我们通过判断当前正在执行的访问数是否超过某个阈值在决定是否限流。

该模式看着思路比较的另类,但却有其独到之处。实际上我们限流的根本是为了保护资源,防止系统接受的请求过多,应接不暇,拖慢系统中其他接口的服务,造成雪崩。也就是说我们真正需要关心的是那些运行中的请求,而那些已经完成的请求已是过去时,不再是需要关心的了。

我们来看看其阈值的计算方式,对于一个请求来说,响应时间rt/qps是一个比较容易获取的参数,那么我们这样计算:qps/1000*rt。

此外,一个应用往往是个复杂的系统,提供的服务或者暴露的请求、资源不止一个。内部GC、定时任务的执行、其他服务访问的骤增,外部依赖方、db的抖动,抑或是代码中不经意间的一个bug。都可能导致相应时间的变化,导致系统同时可以执行请求的变化。而这种模式,则能恰如其分的自动做出调整,当系统不适时,rt增加时,会自动的对qps做出适应。

代码实现思路:

当访问开始时,我们对当前计数器(原子计数器)+1,当完成时,-1。该计数器即为当前正在执行的请求数。只需判断这个计数器是否超过阈值即可。

相关文章
|
4月前
|
人工智能 安全 API
阿里云/本地部署OpenClaw+Claude Code全栈实战:2种会话模式+4层架构与大模型配置指南
在AI开发辅助场景中,上下文丢失、会话不可持续、权限不可控、长期任务无法断点续跑,一直是影响效率的核心问题。OpenClaw与Claude Code的组合,通过ACP协议实现**编排层与执行层分离**,用持久化会话、线程绑定、四层架构、精细化权限控制,彻底解决AI临时记忆、不可长期运行的痛点。本文完整还原OpenClaw+Claude Code的架构设计、会话模式、权限体系与实战流程,同时补充2026年阿里云云端部署、MacOS/Linux/Windows11本地部署、阿里云千问大模型与免费Coding Plan API配置,搭配可直接复制的代码命令与高频问题解决方案,覆盖从零基础搭建到生产级
2555 0
|
11月前
|
JSON 算法 API
深度分析小红书城API接口,用Python脚本实现
小红书作为以UGC内容为核心的生活方式平台,其非官方API主要通过移动端抓包解析获得,涵盖内容推荐、搜索、笔记详情、用户信息和互动操作等功能。本文分析了其接口体系、认证机制及请求规范,并提供基于Python的调用框架,涉及签名生成、登录态管理与数据解析。需注意非官方接口存在稳定性与合规风险,使用时应遵守平台协议及法律法规。
|
10月前
|
人工智能 JSON 监控
阿里云可观测 2025 年 8 月产品动态
阿里云可观测 2025 年 8 月产品动态
407 70
|
6月前
|
存储 人工智能 小程序
阿里云万小智AI建站系统全解析:收费价格、版本功能区别、使用场景及免费领CN域名
阿里云万小智AI建站系统,集成通义大模型与阿里云技术,提供“低门槛、高效率、全场景”官网搭建方案。支持对话式建站、AI生成内容与设计,三档套餐适配个人至企业需求,购服务即赠.CN域名首年免费,10分钟快速上线,助力数字化高效转型。
|
10月前
|
小程序 Java 知识图谱
Java 学习笔记 —— BMI & BMR 计算器
这是一个使用 Java 编写的 BMI 与 BMR 计算器小程序,可输入年龄、性别、身高和体重,计算身体质量指数(BMI)和基础代谢率(BMR),并输出健康评估结果。通过该项目,掌握了 Java 的输入处理、数据验证、条件判断、数学运算及格式化输出等基础知识,是 Java 初学者的理想练习项目。
|
机器学习/深度学习 人工智能 搜索推荐
《解锁增强型上下文学习,打造你的专属智能助手》
个性化人工智能助手通过增强型上下文学习技术,大幅提升性能与交互体验。该技术让助手不仅理解当前指令,还能结合历史对话和用户偏好,实现精准意图理解、连贯对话体验及个性化内容推荐。在智能办公、教育辅导和生活助手等领域,它助力高效工作、定制化学习和便捷生活。然而,数据隐私与算法优化仍是挑战,未来技术完善将使人机交互更智能高效。
1187 3
|
数据可视化 数据挖掘 API
matplotlib字体设置看这一篇就够了
matplotlib字体设置看这一篇就够了
915 3
|
存储 网络协议 数据可视化
C++实现socket通信
了解如何实现socket通信以及TCP连接的过程中发生了什么
565 1
|
存储 编解码 算法
PyMuPDF 1.24.4 中文文档(七)(4)
PyMuPDF 1.24.4 中文文档(七)
397 0

热门文章

最新文章