算法和数据结构 限流算法

1、计数器算法

限制单位时间内(例如一秒)处理的请求数,比如qps。在每个单位时间的起点,请求从1开始计数,超过限制的请求会被丢弃。这种算法的缺点是,对于请求分布不均匀的情况,容易产生突刺,对服务造成很大压力。

 

2、漏桶算法 

可以消除突刺。用一定容量的队列(即漏桶),缓存请求,超过容量的请求被丢弃;用线程池,以一定的速率,从队列中获取请求,进行处理。这样即使请求进来的速率不稳定,请求被处理的速率也可以保持稳定。这种算法的缺点是,没法应对突发流量。 

 

3、令牌桶算法

用一定容量的队列(即令牌桶),缓存令牌,超过容量的令牌被丢弃;以一定的速率往队列中放置令牌;拿到令牌的请求会被处理。个人认为,令牌桶算法跟计数器算法都会产生突刺。 

posted @ 2020-03-16 17:41  happyyoung  阅读(164)  评论(0编辑  收藏  举报