当前位置: 首页 > 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.dtcms.com/a/262867.html

相关文章:

  • C++ cstring 库解析:C 风格字符串函数
  • Python 数据分析与机器学习入门 (三):Pandas 数据导入与核心操作
  • Java基础(六):数组全面解析
  • RF100:多领域目标检测基准数据集(猫脸码客第284期)
  • 【时时三省】vectorcast使用教程
  • PIXHAWK(ardupilot4.52)上传航点的bug
  • Java-day30-多线程02
  • 大模型——怎么让 AI 写出好看有设计感的网页
  • 链表题解——移除链表元素【LeetCode】
  • 中国电子学会等级考试Python编程真题+答案+解析
  • Spring 依赖注入:官方推荐方式及最佳实践
  • MySQL索引失效场景分析
  • 数据结构笔记5:环形链表的数理分析
  • mysql 小版本升级实战分享
  • 力扣 hot100 Day30
  • 开疆智能CCLinkIE转Canopen网关连接台达伺服驱动器配置案例
  • 自己电脑搭建本地服务器并实现公网访问,内网也能提供互联网连接使用
  • 七层负载均衡和四层负载均衡
  • 打卡day58
  • 数据库表关系设计详解:一对一、一对多、多对多及自关联
  • ShardingSphere完成MySQL集群部署
  • Vue3静态文档资源展示的实现和使用总结
  • 国产车哪款有远程代驾功能?远程代驾+自动驾驶
  • DDoS攻击及其防护方案
  • 超大js文件多层级引用缓存在网络较差的时候无法调用使用问题
  • Rust C++ OpenCV kafka-rs实践
  • 生成式人工智能实战 | 变分自编码器(Variational Auto-Encoder, VAE)
  • 二刷 苍穹外卖day09
  • macos 安装 xcode
  • 借助 KubeMQ 简化多 LLM 集成