Você conhece o YARP?
Se você está desenvolvendo aplicações modernas e escaláveis, provavelmente já se deparou com desafios relacionados a balanceamento de carga, roteamento de requisições ou até mesmo questões de segurança e autenticação para APIs. Então, quero te apresentar o YARP!
O que é o YARP?
YARP (Yet Another Reverse Proxy) é um projeto open-source da Microsoft que atua como um proxy reverso feito para ser super configurável, extensível e fácil de usar com o .NET. Como o próprio nome sugere, é mais um proxy reverso... mas com a simplicidade e robustez que a Microsoft entrega. Se você está no mundo do desenvolvimento em C#, essa ferramenta pode ser uma adição poderosa ao seu stack.
Antes de entrar nos usos, vale uma olhada no meu outro artigo tratando do tema aqui, mas caso não queira lê-lo vai um resumo: um proxy reverso é um servidor que fica entre os clientes e os servidores, recebendo as requisições dos clientes e as redirecionando para os servidores apropriados. Isso não só ajuda a balancear a carga entre vários servidores como também pode melhorar a segurança, esconder a estrutura dos servidores internos e otimizar a performance.
Usos Comuns do YARP
O YARP é uma verdadeira "mão na roda" para muitas situações! Aqui vão alguns usos comuns dessa tecnologia:
-
Balanceamento de Carga: Se sua aplicação precisa lidar com uma grande quantidade de tráfego, o YARP permite distribuir as requisições entre vários servidores, garantindo que nenhum fique sobrecarregado. Isso torna o sistema mais resiliente e escalável.
-
Roteamento Dinâmico: Quer direcionar requisições específicas para serviços diferentes? Com o YARP, você pode definir regras para direcionar tráfego com base no conteúdo da requisição, como URLs específicas, cabeçalhos, tipos de conteúdo, etc.
-
Proxy para Microserviços: Em arquiteturas de microserviços, é comum que diferentes serviços tenham URLs variadas e estejam espalhados. O YARP facilita a orquestração e a comunicação entre esses serviços, funcionando como uma “central” que gerencia o tráfego entre eles.
-
Autenticação e Segurança: Como um intermediário para as requisições, o YARP pode ser configurado para adicionar camadas de autenticação e controle de acesso antes que as requisições alcancem os serviços, aumentando a segurança da aplicação.
Vamos ver uma aplicação prática?
Vamos configurar um proxy reverso simples usando o YARP. Imagine que você tem uma aplicação que roda em localhost:5001
e deseja expor uma API que roda em localhost:5002
através de um proxy, tudo centralizado em uma única porta para facilitar o acesso e o roteamento
Configuração no appsettings.json
Primeiro, vamos configurar o roteamento básico e os clusters no arquivo appsettings.json
{
"ReverseProxy": {
"Routes": {
"route1": {
"ClusterId": "cluster1",
"Match": {
"Path": "/api/{**catch-all}"
}
}
},
"Clusters": {
"cluster1": {
"Destinations": {
"destination1": {
"Address": "http://localhost:5002/"
}
}
}
}
}
}
Aqui estamos dizendo ao YARP que qualquer requisição para /api/*
deve ser roteada para o cluster cluster1
, que redireciona as requisições para o endereço http://localhost:5002/
.
Configuração do YARP no Código
Agora, vamos ao código! Adicione o pacote Yarp.ReverseProxy
ao seu projeto e configure o proxy no Startup.cs
ou no Program.cs
, dependendo da estrutura do seu projeto:
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var builder = WebApplication.CreateBuilder(args);
// Adiciona o YARP como serviço
builder.Services.AddReverseProxy()
.LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));
var app = builder.Build();
// Configura o middleware do proxy reverso
app.MapReverseProxy();
app.Run();
Com isso, ao rodar a aplicação em localhost:5001, qualquer requisição para /api será redirecionada para localhost:5002. E o mais legal: você pode adicionar várias regras e rotas ao appsettings.json, configurando diferentes destinos para suas requisições!
Vantagens e Customizações
A verdadeira mágica do YARP está na customização. Além das configurações básicas, você pode adicionar middlewares para lidar com autenticação, cache, redirecionamentos e muito mais. Como ele é baseado no ASP.NET Core, você pode aproveitar tudo o que já conhece da plataforma, incluindo injeção de dependência e pipelines de middleware.
Por que eu deveria adotar o YARP?
O YARP facilita a criação de soluções robustas e escaláveis sem complicação. Ele permite que você, desenvolvedor, controle o fluxo de tráfego da sua aplicação, adicione segurança e aumente a performance com uma configuração simples e fácil de entender. A Microsoft trouxe uma solução que resolve problemas complexos de infraestrutura com uma simplicidade que combina com o ecossistema .NET.
Para quem trabalha com APIs, microserviços, balanceamento de carga e controle de tráfego, o YARP é uma adição extremamente poderosa!
Fora que dá pra resolver muitos outros problemas 'fora da caixinha' com essa ferramenta. Ainda existem muitos outros casos de usos que não dá pra explicar num simples artigo. Vale a pena ver a seção de fontes abaixo e buscar mais informações sobre o YARP.