日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Welcome to YARP - 4.限流 (Rate Limiting)

發布時間:2023/11/16 windows 61 coder
生活随笔 收集整理的這篇文章主要介紹了 Welcome to YARP - 4.限流 (Rate Limiting) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

Welcome to YARP - 1.認識YARP并搭建反向代理服務

Welcome to YARP - 2.配置功能

  • 2.1 - 配置文件(Configuration Files)
  • 2.2 - 配置提供者(Configuration Providers)
  • 2.3 - 配置過濾器(Configuration Filters)

Welcome to YARP - 3.負載均衡

Welcome to YARP - 4.限流

Welcome to YARP - 5.身份驗證和授權

Welcome to YARP - 6.壓縮、緩存

Welcome to YARP - 7.健康檢查

Welcome to YARP - 8.分布式跟蹤

介紹

反向代理可用于在將請求代理到目標服務器之前對請求進行速率限制(限流)。這可以減少目標服務器上的負載,增加一層保護,并確保在應用程序中實施一致的策略。

此功能僅在使用 .NET 7.0 或更高版本時可用 ,因為YARP是基于.NET開發的,只有.NET 7才支持了 限流功能,YARP直接可以拿來用。

默認限流功能是關閉的。而開啟限流會應用到所有的路由,限流中間件: app.UseRateLimiter() ,這將應用到項目的所有路由上。

示例:

using Microsoft.AspNetCore.RateLimiting;
using System.Threading.RateLimiting;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRateLimiter(_ => _
    .AddFixedWindowLimiter(policyName: "customPolicy", options =>
    {
        options.PermitLimit = 1;
        options.Window = TimeSpan.FromSeconds(2);
        //options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
        //options.QueueLimit = 2;
    }));

builder.Services.AddReverseProxy()
    .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));

var app = builder.Build();

app.UseRouting();
app.UseRateLimiter();
app.MapReverseProxy();

app.Run();

以上代碼含義:

  • 調用 AddRateLimiter 來將速率限制服務添加到服務集合。
  • 調用 AddFixedWindowLimiter 來創建策略名為 "customPolicy" 的固定窗口限制器,并進行如下設置:
  • 將 PermitLimit 設置為 1,將時間 Window 設置為 2。 允許每 2 秒的窗口最多 1 個請求。
  • QueueProcessingOrder 重命名為 OldestFirst。
  • 將 QueueLimit 設置為 2。
  • 調用 UseRateLimiter 來啟用速率限制。

配置

Rate Limiter policies 可以通過 RouteConfig.RateLimiterPolicy 為每個路由指定,并且可以從 Routes 配置文件的部分進行綁定。與其他路由屬性一樣,可以在不重新啟動代理的情況下修改和重新加載此屬性。策略名稱不區分大小寫。

示例:

{
  "ReverseProxy": {
    "Routes": {
      "route1" : {
        "ClusterId": "cluster1",
        "RateLimiterPolicy": "customPolicy",
        "Match": {
          "Hosts": [ "localhost" ]
        },
      }
    },
    "Clusters": {
      "cluster1": {
        "Destinations": {
          "cluster1/destination1": {
            "Address": "http://localhost:5011/"
          }
        }
      }
    }
  }
}

RateLimiter policies 是 YARP 使用 ASP.NET Core 的概念。YARP 只是提供上述配置來為每個路由指定一個策略,其余部分由現有的 ASP.NET Core 速率限制中間件處理。

這里就要贊嘆一下 YARP 的設計了,所有的功能都是作為 .NET的中間件提供的,讓 .NET 開發者很容易上手。而且可擴展性也是 YARP 的最大優勢。

示例:

app.UseRouting();
app.UseRateLimiter();
app.MapReverseProxy();

在使用速率限制終結點特定的 API 時,必須在 UseRouting 之后調用 UseRateLimiter。 當僅調用全局限制器時,可以在 UseRouting 之前調用 UseRateLimiter

效果展示

我們創建三個項目,一個是YARP代理服務,一個是真實的服務 web api項目,一個是客戶端控制臺 模擬調用。限流的配置就按上面說的配置,配置在代理服務上。web api上面也可以配,但是基本上都配代理服務,讓瀏覽在代理層就被攔截掉。

Server代碼:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}


app.MapGet("/api", () =>
{
    return "hello i am api server";
});

app.Run();

代碼很簡單,就提供一個路由為 "api" 接口供客戶端調用。

Client 代碼:

string apiUrl = "http://localhost:5057/api"; // API地址
int totalCalls = 10; // 總共的調用次數

using (HttpClient client = new())
{
    for (int callCount = 0; callCount < totalCalls; callCount++)
    {
        HttpResponseMessage response = await client.GetAsync(apiUrl);

        if (response.IsSuccessStatusCode)
        {
            string result = await response.Content.ReadAsStringAsync();
            Console.WriteLine($"Call {callCount + 1}: {result}");
        }
        else
        {
            Console.WriteLine($"Call {callCount + 1} failed: {response.StatusCode}");
        }
    }
}

Console.WriteLine("All calls completed.");
Console.ReadKey();

循環調用接口10次,按照上述先流的配置,2秒內只允許有一個請求,那么接下來的9個請求應該都是失敗的。

可以看到只有第一次請求成功了,其他的請求全部失敗了。而且YARP 的代理輸出也顯示只代理了一次,其他流量并沒有打真實的服務器。

禁用Rate Limiting

在路由 RateLimiterPolicy 的參數中指定值 disable 意味著速率限制器中間件不會對此路由應用任何策略,即使是默認策略。

總結

本章我們使用YARP對代理服務進行了限流操作。但是這個功能是.NET 自身提供的,而且支持很多種限流規則,這里就不展開敘述了,想了解的同學可以翻看微軟文檔-限流。如果有時間我們把 YARP 整完,在單獨對某些功能拿出來細聊。本章源碼已上傳GitHub

下篇文章我們繼續講如何使用YARP身份驗證和授權 功能

總結

以上是生活随笔為你收集整理的Welcome to YARP - 4.限流 (Rate Limiting)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色网址中文字幕 | 国产午夜精品福利 | 欧美日韩在线免费观看 | 国产香蕉9| 欧美韩一区 | 国产在线一区二 | 欧美乱妇在线观看 | 国产精品探花在线观看 | 日韩免费av片 | 国产午夜精品在线观看 | 女同性做爰三级 | 久久精品免费在线观看 | 色吧av色av| 99热只有这里有精品 | 成人亚洲天堂 | 天天插美女 | 中国一级特黄真人毛片免费观看 | 黄色片免费观看视频 | 亚洲h在线观看 | 国产自偷自拍视频 | 调教一区二区三区 | 午夜精品久久久久久久 | 国产精品美女视频 | 亚洲天堂精品视频 | 精品视频在线观看一区二区 | 亚洲最大成人av | 日韩国产一级 | 久久久国产一区二区三区 | 中文在线资源天堂 | 日韩一区二区三免费高清在线观看 | 无码人妻精品丰满熟人区 | 欧美成人h版在线观看 | 亚洲激情视频一区 | 国产无限资源 | 一区二区三区视频在线播放 | 免费福利影院 | 欧美日韩高清一区二区 国产亚洲免费看 | 日韩一区在线视频 | 男女在线观看 | 日日骚影院| 欧美日韩高清不卡 | 一区二区成人免费视频 | 黄在线免费观看 | 国产精品观看 | 好姑娘在线观看高清完整版电影 | 国内偷拍精品视频 | 黄色骚视频 | 国产99对白在线播放 | 黄网站免费看 | 亚洲国产精品成人综合久久久 | 涩涩在线观看 | 美女视频在线免费观看 | 欧美性生活网 | 国产春色 | 国产无遮挡又黄又爽又色视频 | 国产传媒视频在线 | 精品三级电影 | 色香蕉在线 | 日本三级吃奶头添泬无码苍井空 | 91午夜精品亚洲一区二区三区 | 国产h视频在线 | 91免费在线看 | 亚洲精品日韩丝袜精品 | 午夜电影网一区 | 青青草欧美 | 一级特黄特色的免费大片视频 | 一本一本久久a久久精品综合麻豆 | 95看片淫黄大片一级 | 久久久精品久久久久久 | 成人深夜网站 | wwwxxx黄色片 | av在线播放网址 | 懂色一区二区三区 | 黄色网免费 | 国产无遮挡又黄又爽免费视频 | 日韩免费在线播放 | 97伊人| 黄色不雅视频 | 日本久久中文字幕 | 欧美成人中文字幕 | 国产熟女一区二区三区四区 | 亚洲av鲁丝一区二区三区 | 国产成人综合亚洲 | 欧美精品xxx | 欧美mv日韩mv国产网站app | 极品色综合 | 日韩美女性生活 | 激情欧美一区二区三区精品 | 韩国毛片基地 | 少妇15p| 午夜一区不卡 | 丝袜熟女一区二区三区 | 亚洲高清视频一区 | www黄色 | 在办公室被c到呻吟的动态图 | 久久久亚洲一区二区三区 | 欧美一区二区三区影视 | 亚洲色图五月天 | 毛片大全免费 |