专注Java教育14年 全国咨询/投诉热线:444-1124-454
赢咖4LOGO图
始于2009,口口相传的Java黄埔军校
首页 学习攻略 Java学习 Java算法学习教程-带你了解限流算法

Java算法学习教程-带你了解限流算法

更新时间:2019-09-24 09:48:13 来源:赢咖4 浏览2244次



  大部分时候,一个系统的能力是有限的,一些对外提供的接口需要做限流控制,不然在请求突增的时候,会导致系统直接崩溃;所以当流量请求超过规定的数值,我们就要对请求进行引流或拒绝。


  说到限流,那就要提到限流算法,常用的有【漏桶算法】和【令牌桶算法】两种限流算法。


  漏桶算法


  漏桶算法,顾名思义,漏桶可以储水,只有一个固定大小的出口;漏桶算法中,可以把一个队列看做是漏斗,如果队列(漏桶)满了,那么数据包(水)就被被丢弃。漏桶算法可以控制数量的输出速度,平滑突发流量,最终实现“提供稳定的输出”。

image.png

  令牌桶算法


  如果把漏斗算法是看做是限制出水的速度,那么令牌通算法就是在进水的时候就做了限制。


  令牌通算法的原理,是以一个恒定的速度往桶里放入请求,如果请求需要被处理,则需要先获得一个令牌,当桶里没有令牌可取的时候,则拒绝继续放入请求。


  Guava包中的RateLimiter,是令牌桶算法的解决方案之一,Google出品,用起来非常的简单,推荐看看源码。

image.png

  动态使用漏桶算法和令牌桶算法


  我们曾经有个项目用到了令牌桶算法,就是使用的Guava包中的RateLimiter,但是我们增加了一些改进:


  令牌桶中令牌的数量,初始设置一个较低的值,比如10,表示每秒最多发送10次请求。


  监控对方应用的资源使用情况。


  当对方应用CPU/内存等数值,处在一个较低的值时,动态增加令牌数量。(监控程序调用系统的一个接口,修改令牌的数量为当前的两倍,即10个变成20个)


  当对方应用CPU/内存等数值,处在一个较高的值时,动态降低令牌的数量。


  以上就是赢咖4java培训机构小编介绍的“Java算法学习教程-带你了解限流算法”的内容,希望对大家有帮助,更多java最新资讯请继续关注赢咖4java培训机构官网,每天会有精彩内容分享与你。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>