1、令牌桶算法
令牌桶算法是比较常见的限流算法之一,大概描述如下:
1)、所有的请求在处理之前都需要拿到一个可用的令牌才会被处理;
2)、根据限流大小,设置按照一定的速率往桶里添加令牌;
3)、桶设置最大的放置令牌限制,当桶满时、新添加的令牌就被丢弃活着拒绝;
4)、请求达到后首先要获取令牌桶中的令牌,拿着令牌才可以进行其他的业务逻辑,处理完业务逻辑之后,将令牌直接删除;
5)、令牌桶有最低限额,当桶中的令牌达到最低限额的时候,请求处理完之后将不会删除令牌,以此保证足够的限流;
![img_1a4621db0d66b02e6185b7c520e512fc.png](https://yqfile.alicdn.com/img_1a4621db0d66b02e6185b7c520e512fc.png?x-oss-process=image/resize,w_1400/format,webp)
image.png
2、漏桶算法
漏桶算法其实很简单,可以粗略的认为就是注水漏水过程,往桶中以一定速率流出水,以任意速率流入水,当水超过桶流量则丢弃,因为桶容量是不变的,保证了整体的速率
![img_a858d26d76ba57caba9584c0dd79f2c5.png](https://yqfile.alicdn.com/img_a858d26d76ba57caba9584c0dd79f2c5.png?x-oss-process=image/resize,w_1400/format,webp)
image.png
上述业务逻辑参考张开涛的《亿级流量网站架构核心技术》一书中,在此推荐这本书