常见的限流算法


为什么要限流?

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

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

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

1、计数器

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

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

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

2、漏桶

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

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

3、令牌桶

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

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

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

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

2.1 网关层限流

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

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

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

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

降级

什么是降级?

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

熔断

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

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

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Hystrix提供了限流功能,用于在高并发访问下控制系统资源。在Spring Cloud架构中,可以在网关和每个微服务中启用Hystrix进行限流处理。其中,Hystrix支持两种限流算法:线程隔离和信号量隔离。 线程隔离模式下的限流算法是通过控制调用线程允许请求HystrixCommand.GetFallback()的最大数量来实现的。可以通过配置属性hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds来设置超时时间,以及hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests来设置允许的最大并发请求数量。如果降级线程的并发数超过最大限制数,则会抛出HystrixRuntimeException异常。 信号量隔离模式下的限流算法是通过控制信号量的数量来实现的。可以通过配置属性hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests来设置允许的最大并发请求数量。如果超过最大限制数,则会直接抛出HystrixRuntimeException异常。 综上所述,Hystrix提供了线程隔离和信号量隔离两种限流算法,可以根据具体场景选择适合的算法来进行限流处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Hystrix 限流、超时、熔断和降级](https://blog.csdn.net/zsh2050/article/details/114878025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值