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

常见限流算法

限流是指在高并发、大流量请求的情况下,限制新的流量对系统的访问,以保证系统服务的安全性。常见的限流算法及其详细介绍如下:

计数器算法(Fixed Window Counter)

  • 原理:使用一个固定时间窗口内的计数器来记录请求的数量。若计数器超过设定的阈值,则拒绝后续请求。
  • 实现:定义一个时间窗口(如1秒),在窗口内维护一个计数器。接收到请求时,计数器加1。若计数器超过阈值,则限流;否则允许。
  • 特点:简单易实现,适用于低精度的限流需求。
  • 局限:窗口边界处可能产生突发流量。例如,当前窗口接近阈值,新窗口开始时流量激增。

滑动窗口计数器(Sliding Window Counter)

  • 原理:将固定窗口进一步细分为更小的时间片段,根据当前时间的滑动,将多个时间片段内的请求数量进行累加。
  • 实现:将时间窗口(如1秒)分为多个时间片段(如100毫秒),使用一个队列存储各时间片段的计数。请求时移除过期的时间片段,并累计最新的请求数。
  • 特点:缓解固定窗口算法的边界问题,流量控制更加平滑。
  • 局限:实现较为复杂,存储和计算开销增加。

漏桶算法(Leaky Bucket)

  • 原理:系统按固定速率处理请求,若队列满,则丢弃新请求。可以平滑突发流量,将其转化为稳定输出。
  • 实现:维护一个队列表示漏桶,按固定速率处理请求。
  • 特点:控制请求处理速率。
  • 局限:丢弃超量请求可能导致用户体验下降。

令牌桶算法(Token Bucket)

  • 原理:系统按固定速率向桶中加入“令牌”,每次请求需要消耗一个令牌,若令牌不足,则拒绝请求。
  • 实现:维护一个桶存储令牌,设定令牌生成速率和桶容量。若桶中有足够令牌,则允许请求;否则拒绝。
  • 特点:支持突发流量处理(通过允许提前消费桶中积累的令牌),限流效果较平滑。
  • 局限:相比漏桶算法实现稍复杂。

基于时间戳的限流算法

  • 原理:记录每个请求的时间戳,根据当前时间窗口计算历史请求数量,决定是否限流。
  • 实现:使用一个有序集合(如Redis的zset)存储时间戳。请求时清理超出时间窗口的过期时间戳,并统计剩余时间戳数量。
  • 特点:精度高,适合精细化限流。
  • 局限:存储开销大,尤其在高并发下可能性能较低。

分布式限流算法

  • 原理:在分布式系统中,利用Redis等缓存系统的特性,实现跨节点的流量管理。
  • 实现:将限流逻辑分布到不同节点,按哈希分配请求。通过分布式锁协调各节点的限流操作。
  • 特点:支持跨节点的流量管理。
  • 局限:需要额外的分布式协调开销。

基于队列的限流算法

  • 原理:通过消息队列(如RabbitMQ、Kafka)对流量进行控制。
  • 实现:请求先进入消息队列,消费者以固定速率处理队列中的请求。
  • 特点:适合异步处理场景,天然支持流量削峰。
  • 局限:实时性较差。

在实际应用中,常根据业务需求结合多种限流算法。例如,漏桶算法控制请求速率,令牌桶算法允许短时间内的突发流量,Redis滑动日志实现分布式限流等。选择合适的限流算法,可以在保护系统的同时,尽可能提高流量的利用率和用户体验。

相关文章:

  • Shell编程概述与Shell变量
  • 建筑兔零基础自学python记录39|实战词云可视化项目——章节分布10(上)
  • 【Flink银行反欺诈系统设计方案】4.Flink CEP 规则表刷新方式
  • Redis相关面试题
  • Mybatis集合嵌套查询,三级嵌套
  • JAVA与计算机网络基础
  • 生物信息学与计算生物学:各自概念、主要内容、区别与联系、发展展望?
  • 微服务的春天:基于Spring Boot的架构设计与实践
  • 如何把GUI做的像Web一样美观:Python PyQt6特性介绍,如何结合QSS美化
  • C++中`const` 和 `static` 关键字详解
  • 34.二叉树进阶3(C++STL 关联式容器,set/map的介绍与使用)
  • 【mysql系】mysql启动异常Can‘t create test file localhost.lower-test
  • 【大模型基础_毛玉仁】1.4 语言模型的采样方法
  • Excel中COUNTIF用法解析
  • 【笔记】记一次easyExcel中注解ExcelProperty映射字段赋值无效问题
  • dify 工作流 迭代
  • ArcGIS操作:15 计算点的经纬度,并添加到属性表
  • NDT 代价函数
  • 音视频入门基础:RTP专题(15)——FFmpeg源码中,获取RTP的视频信息的实现
  • K8S学习之基础十一:k8s中容器钩子
  • 上海这个咖啡文化节首次“走出去”,率本土品牌亮相英国伦敦
  • 小米汽车回应部分SU7前保险杠形变
  • 美国贸易政策|特朗普模式:你想做交易吗?
  • 习近平向多哥新任领导人致贺电
  • 病重老人被要求亲自取钱在农业银行门口去世?株洲警方介入
  • 由我国牵头制定,适老化数字经济国际标准发布