令牌桶算法和漏桶算法
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
令牌桶算法不断将令牌丢进桶里一个请求能不能得到处理就看这个请求能不能得到桶里的令牌也就是说得不到令牌的请求就不能被处理
r表示令牌存放到桶里的速度(令牌存放到桶里有两种方法每秒存放5个或者每搁4秒存放20个)令牌放到桶里面的速度是匀速的
W表示当前桶内有多少个令牌
C表示桶的容量
b表示当前的请求
at表示处理完上一个请求的时间点
bt表示当前请求过来的时间点
那现在要做的就是判断当请求b过来的时候桶里面是否有令牌
bt=now(); //当前请求过来的时间
Wb=(bt-at)*r //上一个请求处理完到当前请求过来的这段时间内桶内新增的令牌数
W=min(W+Wb,C)//桶内的实际令牌数量
if(W>=1)
{
W--;
return true;
}
else//令牌桶里没有令牌
{
return false;
}
漏桶算法请求能否被执行是看这个请求能否被放到桶里面
没有令牌的概念了把请求放到桶里面
b表示当前要处理的请求
at表示处理完上一个请求的时间点
C表示木桶的总容量
W 当前桶内剩余可以容纳的请求数
r处理请求的速度
bt=now(); //当前请求过来的时间
Wb=(bt-at)*r //上一个请求处理完到当前请求过来的这段时间内处理掉的请求数
W=MAX(W-Wb,0)//桶内剩余的请求数
if(W<C)//剩余的请求数小于桶的容量
{
W++;
return true;
}
else//桶已经满了
{
return false;
}