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

高并发限流方案

1. nginx

2. 网关

3.代码层级

3.1. 计数器限流(固定窗口)

原理:统计单位时间内的请求数,超过阈值则拒绝请求。

实现:

使用原子计数器(如 Redis INCR + EXPIRE)。

例如:1 秒内限制 1000 次请求。

优点:简单高效。

缺点:窗口临界问题(如第 1 秒末和第 2 秒初的突发请求可能双倍通过)。

工具:Redis、Guava AtomicLong。

3.2. 滑动窗口限流

原理:将固定窗口细分为多个小窗口(如 1 秒分为 10 个 100ms 窗口),统计最近 N 个小窗口的总请求。

优点:缓解临界问题,更平滑。

缺点:仍有一定时间粒度误差。

工具:Redis + Lua(维护时间戳队列)、Sentinel。

3.3. 漏桶算法(Leaky Bucket)

原理:以恒定速率处理请求(如每秒 10 次),超出桶容量的请求被丢弃/排队。

实现:队列 + 固定速率消费。

优点:绝对平滑,适合流量整形。

缺点:无法应对突发流量(即使系统有空闲资源)。

工具:消息队列(如 RabbitMQ)、Nginx limit_req(漏桶变种)。

3.4. 令牌桶算法(Token Bucket)

原理:系统以固定速率向桶中添加令牌,请求需获取令牌才能执行,否则被限流。

优点:允许突发流量(如短时间内消耗积压的令牌)。

缺点:实现略复杂。

工具:

Guava RateLimiter(单机)。

Redis + Lua(分布式,如 redis.call(‘incr’, KEYS[1]) 结合过期时间)。

3.5. 分布式限流

场景:多节点环境下全局限流。

实现:

Redis + Lua:原子操作统计集群请求量。

中间件:如 Sentinel、Nginx 集群限流。

注意点:需处理 Redis 网络延迟和一致性。

http://www.lryc.cn/news/578277.html

相关文章:

  • demo01:基于 SpringMVC 的用户管理系统
  • 深入 ARM-Linux 的系统调用世界
  • Windows11系统中安装docker并配置docker镜像到pycharm中
  • 反射,枚举和lambda表达式
  • SpringBoot 启动入口深度解析:main方法执行全流程
  • 初等变换 线性代数
  • python中学物理实验模拟程序系列目录
  • Oracle 树形统计再进阶:类型多样性与高频类型分析(第三课)
  • 长短期记忆网络(LSTM):让神经网络拥有 “持久记忆力” 的神奇魔法
  • CppCon 2018 学习:An allocator is a handle to a heap Lessons learned from std::pmr
  • 【FineDataLink快速入门】01界面介绍-运维中心
  • jvm 锁升级机制
  • AI编程实战:Cursor黑科技全解析
  • AlpineLinux安装docker
  • 提示技术系列——思维树
  • 使用Verilog设计模块输出中位数,尽可能较少资源使用
  • Python 数据分析与机器学习入门 (五):Matplotlib 数据可视化基础
  • python环境快速搭建
  • Clickhouse源码分析-TTL执行流程
  • 直播 APP 开发需要多少成本
  • (LeetCode 面试经典 150 题) 135. 分发糖果 (贪心)
  • 【Springai】 2指定模型的三种方式(Ollama)
  • 【SpringAI】3.结构化输出,初级版
  • Spring Boot + ONNX Runtime模型部署
  • springboot中多个定时任务(@Scheduled)如何互不影响
  • 大数据(4)-spark
  • Webpack优化详解
  • Unity性能优化-渲染模块(1)-CPU侧(2)-DrawCall优化(2)GPUInstancing
  • 浪潮和曙光服务器的ipmi配置教程
  • 图灵完备之路(数电学习三分钟)----开关与延迟线