限流算法
限流器是分布式系统中的一个关键组件。通常,我们可以用它来防止DDoS或恶意请求。
在这篇文章中,我们将介绍几种可用于限流的算法。
令牌桶
令牌桶是一个具有预定义容量的容器。令牌以预设的速率定期放入桶中。一旦桶满了,就不会再添加令牌。如图所示,令牌桶容量为4。填充器每秒向桶中放入2个令牌。一旦桶满了,多余的令牌就会溢出。
令牌桶可以处理突发请求,并且可以确保限制不会超过预设的容量。
漏桶
漏桶类似于令牌桶,但它的行为像一个FIFO队列。漏桶有一个处理速率,表示它每秒可以处理多少请求。当请求到来时,它会首先检查队列是否已满,如果没有,将请求添加到队列中,否则丢弃请求。
队列中的请求会以固定的时间间隔从队列中拉出并处理。
漏桶的一个问题是它以FIFO方式处理,如果队列被旧请求填满,新请求将被限流。