分布式 接口限流(漏桶/令牌桶算法)

简介:每一个对外提供的API接口都是需要做流量控制的,不然会导致系统直接崩溃,如果API上的流量请求超过核定的数值,我们就得对请求进行分流或者直接拒绝等操作。

一、限流

  1. 作用:由于业务应用系统的负载能力有限,为了防止非预期的请求对系统压力过大而拖垮业务应用系统;

  2. 大流量控制策略:分流、降级、限流;

  3. 限流策略:客户端限流、Nginx限流、服务端限流和数据库限流;

  4. 限流算法:漏桶算法和令牌桶算法,经常用在流量整形或速率限制中。

 

二.、漏桶算法(Leaky Bucket)

  1. 原理:把请求比作水,水先进入漏桶里,漏桶以一定的速度出水,当水注入速率超过出水速率时就会导致水直接溢出,然后就拒绝请求服务;

  2. 特点:能限制数据的传输速率,平滑网络上的突发流量,但不适合于有突发特征的流量场景;

  3. 应用场景:必须读写分离的情况下,限制读取的速率。

 

三、令牌桶算法(Token Bucket)

  1. 原理:系统会以一个恒定的速度往桶里放入令牌,如果请求需要被处理,则先需要从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务;

  2. 特点

    A. 在能够限制数据的平均传输速率外,还允许某种程度的突发传输;

    B. 与漏桶算法是相反的,一个是“进水”,一个是“出水”;

  3. 应用场景:必须读写分离的情况下,限制写的速率。

 

四、限流工具

  1. 工具类:RateLimiter;  

  2. 基于Redis实现;

  3. 使用Semphore进行并发控制。

 

可参考:使用Redis进行API防刷限流

    开放API接口签名验证

posted @   如幻行云  阅读(1408)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示