欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 高并发项目限流有哪些方式、原理及优缺点?

高并发项目限流有哪些方式、原理及优缺点?

2025/4/24 16:53:48 来源:https://blog.csdn.net/luohuahui2012/article/details/144700387  浏览:    关键词:高并发项目限流有哪些方式、原理及优缺点?

限流是高并发项目中的一种重要策略,它的主要含义是对系统的流量进行限制和控制,以防止因流量过大而导致系统过载、崩溃或响应速度下降。

在高并发项目中,限流的目的是为了保护系统的稳定性和可靠性,确保系统能够在可接受的性能范围内正常运行。

限流常用于:

电商平台的秒杀活动、数据库连接池管理、API接口调用、热点事件(秒杀、微博热搜)、恶意的刷单等场景

常用的限流算法有:

  1. 计数器(固定窗口)算法

  2. 滑动窗口算法

  3. 漏桶算法

  4. 令牌桶算法

计数器(固定窗口)算法

原理:计数器算法是限流算法中最简单的一种。它通过维护一个计数器来记录一定时间窗口内的请求数量。每当有新的请求进来时,计数器加一;当计数器的值超过设定的阈值时,触发限流策略。

图片

优点:实现简单,资源消耗少;实时性好,能够快速做出是否允许请求的判断;对于单机应用或分布式系统中使用原子类(如Java中的AtomicInteger)或Redis等工具,实现起来非常方便。

缺点:存在临界问题,即在时间窗口的边界处,可能会瞬间超过限流阈值。

应用场景:适用于对实时性要求较高、且流量较为平稳的场景,如数据库连接池、线程池等资源的限流。

滑动窗口算法

原理:滑动窗口算法是对固定窗口算法的改进。它将固定的时间窗口再细分为多个小窗口,每个小窗口有自己的计数器。随着时间的推移,窗口会按照固定的时间间隔向右滑动,删除最老的小窗口,并统计当前所有小窗口内的请求数量来判断是否触发限流。

图片

优点:减少了临界值带来的并发超过阈值的问题,限流的统计更加精确。

缺点:实现相对复杂,需要更多的存储空间来记录每个小窗口的计数器。

应用场景:适用于需要更精确限流统计的场景,如互联网业务中的接口调用限流。

漏桶算法

原理:漏桶算法通过一个固定容量的桶来控制请求的速率。请求以任意速率进入桶中,但桶以固定的速率将请求流出。当桶满时,新来的请求将被丢弃或等待。

优点:能够以固定的速率控制流量,稳定性较好;可以削峰填谷,使请求匀速平滑地流出。

缺点:无法应对突发流量的来袭;处理请求会有延迟,不符合互联网业务低延时的要求。

应用场景:适用于对流量整形有较高要求的场景,如保护下游系统不被瞬时高流量冲垮。

图片

令牌桶算法

原理:令牌桶算法通过一个存放固定容量令牌的桶来控制请求的速率。系统以固定速率往桶里添加令牌,当有请求到来时,尝试从桶中获取令牌进行访问。如果桶中有足够的令牌,则允许访问并扣减相应数量的令牌;否则拒绝访问。

优点:能够允许一定程度的突发流量;在流量低峰时积累令牌,高峰时使用令牌进行处理。

缺点:实现较为复杂;如果系统上线时没有预热,可能会出现由于桶中没有令牌而导致请求被误杀的情况。

应用场景:适用于需要应对突发流量的场景,如网关层面的限流、接口调用的限流等

图片

总结:

在高并发项目中选择哪种限流方式取决于具体的业务场景和需求。

例如,对于需要实时性和精确限流的场景,可以考虑使用滑动窗口算法;而对于需要应对突发流量并允许一定程度上的流量突发的场景,令牌桶算法可能更为合适。在实际应用中,还可以根据具体情况对限流算法进行调整和优化以满足特定的需求。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com