更新时间:2019-09-24 09:48:13 来源:极悦 浏览2357次
大部分时候,一个系统的能力是有限的,一些对外提供的接口需要做限流控制,不然在请求突增的时候,会导致系统直接崩溃;所以当流量请求超过规定的数值,我们就要对请求进行引流或拒绝。
说到限流,那就要提到限流算法,常用的有【漏桶算法】和【令牌桶算法】两种限流算法。
漏桶算法
漏桶算法,顾名思义,漏桶可以储水,只有一个固定大小的出口;漏桶算法中,可以把一个队列看做是漏斗,如果队列(漏桶)满了,那么数据包(水)就被被丢弃。漏桶算法可以控制数量的输出速度,平滑突发流量,最终实现“提供稳定的输出”。
令牌桶算法
如果把漏斗算法是看做是限制出水的速度,那么令牌通算法就是在进水的时候就做了限制。
令牌通算法的原理,是以一个恒定的速度往桶里放入请求,如果请求需要被处理,则需要先获得一个令牌,当桶里没有令牌可取的时候,则拒绝继续放入请求。
Guava包中的RateLimiter,是令牌桶算法的解决方案之一,Google出品,用起来非常的简单,推荐看看源码。
动态使用漏桶算法和令牌桶算法
我们曾经有个项目用到了令牌桶算法,就是使用的Guava包中的RateLimiter,但是我们增加了一些改进:
令牌桶中令牌的数量,初始设置一个较低的值,比如10,表示每秒最多发送10次请求。
监控对方应用的资源使用情况。
当对方应用CPU/内存等数值,处在一个较低的值时,动态增加令牌数量。(监控程序调用系统的一个接口,修改令牌的数量为当前的两倍,即10个变成20个)
当对方应用CPU/内存等数值,处在一个较高的值时,动态降低令牌的数量。
以上就是极悦java培训机构小编介绍的“Java算法学习教程-带你了解限流算法”的内容,希望对大家有帮助,更多java最新资讯请继续关注极悦java培训机构官网,每天会有精彩内容分享与你。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习