微軟YARP初體驗

  • 2021 年 2 月 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": "//localhost:11000"
        },
        "cluster1/destination2": {
          "Address": "//localhost:12000"
        }
      }
    }
  }
}

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

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

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

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

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

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

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

查看文檔和主頁(//microsoft.github.io/reverse-proxy/?WT.mc_id=AZ-MVP-5002040),了解現有特性和如何使用它的更多細節。

 原文鏈接://dotnetthoughts.net/getting-started-with-microsoft-yarp/