ASP.NET Core令牌桶限流如何改写为长尾?
- 内容介绍
- 文章标签
- 相关推荐
本文共计960个文字,预计阅读时间需要4分钟。
在限流时,通常会对每秒或每分钟的请求数量进行限制。简单来说,一般会采用计数器算法,这种算法实现相对简单,效率也很高,但无法应对突发的大流量。例如,限流每秒100次请求,在大多数情况下是足够的。
在限流时一般会限制每秒或每分钟的请求数,简单点一般会采用计数器算法,这种算法实现相对简单,也很高效,但是无法应对瞬时的突发流量。
比如限流每秒100次请求,绝大多数的时间里都不会超过这个数,但是偶尔某一秒钟会达到120次请求,接着很快又会恢复正常,假设这种突发的流量不会对系统稳定性带来实质性的影响,则可以在一定程度上允许这种瞬时的突发流量,从而为用户带来更好的可用性体验。这就是令牌桶算法的用武之地。
该算法的基本原理是:有一个令牌桶,容量是X,每Y单位时间会向桶中放入Z个令牌,如果桶中的令牌数超过X,则丢弃令牌;请求要想通过首先需要从令牌桶中获取一个令牌,获取不到令牌则拒绝请求。可以看出对于令牌桶算法X、Y、Z这几个数的设定特别重要,Z应该略大于绝大数时候的Y单位时间内的请求数,系统会长期处于这个状态,X可以是系统允许承载的瞬时最大请求数,系统不能长时间处于这个状态。
这里介绍一个ASP.NET Core的中间件来满足令牌桶限流需求: FireflySoft.RateLimit.AspNetCore 。使用步骤如下:
1、安装Nuget包
有多种安装方式,选择自己喜欢的就行了。
本文共计960个文字,预计阅读时间需要4分钟。
在限流时,通常会对每秒或每分钟的请求数量进行限制。简单来说,一般会采用计数器算法,这种算法实现相对简单,效率也很高,但无法应对突发的大流量。例如,限流每秒100次请求,在大多数情况下是足够的。
在限流时一般会限制每秒或每分钟的请求数,简单点一般会采用计数器算法,这种算法实现相对简单,也很高效,但是无法应对瞬时的突发流量。
比如限流每秒100次请求,绝大多数的时间里都不会超过这个数,但是偶尔某一秒钟会达到120次请求,接着很快又会恢复正常,假设这种突发的流量不会对系统稳定性带来实质性的影响,则可以在一定程度上允许这种瞬时的突发流量,从而为用户带来更好的可用性体验。这就是令牌桶算法的用武之地。
该算法的基本原理是:有一个令牌桶,容量是X,每Y单位时间会向桶中放入Z个令牌,如果桶中的令牌数超过X,则丢弃令牌;请求要想通过首先需要从令牌桶中获取一个令牌,获取不到令牌则拒绝请求。可以看出对于令牌桶算法X、Y、Z这几个数的设定特别重要,Z应该略大于绝大数时候的Y单位时间内的请求数,系统会长期处于这个状态,X可以是系统允许承载的瞬时最大请求数,系统不能长时间处于这个状态。
这里介绍一个ASP.NET Core的中间件来满足令牌桶限流需求: FireflySoft.RateLimit.AspNetCore 。使用步骤如下:
1、安装Nuget包
有多种安装方式,选择自己喜欢的就行了。

