1,计数器算法
在访问接口前,设置一个计数器,来记录当前的流量,没进来一个流量,计数器+1,当计数器达到预定阈值,限流就开始了,超出阈值的流量就进不来。
2,令牌桶算法
判断当b请求过来时桶内是否还有令牌
//当前请求b过来的时间
bt = now();
//在当前b请求号处理上一次请求的这一段时间内桶内新增 的令牌数量
Wb = (bt-a)*r;
//当前令牌桶内的数量
W = min(W+Wb,c);
if(W > q){
//当前令牌桶内还有令牌
W–;
return true;
}else{
//当前令牌桶内没有令牌
return false
}
3,漏桶算法
在处理b请求时的时间:
bt = now();
漏桶的目前流量:
//在这段时间内处理掉的流量
Wb = (bt - a)*r
//当前桶内剩余的流量
W = max(W - Wb,0)
if(W < C){
//当前b请求可以进入桶内
W++;
return true;
}else{
//桶满了,拒绝当前请求
return false
}
比较漏桶以及令牌桶:
1,漏桶:请求进来的速度时不固定的,但是处理请求的速度时固定的,适用于整流,把大流量整成平滑的流量。
2,令牌桶:存放令牌的速度是相同的,但是处理的速度是不固定的。适用于突发性的大流量。