Dominando Roteamento Avançado e Balanceamento de Carga com YARP

Aplicações web modernas exigem flexibilidade, escalabilidade e confiabilidade. O YARP reverse proxy oferece aos desenvolvedores a flexibilidade de implementar regras de roteamento avançadas e técnicas de balanceamento de carga. Isso garante que o tráfego seja distribuído de forma eficiente entre vários serviços de backend. Este artigo demonstra exemplos práticos para ajudar você a dominar essas funcionalidades.

O que é YARP?

YARP (Yet Another Reverse Proxy) é um projeto de código aberto da Microsoft, criado para simplificar a construção de reverse proxies na plataforma .NET. Ele oferece uma plataforma altamente personalizável para implementar roteamento sofisticado, balanceamento de carga e middleware pipelines. Com o YARP reverse proxy, desenvolvedores podem definir rotas e clusters com base em host, path, headers e outras condições.

Começando com YARP

Antes de mergulhar em técnicas avançadas, vamos configurar uma configuração básica do YARP reverse proxy.

Primeiro, adicione o pacote NuGet do YARP ao seu projeto ASP.NET Core:

 dotnet add package Yarp.ReverseProxy

Em seguida, modifique seu Startup.cs ou Program.cs para integrar o YARP reverse proxy:

using Yarp.ReverseProxy;

var builder = WebApplication.CreateBuilder(args);

// Add YARP services
builder.Services.AddReverseProxy()
    .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));

var app = builder.Build();

app.MapReverseProxy();

// Start the application
app.Run();

No seu appsettings.json, defina uma configuração simples:

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

Essa configuração básica fornece um ponto de partida para configurações mais avançadas. Para organizar seu código, você pode usar um recurso pouco conhecido do Google Pixel 9 que vale a pena conhecer.

Configurando Roteamento Avançado

O YARP reverse proxy permite criar regras de roteamento sofisticadas. Por exemplo, você pode combinar solicitações com base em headers, query strings ou até mesmo lógica personalizada. Abaixo, um exemplo que demonstra o roteamento baseado em um header personalizado.

Roteamento Baseado em Critérios Específicos

Vamos supor que queremos rotear o tráfego para um serviço de backend específico se uma solicitação contiver um header X-Use-Feature definido como Beta.

{
  "ReverseProxy": {
    "Routes": [
      {
        "RouteId": "betaRoute",
        "ClusterId": "betaCluster",
        "Match": {
          "Headers": [
            {
              "Name": "X-Use-Feature",
              "Values": [ "Beta" ]
            }
          ]
        }
      },
      {
        "RouteId": "defaultRoute",
        "ClusterId": "defaultCluster",
        "Match": {
          "Path": "/api/{**catch-all}"
        }
      }
    ],
    "Clusters": {
      "betaCluster": {
        "Destinations": {
          "betaDestination": {
            "Address": "https://beta-backend.example.com/"
          }
        }
      },
      "defaultCluster": {
        "Destinations": {
          "destination1": {
            "Address": "https://backend1.example.com/"
          },
          "destination2": {
            "Address": "https://backend2.example.com/"
          }
        }
      }
    }
  }
}

Nessa configuração, qualquer solicitação com o header X-Use-Feature: Beta é direcionada para betaCluster. Todas as outras solicitações seguem a defaultRoute.

Estratégias de Balanceamento de Carga com YARP

O YARP reverse proxy suporta várias estratégias de balanceamento de carga out-of-the-box. Vamos explorar duas abordagens comuns: Round Robin e Weighted Distribution.

Round Robin e Distribuição Ponderada

Round Robin distribui as solicitações de forma uniforme entre todos os destinos. No entanto, se você quiser atribuir diferentes capacidades aos seus destinos, o balanceamento de carga ponderado é útil. Para melhorar o seu celular, você pode receber atualizações por 7 anos.

Exemplo: Configurando Balanceamento de Carga Ponderado

Suponha que você tenha um cluster com dois destinos, mas um servidor é mais poderoso e deve lidar com 70% do tráfego. Você pode ajustar a configuração atribuindo pesos:

{
  "ReverseProxy": {
    "Routes": [
      {
        "RouteId": "weightedRoute",
        "ClusterId": "weightedCluster",
        "Match": {
          "Path": "/api/{**catch-all}"
        }
      }
    ],
    "Clusters": {
      "weightedCluster": {
        "LoadBalancingPolicy": "WeightedRoundRobin",
        "Destinations": {
          "destination1": {
            "Address": "https://powerful-server.example.com/",
            "Metadata": {
              "Weight": "70"
            }
          },
          "destination2": {
            "Address": "https://regular-server.example.com/",
            "Metadata": {
              "Weight": "30"
            }
          }
        }
      }
    }
  }
}

Aqui, o YARP reverse proxy usa uma estratégia weighted round-robin, onde destination1 recebe 70% das solicitações e destination2 lida com os 30% restantes.

Melhores Práticas para Implantações em Produção

Ao usar o YARP reverse proxy em produção, considere estas melhores práticas:

  • Health Checks: Garanta que cada destino esteja saudável, integrando verificações de saúde. O YARP reverse proxy pode automaticamente rotear o tráfego para longe de destinos não saudáveis.
  • Monitoramento e Logging: Integre logging e monitoramento robustos para rastrear decisões de roteamento e desempenho.
  • Segurança: Proteja seu reverse proxy com mecanismos de autenticação, autorização e criptografia.

Considerações Finais

O YARP reverse proxy é uma ferramenta versátil para construir reverse proxies escaláveis, robustos e flexíveis. Ao dominar suas capacidades avançadas de roteamento e balanceamento de carga, desenvolvedores podem criar aplicações eficientes e confiáveis.

Este conteúdo foi auxiliado por Inteligência Artificial, mas escrito e revisado por um humano.

Via Dev.to

Leave a Comment

Exit mobile version