国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - ASP.NET Core中使用令牌桶限流的實(shí)現(xiàn)

ASP.NET Core中使用令牌桶限流的實(shí)現(xiàn)

2021-12-10 15:59波斯碼 ASP.NET教程

這篇文章主要介紹了ASP.NET Core中使用令牌桶限流的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在限流時(shí)一般會限制每秒或每分鐘的請求數(shù),簡單點(diǎn)一般會采用計(jì)數(shù)器算法,這種算法實(shí)現(xiàn)相對簡單,也很高效,但是無法應(yīng)對瞬時(shí)的突發(fā)流量。

比如限流每秒100次請求,絕大多數(shù)的時(shí)間里都不會超過這個(gè)數(shù),但是偶爾某一秒鐘會達(dá)到120次請求,接著很快又會恢復(fù)正常,假設(shè)這種突發(fā)的流量不會對系統(tǒng)穩(wěn)定性帶來實(shí)質(zhì)性的影響,則可以在一定程度上允許這種瞬時(shí)的突發(fā)流量,從而為用戶帶來更好的可用性體驗(yàn)。這就是令牌桶算法的用武之地。

該算法的基本原理是:有一個(gè)令牌桶,容量是X,每Y單位時(shí)間會向桶中放入Z個(gè)令牌,如果桶中的令牌數(shù)超過X,則丟棄令牌;請求要想通過首先需要從令牌桶中獲取一個(gè)令牌,獲取不到令牌則拒絕請求。可以看出對于令牌桶算法X、Y、Z這幾個(gè)數(shù)的設(shè)定特別重要,Z應(yīng)該略大于絕大數(shù)時(shí)候的Y單位時(shí)間內(nèi)的請求數(shù),系統(tǒng)會長期處于這個(gè)狀態(tài),X可以是系統(tǒng)允許承載的瞬時(shí)最大請求數(shù),系統(tǒng)不能長時(shí)間處于這個(gè)狀態(tài)。

這里介紹一個(gè)ASP.NET Core的中間件來滿足令牌桶限流需求: FireflySoft.RateLimit.AspNetCore 。使用步驟如下:

1、安裝Nuget包

有多種安裝方式,選擇自己喜歡的就行了。

包管理器命令:

?
1
Install-Package FireflySoft.RateLimit.AspNetCore

或者.NET命令:

?
1
dotnet add package FireflySoft.RateLimit.AspNetCore

或者項(xiàng)目文件直接添加:

?
1
2
3
<ItemGroup>
<PackageReference Include="FireflySoft.RateLimit.AspNetCore" Version="2.*" />
</ItemGroup>

2、使用中間件

在Startup中使用中間件,演示代碼如下(下邊會有詳細(xì)說明):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public void ConfigureServices(IServiceCollection services)
        {
            ...
            app.AddRateLimit(new InProcessTokenBucketAlgorithm(
                new[] {
                    new TokenBucketRule(30,10,TimeSpan.FromSeconds(1))
                    {
                        ExtractTarget = context =>
                        {
                            return (context as HttpContext).Request.Path.Value;
                        },
                        CheckRuleMatching = context =>
                        {
                            return true;
                        },
                        Name="default limit rule",
                    }
                })
            );
            ...
        }
 
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            ...
            app.UseRateLimit();
            ...
        }

如上需要先注冊服務(wù),然后使用中間件。

注冊服務(wù)的時(shí)候需要提供限流算法和對應(yīng)的規(guī)則:

  • 這里使用進(jìn)程內(nèi)令牌桶算法,對于分布式服務(wù)還可以使用Redis令牌桶算法,支持StackExchange.Redis。
  • 桶的容量是30,每秒流入10個(gè)令牌。
  • ExtractTarget用于提取限流目標(biāo),這里是每個(gè)不同的請求Path。如果有IO請求,這里還支持對應(yīng)的異步方法ExtractTargetAsync。
  • CheckRuleMatching用于驗(yàn)證當(dāng)前請求是否限流。如果有IO請求,這里還支持對應(yīng)的異步方法CheckRuleMatchingAsync。
  • 默認(rèn)被限流時(shí)會返回HttpStatusCode 429,可以在AddRateLimit時(shí)使用可選參數(shù)error自定義這個(gè)值,以及Http Header和Body中的內(nèi)容。
  • 基本的使用就是上邊例子中的這些了。

另外這個(gè)項(xiàng)目也支持.Net Framework,需要安裝另一個(gè)包 FireflySoft.RateLimit.AspNet ,如果你的程序基于.net 4.x,可以選擇這個(gè)版本。

同時(shí)在非Web應(yīng)用場景也有對應(yīng)的包支持: FireflySoft.RateLimit.Core ,只不過需要自己處理限流結(jié)果。

他們的使用方法都很類似,邏輯也很簡單,都是需要先創(chuàng)建一個(gè)算法實(shí)例,然后通過這個(gè)實(shí)例去檢查每一次請求,根據(jù)業(yè)務(wù)需要處理檢查結(jié)果就可以了。

到此這篇關(guān)于ASP.NET Core中使用令牌桶限流的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)ASP.NET Core中使用令牌桶限流內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.bossma.cn/dotnet/asp-net-core-token-bucket-algorithm-of-rate-limit/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费av在线网站 | 欧美视频区 | 亚色网站 | 日日夜夜伊人 | 日本a视频 | 99精品视频在线观看 | 高清国产午夜精品久久久久久 | 激情综合五月 | 国产免费黄色 | 国产视频久久 | 成人在线一区二区三区 | 日韩免费 | 亚洲一级一片 | 久久国产一区 | 国产午夜精品一区二区三区嫩草 | 国产午夜视频在线观看 | 一区二区三区四区国产 | 久久99国产精一区二区三区 | 欧美日韩成人一区 | 中文在线播放 | 日韩视频免费看 | 精品久久久久久久久久久久久久 | 九九久久九九 | 日韩一区欧美 | 免费黄色在线观看 | 午夜午夜精品一区二区三区文 | jlzzjlzz国产精品久久 | 日韩亚洲视频 | 龙珠z普通话国语版在线观看 | 亚洲精品视频在线 | 天天干天天骑 | 久久99视频 | 日韩素人一区二区三区 | 日本一级毛片免费看 | 91国自产精品中文字幕亚洲 | 欧美日韩视频 | 日韩国产一区 | 在线观看 亚洲 | 成人亚洲视频 | 国产中文视频 | 爱逼色|