Pular para o conteúdo principal

Gateway Routing

Descrição​

O padrão Gateway Routing coloca um gateway na frente de um conjunto de aplicações, serviços ou implantações e expõe tudo por um único endpoint. O gateway examina cada requisição na camada 7 (caminho da URL, host, cabeçalhos, porta ou IP de origem) e a encaminha ao destino adequado no backend.

Com isso, o cliente conhece e conversa com um só endpoint. O gateway pode encaminhar para serviços distintos (busca, carrinho, checkout), para várias instâncias do mesmo serviço (balanceamento de carga e disponibilidade, inclusive entre regiões) ou para versões diferentes de um serviço (blue-green, canary, rollout gradual). A topologia do backend fica encapsulada no gateway, e mudanças nela se resumem a ajustes de configuração de roteamento.

Um proxy reverso comum, como o Nginx, já implementa o padrão. No Azure, por exemplo, o Application Gateway oferece roteamento regional e o Front Door oferece roteamento global.

Problemas que resolve​

  • Clientes precisam conhecer o endpoint de cada serviço e mudar sempre que uma API é adicionada, removida, dividida ou consolidada.
  • Instâncias sobem e descem de forma elástica, e o cliente teria de acompanhar esse registro e desregistro.
  • Estratégias de implantação com várias versões convivendo (blue-green, canary) exigiriam alterar o cliente a cada mudança no percentual de tráfego.
  • Fazer rollback de uma versão com problema, que sem o gateway pode exigir redistribuir clientes ou trocar DNS.
  • Expor endpoints públicos a partir de endpoints internos ou virtuais, como IPs virtuais de cluster.

Quando usar​

  • Um cliente consome vários serviços que podem ficar atrás de um gateway.
  • Você quer simplificar os clientes com um único endpoint.
  • É preciso rotear requisições de endpoints externos para endpoints virtuais internos.
  • O cliente consome serviços em várias regiões para ganhar latência ou disponibilidade.
  • Você quer desviar tráfego de regiões com maior emissão de carbono quando há alternativas no pool de backends.
  • O número de instâncias do serviço varia ao longo do tempo.
  • A estratégia de implantação exige que várias versões do serviço sejam acessadas ao mesmo tempo.

Quando evitar​

  • Aplicações simples que usam apenas um ou dois serviços, em que o gateway só acrescenta um salto e mais um componente para operar.
  • Cenários em que o salto extra de rede é inaceitável para a latência e não há ganho de roteamento que compense.
  • Comunicação interna entre serviços que já resolve descoberta e balanceamento por outro mecanismo, como service mesh ou service discovery.

Trade-offs​

GanhoCusto / Risco
Cliente conhece um único endpoint e fica desacoplado da topologia do backendO gateway pode virar ponto único de falha se não for redundante
Serviços podem ser divididos, consolidados ou substituídos sem mudar o clienteO gateway pode virar gargalo e precisa escalar junto com a demanda
Rollouts graduais e rollback rápido por configuraçãoMais um salto de rede, com algum acréscimo de latência
Tráfego enviado só a nós saudáveis e distribuído entre instâncias e regiõesRegras de roteamento mal configuradas afetam muitos serviços ao mesmo tempo
Ponto único para gerir domínios, certificados e criptografia em trânsitoMais um componente para operar, monitorar e proteger
  • Disponibilidade: implante o gateway com redundância e tolerância a falhas e combine-o com health checks dos backends.
  • Escala e testes: faça testes de carga no gateway para não provocar falhas em cascata nos serviços.
  • Escopo: escolha um gateway global para implantações em várias regiões e um regional quando precisar de controle fino do balanceamento dentro de uma região.
  • Segurança: o gateway é o endpoint público; restrinja o acesso direto aos backends para que só sejam alcançáveis pelo gateway ou por rede privada.
  • Responsabilidade: mantenha no gateway apenas roteamento e evite colocar lógica de negócio nele.
  • Observabilidade: registre métricas e logs por rota e por backend para diagnosticar erros e latência.

Diagrama​

O cliente envia todas as requisições para o gateway, que as roteia por caminho para serviços distintos, divide o tráfego entre versões de um mesmo serviço e distribui a carga entre instâncias em regiões diferentes.

Padrões relacionados​

  • Gateway Aggregation — também usa um gateway, mas para combinar várias chamadas de backend em uma única requisição.
  • Gateway Offloading — transfere ao gateway responsabilidades transversais como TLS, autenticação e limitação de taxa.
  • Backends for Frontends — cria gateways ou backends dedicados a cada tipo de cliente, cada um com suas regras de roteamento.
  • Geodes — implantação multirregional ativa-ativa que costuma ficar atrás de um gateway global.
  • Strangler Fig — usa roteamento numa fachada para migrar funcionalidades aos poucos de um sistema legado para um novo.
  • Health Endpoint Monitoring — fornece os sinais de saúde que o gateway usa para enviar tráfego só a instâncias saudáveis.
  • Gatekeeper — põe um host dedicado entre clientes e serviços para validar e higienizar requisições, e pode ser combinado com o roteamento.

Referência​