No desenvolvimento de grandes sistemas, a quantidade e complexidade de microserviços podem se tornar um inimigo desafiador.
Depois de enfrentar esse inimigo diversas vezes, refinei um conjunto de padrões. Estes padrões são os pilares de uma abordagem que eu chamo de Arquitetura Orientada a Gateways (GOA).
GOA não propõe novos componentes, mas sim a organização disciplinada de padrões consolidados para alcançar máxima produtividade e segurança.
O que é a GOA?
A Arquitetura Orientada a Gateways (GOA) tem como objetivo simplificar o desenvolvimento de microserviços ao isolar a complexidade de segurança e comunicação em componentes especializados chamados Gateways.
Em vez de cada microserviço lidar com autenticação, autorização, roteamento e exposições públicas, a GOA estabelece fronteiras claras e seguras, com base nos seguintes princípios:
- Gateways como Fronteiras Explícitas: Toda comunicação que entra ou sai de uma área de negócio deve passar por um Gateway.
- Isolamento entre Áreas de Negócio: Serviços de diferentes domínios não se comunicam diretamente.
- Microserviços Enxutos e Focados: Os microserviços são focados exclusivamente na sua regra de negócio.
Para quem é a GOA?
A GOA não é uma solução para tudo. Ela brilha em contextos como:
- Empresas com múltiplas squads ou produtos distintos
- Organizações que priorizam segurança, compliance e governança
- Sistemas onde autonomia e escala são prioridades
Quando evitar a GOA?
GOA não é recomendada para projetos pequenos ou com baixa complexidade. Nesses cenários, a infraestrutura adicional pode ser um exagero.
Quais são os padrões arquiteturais adotados?
API Gateway: Controla entrada/saída, autorização, roteamento, caching e rate limiting.
Backend for Frontend (BFF): Composição de dados e otimização da resposta para o cliente.
Domain-Driven Design (DDD): A GOA materializa esse conceito com fronteiras bem definidas e isoladas.
Microserviços focados: Cada serviço com uma responsabilidade clara e única.
Quais as vantagens de usar GOA no desenvolvimento?
Segurança: A segurança não é uma responsabilidade de cada desenvolvedor, mas sim uma característica centralizada e garantida pela arquitetura nos Gateways.
Produtividade: Os desenvolvedores de microservices podem se concentrar 100% nas regras de negócio. O código fica mais limpo, com menos dependências repetitivas e genéricas e a curva de aprendizado para novos membros da equipe é reduzida.
Autonomia: Os times têm total autonomia para desenvolver, implantar e escalar os serviços dentro de seu contexto.
Manutenibilidade e Testabilidade Aprimoradas: Serviços menores, com responsabilidades claras e sem acoplamento. São mais fáceis de manter, refatorar e cobrir com testes unitários e de integração.
Desafios e Estratégias de Mitigação
Nenhuma arquitetura é isenta de trade-offs. Entender desafios da GOA é fundamental para uma implementação bem-sucedida.
Desafio 1: Complexidade Operacional:
Mais componentes = mais infraestrutura.
Estratégia de Mitigação
- Usar orquestradores de contêineres (Kubernetes, ECS etc.)
- Usar ferramentas de pipelines de CI/CD
Desafio 2: Ponto Único de Falha (SPOF)
Um único Gateway centraliza todo o tráfego. Embora isso simplifique a governança, cria um potencial ponto único de falha. Se este Gateway cair, toda a aplicação se torna inacessível.
Estratégia de Mitigação
A primeira linha de defesa é nunca rodar uma única instância do Gateway. Ele deve ser sempre implantado em um cluster com múltiplas réplicas, balanceamento de carga e health checks.
A GOA não obriga a existência de um único Gateway. À medida que o sistema cresce e a autonomia das áreas de negócio se torna mais crítica, a arquitetura pode evoluir para um modelo de Gateways por área. Assim o time pode implantar seu próprio Gateway.
Exemplos de uso
- Cenário 1: Um novo cliente deseja criar uma conta na plataforma
- Solução: O Cliente faz um POST no gateway externo passando seus dados pessoais. O Gateway que chama o "User Data Service" que persiste os dados pessoais do usuário e em seguida o "User Data Service" chama o "Authentication Service" para salvar os dados de autenticação.
- Cenário 2: O usuário quer se autenticar para usar o sistema.
- Solução: O Cliente faz um POST no gateway externo passando os dados para autenticação. O Gateway que chama o "Authentication Service" Caso os dados sejam válidos, retorna um token de autenticação.
- Cenário 3: O usuário quer criar uma comunidade.
- Solução: cliente faz um POST no gateway externo passando seu token de autenticação e dados necessários para criar sua comunidade. Caso o token de autenticação seja válido, o Gateway chama o "Community Service" para persistir os dados.
- Cenário 4: O usuário quer ver os posts de uma comunidade.
- Solução: O cliente faz um GET no gateway externo passando seu token de autenticação e o ID da comunidade que deseja ver os posts. Caso o token seja válido, chama o "Community BFF" que faz consulta no "Community Service" e depois enriquece o resultado com o nome e foto vindos do "User Gateway"
Conclusão
Nenhuma arquitetura é uma bala de prata — e a GOA, com seus desafios operacionais, não é exceção. No entanto, em última análise, a GOA é uma arquitetura que otimiza para o ativo mais valioso de qualquer empresa de tecnologia: o tempo e o foco de seus desenvolvedores.
Ao mover a complexidade para as bordas, não estamos apenas escrevendo código mais limpo; estamos construindo sistemas mais resilientes e times mais produtivos. E no cenário tecnológico atual, essa é a vantagem competitiva mais importante de todas.
E você? Que estratégias tem usado para domar a complexidade dos microservices? Deixe sua opinião nos comentários!
Top comments (0)