System Design/04 - Cloud Design Patterns/Design & Implementation2 min
Gateway Aggregation
- Que problema isso resolve?
- Quando usar / quando NÃO usar?
- Qual o principal trade-off?
- Como isso falha em produção?
Conceito
O gateway recebe uma requisição do cliente, chama vários serviços internos e devolve uma resposta composta.
cliente → GET /perfil-completo → gateway ┬→ serviço-usuarios
├→ serviço-pedidos
└→ serviço-enderecos
← resposta única
É o antídoto de Chatty IO na fronteira: em vez de o cliente fazer N chamadas pela internet, o gateway faz N chamadas pela rede interna e devolve uma.
Trade-offs
O ganho é maior quanto pior a rede do cliente. Três chamadas de um app móvel em 4G custam três handshakes TLS e três latências de 100 ms; internamente, custam 2 ms cada e podem ser paralelas.
Os custos:
A latência é a da chamada mais lenta. Se um dos serviços degrada, a resposta inteira degrada — por isso o padrão exige timeout individual e uma política de resposta parcial: melhor devolver o perfil sem os pedidos do que não devolver nada.
O gateway acumula conhecimento. Ele passa a saber quais serviços existem e como compor a resposta — um acoplamento que precisa ser mantido a cada mudança de contrato.
Complexidade de falha. Dois de três serviços responderam: o que devolver? Códigos de status parciais, campos nulos e flags de degradação viram parte do contrato.
E o alerta recorrente: agregação não é lugar de lógica de negócio. O gateway compõe respostas; ele não decide regras.
Quando cada tipo de cliente precisa de uma composição diferente, o padrão evolui para Backends for Frontend — um agregador por cliente, em vez de um agregador universal que tenta servir a todos.
Exemplo prático
Uma tela de perfil em app móvel:
sem agregação: 3 chamadas × 120 ms (4G, sequenciais) = 360 ms
com agregação: 1 chamada × 130 ms = 130 ms
(as 3 internas: 5 ms, em paralelo)
Quase três vezes mais rápido, e com um terço do custo de bateria e de dados.
O detalhe que fecha o desenho: cada chamada interna tem timeout de 50 ms e um valor padrão. Se enderecos não responder, a tela abre sem o endereço em vez de não abrir — degradação em vez de falha.
Relacionado
Parte de Design & Implementation · roadmap.sh/system-design