限流器是服务中非常重要的一个组件,在网关设计、微服务、以及普通的后台应用中都比较常见。它可以限制访问服务的频次和速率,防止服务过载,被刷爆。 限流器的算法比较多,常见的比如令牌桶算法、漏斗算法、信号量等。本文主要介绍基于漏斗算法的一个限流器的实现。文本也提供了其他几种开源的实现方法。 基于令牌桶的限流器实现 在golang 的官方扩展包 time 中(github/go/time),提供了一个基于令牌桶算法的限流器的实现。 原理 令牌桶限流器,有两个概念: 令牌:每次都需要拿到令牌后,才可以访问 桶:有一定大小的桶,桶中最多可以放一定数量的令牌 放入频率:按照一定的频率向通里面