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

系统架构中的限流算法(一)

Sentinel限流/计数器限流/滑动时间窗口限流/漏桶限流/令牌桶限流

  • 1. 计数器限流算法
    • Java实现计数器限流算法
  • 2. 滑动时间窗口限流算法
    • Java实现滑动窗口限流算法
  • 3. 漏桶限流算法
    • Java实现漏桶限流算法
  • 4. 令牌桶限流算法
  • 5. 限流算法总结
  • 6. 微服务限流组件
  • 7. 单机限流和分布式限流
  • 8. 限流的难点
  • 9. 限流组件

1. 计数器限流算法

计数器算法是限流算法里最简单也是最容易实现的一种算法。

比如我们规定,对于A接口来说,我们1分钟的访问次数不能超过100个。

那么我们可以这么做:在一开 始的时候,我们可以设置一个计数器counter,每当一个请求过来的时候,counter就加1,如果counter的值大于100并且该请求与第一个 请求的间隔时间还在1分钟之内,那么说明请求数过多;

如果该请求与第一个请求的间隔时间大于1分钟,且counter的值还在限流范围内,那么就重置 counter,具体算法的示意图如下:
在这里插入图片描述

Java实现计数器限流算法

public interface TrafficLimiter {/*** 限流*/Boolean limit();
}
/*** 计数器限流算法*/
public class CounterLimiter implements TrafficLimiter {private long timestamp = System.currentTimeMillis();//请求次数private int reqCount;//每秒限流的最大请求数private int limitNum = 100;//时间窗口时长,单位msprivate long interval = 1000L;/*** 返回true表示限流,false代表通过* @return*/@Overridepublic synchronized Boolean limit() {long now = System.currentTimeMillis();//在当前时间窗口内if(now < timestamp + interval){//判断当前时间窗口请求数加1是否超过每秒限流的最大请求数if(reqCount + 1 > limitNum){return true;}reqCount++;return false;}else{//开启新的时间窗口timestamp = now;//重置计数器reqCount = 1;return false;}}
}

用法如下(以下算法的用法相同)

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

相关文章:

  • Prompt Tuning:优化提示调优全攻略
  • vue+cesium示例:3Dtiles三维模型高度调整(附源码下载)
  • ai学习--python部分-1.变量名及命名空间的存储
  • 【科研绘图系列】R语言绘制柱状图(bar plot)
  • 开源第三方库发展现状
  • 扩容的未来:Web3 并行计算赛道全景图谱
  • webtrees——在线协作家谱
  • OpenCV (C/C++) 实现 Scharr 算子进行边缘检测
  • 新书速览|ASP.NET MVC高效构建Web应用
  • window 显示驱动开发-Direct3D 呈现性能改进(一)
  • Nginx 基本概念深度解析:从服务器特性到代理模式应用​
  • 第12次04 :首页展示用户名
  • 0基础学习Linux之揭开朦胧一面:环境基础开发工具
  • Haproxy 基础知识点
  • 【后端高阶面经:架构篇】46、分布式架构:如何应对高并发的用户请求
  • DeepSeek 赋能教育游戏化:AI 重构学习体验的技术密码
  • 【Volumetric Heatmap热力图插件的使用】
  • python打卡day37
  • 2025/5/26 学习日记 基本/扩展正则表达式 linux三剑客之grep
  • 运行comfyui Wan2.1 文生视频工作流,问题总结
  • 2.BS版使用说明
  • 输入一串字符,统计其中字母的个数
  • SpringBoot整合MyBatis
  • [Godot][游戏开发] 如何在 Godot 中配置 Android 环境(适配新版 Android Studio)
  • 使用 Kotlin 实现 Android 自定义 Lint 检查规则的步骤指南
  • 沉石鱼惊旋
  • [ARM][架构] 02.AArch32 程序状态
  • GPT-4o 风格提示词案例大全(持续更新 ing...)
  • AE THYRO-AX 功率控制器 THYRISTOR-LEISTUNGSSTELLER THYRISTOR POWER CONTROLLER
  • Kotlin学习34-data数据类1