1、计数器算法
限制单位时间内(例如一秒)处理的请求数,比如qps。在每个单位时间的起点,请求从1开始计数,超过限制的请求会被丢弃。这种算法的缺点是,对于请求分布不均匀的情况,容易产生突刺,对服务造成很大压力。
2、漏桶算法
可以消除突刺。用一定容量的队列(即漏桶),缓存请求,超过容量的请求被丢弃;用线程池,以一定的速率,从队列中获取请求,进行处理。这样即使请求进来的速率不稳定,请求被处理的速率也可以保持稳定。这种算法的缺点是,没法应对突发流量。
3、令牌桶算法
用一定容量的队列(即令牌桶),缓存令牌,超过容量的令牌被丢弃;以一定的速率往队列中放置令牌;拿到令牌的请求会被处理。个人认为,令牌桶算法跟计数器算法都会产生突刺。