소개
사용 가능한 정상 대상이 여러 개 있을 때, YARP는 특정 요청에 사용할 대상을 결정해야 합니다. YARP는 기본 제공 부하 분산 알고리즘과 함께 제공되지만 사용자 지정 부하 분산 방법에 대한 확장성도 제공합니다.
구성
서비스 및 미들웨어 등록
부하 분산 정책은 AddLoadBalancingPolicies()
자동으로 호출되는 AddReverseProxy()
메서드를 통해 DI 컨테이너에 등록됩니다.
미들웨어는 매개 변수가 없는 UseLoadBalancing()
메서드에 기본적으로 포함된 MapReverseProxy
와 함께 추가됩니다.
클러스터 구성
대상을 결정하는 데 사용되는 알고리즘은 LoadBalancingPolicy
설정하여 구성할 수 있습니다.
정책을 지정하지 않으면 PowerOfTwoChoices
사용됩니다.
파일 예제
"ReverseProxy": {
"Clusters": {
"cluster1": {
"LoadBalancingPolicy": "RoundRobin",
"Destinations": {
"cluster1/destination1": {
"Address": "https://localhost:10000/"
},
"cluster1/destination2": {
"Address": "https://localhost:10010/"
}
}
}
}
}
코드 예제
var clusters = new[]
{
new ClusterConfig()
{
ClusterId = "cluster1",
LoadBalancingPolicy = LoadBalancingPolicies.RoundRobin,
Destinations = new Dictionary<string, DestinationConfig>(StringComparer.OrdinalIgnoreCase)
{
{ "destination1", new DestinationConfig() { Address = "https://localhost:10000" } },
{ "destination2", new DestinationConfig() { Address = "https://localhost:10010" } }
}
}
};
기본 제공 정책
YARP는 다음과 같은 기본 제공 정책을 제공합니다.
FirstAlphabetical
부하를 고려하지 않고 사용할 수 있는 대상 중 사전순으로 첫 번째를 선택합니다. 이중 대상 장애 조치 시스템에 유용합니다.
Random
대상을 임의로 선택합니다.
-
PowerOfTwoChoices
(기본값)
두 개의 임의 대상을 선택한 다음, 최소 할당된 요청이 있는 대상을 선택합니다.
이렇게 하면 LeastRequests
의 오버헤드를 방지하고, Random
의 경우에는 바쁜 대상을 선택하는 최악의 상황을 피할 수 있습니다.
RoundRobin
순서대로 순환하여 대상을 선택합니다.
LeastRequests
할당된 요청이 가장 적은 대상을 선택합니다. 이를 위해 모든 목적지를 검토해야 합니다.
확장성
ILoadBalancingPolicy
의 역할은 사용 가능한 정상적인 대상 목록에서 목적지를 선택하는 것입니다.
DI에서 사용자 지정 구현을 제공할 수 있습니다.
// Implement the ILoadBalancingPolicy
public sealed class LastLoadBalancingPolicy : ILoadBalancingPolicy
{
public string Name => "Last";
public DestinationState? PickDestination(HttpContext context, ClusterState cluster, IReadOnlyList<DestinationState> availableDestinations)
{
return availableDestinations[^1];
}
}
// Register it in DI in ConfigureServices method
services.AddSingleton<ILoadBalancingPolicy, LastLoadBalancingPolicy>();
// Set the LoadBalancingPolicy on the cluster
cluster.LoadBalancingPolicy = "Last";
ASP.NET Core