限流==保险丝策略,可借助框架如spring cloud中Hystrix组件实现。今天介绍使用guava RateLimiter 类实现接口限流。
常见限流算法
漏桶算法
漏桶(Leaky Bucket)算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水(接口有响应速率),当水流入速度过大会直接溢出(访问频率超过接口响应速率),然后就拒绝请求,可以看出漏桶算法能强行限制数据的传输速率.
两个变量,一个是桶的大小即支持流量突发增多时可以存多少的水(burst),另一个是水桶漏洞的大小(rate),伪代码如下:
double rate; // leak rate in calls/s
double burst; // bucket size in calls
long refreshTime; // time for last water refresh
double water; // water count at refreshTime
refreshWater() {
long now = getTimeOfDay();
//水随着时间流逝,不断流走,最多就流干到0.
water = max(0, water - (now - refreshTime) * rate);
refreshTime = now;
}
bool permissionGranted() {
refreshWater();
if (water < burst) {
// 水桶还没满,继续加1
water++;
return true;
}
return false;
}
令牌桶算

本文介绍了如何使用Guava的RateLimiter进行接口限流,包括限流算法(漏桶和令牌桶)、RateLimiter的工作原理及应用,并展示了其主要API的使用。通过设置合适的速率,RateLimiter能够有效地控制接口的访问速度,防止过载。
最低0.47元/天 解锁文章
2602

被折叠的 条评论
为什么被折叠?



