什么是限流: 限流指的是通过限制到达系统的并发请求数量,保证系统能够正常响应部分用户请求,而对于超过限制 的流量,则只能通过拒绝服务的方式保证整体系统的可用性。限流策略一般部署在服务的入口层,比如 API 网关中,这样可以对系统整体流量做塑形。而在微服务架构中,你也可以在 RPC 客户端中引入 限流的策略,来保证单个服务不会被过大的流量压垮。
限流算法:
固定窗口与滑动窗口的算法
漏桶算法与令牌筒算法
漏桶算法的原理很简单,它就像在流量产生端和接收端之间增加一个漏桶,流量会进入和暂存到漏桶里面,
而漏桶的出口处会按照一个固定的速率将流量漏出到接收端(也就是服务接口)。
另一种令牌桶算法的基本算法是这样的:
如果我们需要在一秒内限制访问次数为 N 次,那么就每隔 1/N 的时间,往桶内放入一个令牌;
在处理请求之前先要从桶中获得一个令牌,如果桶中已经没有了令牌,那么就需要等待新的令牌或者直接拒绝服务;
桶中的令牌总数也要有一个限制,如果超过了限制就不能向桶中再增加新的令牌了。
这样可以限制令牌的总数,一定程度上可以避免瞬时流量高峰的问题。
此文章为6月Day11学习笔记,内容来源于极客时间《高并发系统设计 40 问》