以固定的速率向桶中加入令牌,达到上限为止。拿到令牌的请求继续往下执行,没拿到令牌的请求则根据具体的拒绝策略来处理。拒绝策略可以类似于线程池一样,例如:进阻塞队列、抛弃等等。
如果配置多种限流策略,则可以使用责任链设计模式,将每种限流策略作为一个节点,请求只有顺利通过每个节点的规则才能够继续往下执行业务逻辑。
以固定的速率离开桶,限制桶的流出速度,其他的跟令牌桶一样。
假如一个时间窗口能够通过n个请求,将这个窗口划分为m小窗口,每个小窗口只能通过n/m个请求,每次滑动一个小窗口,可以解决窗口边界的突刺情况,让流量尽可能平稳。
分布式限流可以达到一个全局的限流控制,一般是增加一个中间组件,这个组件是全局且中心化的,以此达到全局限流,比如:nginx就可以。我们需要考虑是否会将这个中心组件打垮,尽量减少请求这个中心组件的频率。比如,每个服务每次申请50个令牌,然后本地限流,令牌使用完再向中心组件申请。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。