文章目录加载中

限流算法-漏桶算法

# 算法介绍

漏桶算法能够实现平滑流量,防止过大流量打到后端服务,导致崩溃。

对于不确定的流入速度,经过漏桶的处理,流出的速度是稳定。

# 变量描述

C:桶的总容量

r:水漏走的速度

a:上个请求

at:上个请求进来的时间

w:处理完上个请求后,桶里的总量

b:新请求

bt:新请求进来的时间

# 算法实现

let R = 10; // 每ms允许10个流量,QPS是10000
let C = 20000; // 桶容量上限是20000个请求

let at = Date.now();
let w = C;

function loutong() {
  const bt = Date.now();
  const wb = (bt - at) * R; // a请求和b请求之间,漏桶中溜走的水
  w = max(w - wb, 0); // 当前桶中还没消耗的水
  at = bt;

  if (w < C) {
    ++w;
    return true; // 放过请求
  } else {
    return false;
  }
}
本文来自心谭博客:xin-tan.com,经常更新web和算法的文章笔记,前往github查看目录归纳:github.com/dongyuanxin/blog