Post

Monólito ou microsserviços: decida pelo limite que precisa mudar

Se preferir começar por um resumo, peça um TL;DR ao ChatGPT ou ao Claude .

O caso específico do Prime Video e um conjunto de critérios para decidir entre monólito modular, serviços distribuídos e extrações graduais.

A escolha entre monólito e microsserviços costuma ser apresentada como uma decisão de identidade: sistemas modernos usariam serviços pequenos; sistemas antigos permaneceriam monolíticos. Essa oposição esconde a pergunta útil.

Que limite do sistema precisa mudar de forma independente — e qual custo estamos dispostos a assumir para isso?

Separar um componente em outro processo pode permitir implantação e escala independentes. Também introduz chamadas de rede, observabilidade distribuída, compatibilidade entre contratos, tratamento de falhas parciais e novas responsabilidades operacionais.

Unir componentes reduz parte desse custo. Isso não garante um código simples: um único processo pode continuar mal dividido, com dependências circulares e alterações arriscadas.

Arquitetura é uma troca entre propriedades, não uma votação entre dois formatos.

O caso do Prime Video foi menor do que a manchete

Em 2023, um relato da equipe de Video Quality Analysis do Prime Video circulou como prova de que “a Amazon abandonou microsserviços e voltou ao monólito”. O caso original tinha um escopo mais específico.

A equipe mantinha um serviço para analisar a qualidade de fluxos de áudio e vídeo. A primeira versão usava AWS Step Functions, AWS Lambda e armazenamento intermediário no Amazon S3 para coordenar componentes distribuídos. Ao ampliar o número de transmissões monitoradas, a arquitetura atingiu limites e apresentou custo elevado para aquela carga.

O redesenho reuniu etapas do fluxo em um único processo executado em tarefas do Amazon ECS sobre instâncias EC2. Segundo o relato original arquivado, a mudança reduziu em 90% o custo operacional do serviço de monitoramento.

Isso é evidência sobre um subsistema, uma carga e uma arquitetura inicial. Não demonstra que:

  • todo o Prime Video migrou para um monólito;
  • microsserviços são sempre mais caros;
  • funções serverless não funcionam em escala;
  • reunir componentes produzirá a mesma economia em outro sistema.

A interpretação mais útil é local: quando componentes são acionados juntos, escalam juntos e transferem grande volume de dados entre si, separá-los pode criar custo sem oferecer independência relevante.

Três conceitos que não são equivalentes

Monólito

Uma aplicação monolítica é implantada como uma unidade. Isso descreve seu limite de implantação, não a qualidade de sua estrutura interna.

Um monólito modular mantém módulos e contratos claros dentro dessa unidade. Ele pode ter testes por módulo, regras de dependência e separação de domínio sem transformar cada parte em um serviço de rede.

Microsserviços

Microsserviços são unidades que podem ser implantadas e operadas de maneira independente, normalmente alinhadas a capacidades de negócio. A independência traz valor quando equipes precisam alterar, escalar ou proteger partes do sistema sem coordenar toda a aplicação.

Esse modelo exige recursos operacionais. O texto Microservice Prerequisites, de Martin Fowler, destaca provisionamento rápido, monitoramento técnico, implantação automatizada e colaboração entre desenvolvimento e operações como condições importantes.

Serverless

Serverless descreve um modelo de execução e operação de infraestrutura. Uma função pode participar de um sistema distribuído; vários componentes também podem formar uma única capacidade coesa. Usar Lambda, containers ou máquinas virtuais não define sozinho o limite do domínio.

Misturar essas dimensões leva a conclusões ruins. O caso do Prime Video não foi apenas “microsserviços contra monólito”: envolveu granularidade, coordenação, transferência de dados, modelo de cobrança e padrão de escala.

Quando a separação pode pagar seu custo

Extrair um serviço tende a fazer mais sentido quando existe uma necessidade observável de independência, como:

  • implantação frequente de uma capacidade sem coordenar as demais;
  • perfil de escala muito diferente do restante da aplicação;
  • requisito específico de disponibilidade, segurança ou isolamento;
  • domínio com fronteira e responsabilidade estáveis;
  • equipe capaz de desenvolver e operar o serviço durante todo o ciclo de vida;
  • tecnologia especializada que justifica uma unidade operacional própria.

Mesmo nesses casos, a separação não precisa resultar em dezenas de serviços. Uma fronteira maior pode preservar a independência necessária com menos comunicação distribuída.

Quando manter junto pode ser melhor

Um monólito modular costuma ser uma opção razoável quando:

  • o domínio ainda está sendo descoberto;
  • a equipe é pequena e trabalha no mesmo ciclo de entrega;
  • os componentes mudam e escalam juntos;
  • transações locais simplificam regras que exigiriam coordenação distribuída;
  • a infraestrutura de observabilidade e operação ainda não sustenta vários serviços;
  • não existe evidência de que a separação resolva o gargalo atual.

Começar com uma unidade de implantação não significa desistir de modularidade. Ao contrário: limites internos explícitos tornam uma futura extração menos arriscada. A estratégia conhecida como Monolith First parte da dificuldade de acertar fronteiras de serviço quando o domínio ainda é pouco conhecido.

Um roteiro para tomar a decisão

1. Descreva o problema atual

Evite “precisamos modernizar”. Registre sintomas observáveis:

  • uma alteração simples exige coordenar quatro equipes;
  • o componente de imagens consome a maior parte da capacidade;
  • uma falha no faturamento interrompe o catálogo;
  • o tempo de implantação cresceu;
  • uma exigência regulatória pede isolamento de dados.

2. Identifique o limite candidato

Mapeie dados, chamadas, responsabilidades e mudanças que atravessam a fronteira. Se duas partes precisam ser alteradas juntas na maioria das vezes, a separação pode apenas substituir dependência de código por dependência de rede.

3. Compare opções menores

Antes de extrair um serviço, verifique se o problema pode ser resolvido com:

  • modularização interna;
  • fila assíncrona em um ponto específico;
  • réplica de leitura ou cache;
  • separação de uma tarefa intensiva;
  • melhoria do pipeline de implantação;
  • isolamento de recurso sem separação completa do domínio.

4. Defina como medir

Escolha métricas relacionadas ao problema: custo por unidade de trabalho, tempo de implantação, frequência de mudança conjunta, incidentes, latência ou tempo de recuperação. Inclua custos de migração e operação, não apenas consumo de infraestrutura.

5. Mude de forma reversível

Uma extração gradual permite testar a fronteira com tráfego limitado. A orientação sobre decomposição de monólitos recomenda que cada etapa produza uma melhoria arquitetural e priorize capacidades de negócio, não apenas conjuntos de classes.

A arquitetura certa é contextual e temporária

Monólitos podem concentrar acoplamento; microsserviços podem distribuí-lo sem eliminá-lo. O critério não é quantidade de processos, mas a relação entre limites do domínio, autonomia de mudança e capacidade operacional.

O caso do Prime Video é valioso justamente porque a equipe revisou uma decisão diante de novas condições de escala e custo. A lição não é copiar a arquitetura final. É medir o comportamento do sistema, delimitar o problema e aceitar que uma escolha adequada no protótipo pode deixar de ser adequada em produção.

Pergunte aos meus textos

Faça uma pergunta. O ChatGPT usará os textos publicados neste site como referência para responder.

Sua pergunta não é enviada para este site. O texto é preparado localmente no navegador e a conversa acontece no ChatGPT.