当前位置:首页 » 《随便一记》 » 正文

常见的限流算法_荷兰豆_的博客

25 人参与  2021年11月20日 09:23  分类 : 《随便一记》  评论

点击全文阅读


文章目录

      • 1、计数器
      • 2、漏桶
      • 3、令牌桶
      • 2.1 网关层限流
      • 降级
      • 熔断

为什么要限流?

后台服务能力优先,如果不进行限流的话,仍有全部流量打到服务器上,可能会引起服务器瘫痪。当我们进入网站,网站显示”系统繁忙,请稍后再试“时,就是在进行限流。

可以根据性能测试区评估限流的设置,例如测试最大连接数,QPS数。

说明,这些算法实际上并不是一个具体实现,这只是一种模型,有很多种实现方式。

1、计数器

计数器限流方式比较粗暴,一次访问设置一次计数,在系统内设置每秒的访问量,超过访问量的访问直接丢弃,实现访问限流.

比如可以使用redis进行1S的100次访问计数,来一个流量100-1当数量到达0时,拒绝后续的访问.也可以不拒绝而是将请求放入缓存队列,根据实际业务情况选择不同的实现方式.

缺点:在开始的时间,访问量被使用完后,1S内会有长时间的真空期是处于接口不可用的状态的.

2、漏桶

在这里插入图片描述
优点就是,有一定的缓存能力。

缺点就是,桶满时,如果有新的请求进入,会丢弃该数据。长时间桶满,则会影响响应速率。

3、令牌桶

在这里插入图片描述
令牌桶和漏桶不同的地方在于:

  • 令牌桶可以自己控制生成令牌的速率,例如高峰期就可以多生成一些令牌来满足客户端的需求
  • 还可以缓存数据

若发现一直是出于高峰期,可以考虑扩大令牌桶

优势:令牌桶可以根据自己控制令牌生成的速率,还可以缓存数据。

2.1 网关层限流

这种方式与前面提及的漏斗相似,或者说这二者本身就是一样的,不过漏洞算法是种模型,而网关层限流的话更像是一种具体实现。
在这里插入图片描述
从图中可以发现,这基本就是我们日常请求的一个流程:

  1. 用户流量从网关层到后台服务
  2. 后台服务承接流量,调用缓存获取数据
  3. 缓存中无数据的情况下,则回源头查询数据库。

该模型也被称为【漏斗模型】,因为流量自上而下是递减的,在网关层聚集了最为密集的用户访问请求,其次才是后台服务,经过服务验证之后,刷掉一部分错误请求,剩下的请求落到缓存中,如果没有缓存的情况下才是最终的数据库层,所以数据库请求频次是最低的。

在此,在补充两个概念——【降级】、【熔断】

降级

什么是降级?

降级就是当服务器压力剧增时,为了保证核心业务功能模块的高可用,降低非核心模块的功能。比如淘宝双十一时,在零点双十一时,会关闭确认订单,评价等非核心模块,保证秒杀功能的高可用。

熔断

在依赖的外部接口出现故障的情况下,会设置断绝和外部接口的关系。

服务器A依赖于服务器B的对外接口,在某个时刻服务器B的接口出现异常,响应时间极其的慢,可是此接口会影响到服务器的整个运作,那么这个时候,服务器A就可以在请求服务器B该接口的时候,默认设置返回错误。


点击全文阅读


本文链接:http://zhangshiyu.com/post/31057.html

令牌  缓存  请求  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1