微軟YARP初體驗

碼農譯站發表於2021-02-24

本文討論了微軟的反向代理——YARP。YARP是一個可以建立高效能、高度可定製的反向代理伺服器的類庫。那麼什麼是反向代理呢?反向代理是位於使用者與目標伺服器之間的中間連線點。它接收初始的HTTP連線請求,並根據配置獲取實際的伺服器資源。反向代理充當了應用程式和使用者之間的閘道器。

YARP是在使用ASP.NET和.NET(.NET Core 3.1和.NET 5.0)的基礎架構構建的。YARP的主要優勢在於,它可以通過.net程式碼輕鬆地進行定製和調整,以滿足每個部署場景的特定需求。

YARP可以支援從appsettings.json或程式碼中進行配置。在這篇文章中,將探索如何在一個空的ASP.NET Core Web應用程式中使用YARP。該應用程式將包括兩個ASP.NET Core MVC應用程式。首先,建立一個空的web應用程式。接下來你需要新增YARP包。可以用下面的命令來做到這一點:

-dotnet add package Microsoft.ReverseProxy -version 1.0.0-preview.9.21116.1

新增包之後,可以配置Startup 類來讀取配置並啟用反向代理。你可以這樣做:

public class Startup{
    public IConfiguration Configuration { get; set; }
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddReverseProxy()
            .LoadFromConfig(Configuration.GetSection("ReverseProxy"));
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapReverseProxy();
        });
    }
}

在ConfigureServices方法中,新增了反向代理中介軟體,並從appsettings.json中讀取配置。在Configure方法,新增對映反向代理配置的路由。接下來需要修改配置,可以通過編輯appsettings.json來完成。下面是反向代理配置:

"ReverseProxy": {
  "Routes": [
    {
      "RouteId": "route1",
      "ClusterId": "cluster1",
      "Match": {
        "Path": "{**catch-all}"
      }
    }
  ],
  "Clusters": {
    "cluster1": {
        
      "Destinations": {
        "cluster1/destination1": {
          "Address": "https://localhost:11000"
        },
        "cluster1/destination2": {
          "Address": "https://localhost:12000"
        }
      }
    }
  }
}

這個配置主要有兩個元素——Routes和Clusters。你可以在Routes中配置終結點路由和url。Match元素為所有路由配置代理。RouteId是路由的唯一名稱,ClusterId用於標識後端應用伺服器或url。在Clusters中,配置了兩個應用程式url。這是同一個應用程式執行在不同的埠上。現在可以執行代理應用程式和其他web應用程式了。其他的web應用程式,你可以在不同的埠執行以下命令:

-dotnet run --url="https://localhost:xxxxx"

現在,嘗試瀏覽https://localhost:5001,將能夠看到Web應用程式的索引頁。如果你不斷重新整理,有時你還能看到第二個應用程式。預設情況下,YARP將使用PowerOfTwoChoices演算法進行負載均衡,除此之外還有其他內建的策略,比如。

  • First-選擇第一個目標,不考慮負載。這對於雙目標故障轉移系統非常有用。
  • Random-隨機選擇一個目標。
  • PowerOfTwoChoices(預設)-選擇兩個隨機的目標,然後從中選擇一個更少請求的目標。這避免了LeastRequests的開銷,也避免了Random選擇繁忙目的地的最壞情況。
  • RoundRobin -通過順序迴圈選擇一個目標。
  • LeastRequests—所有目標中選擇分配請求最少的目標。這需要檢查所有目標。

要配置任何其他負載均衡策略,可以這樣修改配置,這裡使用的是RoundRobin演算法:

"Clusters": {
  "cluster1": {
    "LoadBalancingPolicy": "RoundRobin",
    "Destinations": {
      "cluster1/destination1": {
        "Address": "https://localhost:11000"
      },
      "cluster1/destination2": {
        "Address": "https://localhost:12000"
      }
    }
  }
} 

YARP還通過檢查目標應用程式的執行狀況並基於路由請求來支援流量路由。如果你正在使用ASP.NET Core應用程式,可以啟用ASP.NET Core執行狀況檢查選項。YARP帶來了很多新特性和改進。

檢視文件和主頁(https://microsoft.github.io/reverse-proxy/?WT.mc_id=AZ-MVP-5002040),瞭解現有特性和如何使用它的更多細節。

 原文連結:https://dotnetthoughts.net/getting-started-with-microsoft-yarp/