常见限流算法以及应用

常见的限流算法大致可以分为四种:string + 常规计数,滑动窗口,令牌桶以及漏桶。

  1. 计数器算法:string + 计数保证固定窗口内的请求量是一定的,但是如果当前窗口过期,流量出现突增的情况,可能导致某个时间段内的请求量不符合要求。
  2. 滑动窗口算法:zset可以保证单位时间内的请求数量,避免流量突刺的情况。但是如果窗口过大且请求量大,会占用大量 Redis内存;如果数量量多大,插入删除和范围查询请求量都可能比较耗时。
  3. 令牌桶算法缺点:需要合理控制放入令牌的数量和桶的容量。如果令牌生成速率过快,会使得服务器需要处理大量的请求,增加服务器的负载;如果生成过慢则请求都需要获取令牌,导致延时过大,影响用户体验。
  4. 漏桶算法因为是以固定的速率处理请求,所以对于流量徒增的情况会导致大量的请求延迟处理,流量少的情况则无法充分利用服务器资源。

每种限流算法都有优缺点,所以要根据不同场景合理的使用它们。当然,如果第三方框架已经封装好了这些算法,做到开箱即用,灵活调整流量阈值,这样无疑对我们工作还是学习用都是非常好的。比如 guava 的 ratelimiter 就使用到了令牌桶算法,并能够做到灵活调整单位时间内生成的令牌数量。在企业里面,单机限流就可以使用 ratelimiter。

企业应用:集群 + 单机的限流模式

当需要对接下游的服务时,一般都会有单位时间内调用次数的限制,这时候就需要限流了。而企业里面一般都部署多台机器,形成一个集群,使用集群限流可以保证集群整体的 qps 不会超出负载,配合合理的负载均衡算法可以一定程度上保证流量倾斜导致单机负载过大的情况。同时使用单机限流进行兜底,这样的限流方式可以确保整体服务的稳定性和可用性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值