Os padrões que os engenheiros criaram para sistemas reais revelam, ao expor o limite do determinístico, que componentes não têm uma só natureza. Há três paradigmas — e decompor não dissolveu o monólito: só o espalhou.
A solução, quando examinada de perto, costuma ser o melhor retrato do problema que não se resolveu.
O Capítulo 2 mostrou uma convergência conceitual: o Domain-Driven Design e a biologia de Maturana chegam ao mesmo princípio sobre processamento. Mas convergência conceitual, sozinha, não prova nada. Este capítulo faz um movimento diferente — olha para padrões arquiteturais concretos que engenheiros desenvolveram entre 2010 e 2020 para resolver problemas reais de sistemas distribuídos, e mostra que cada um materializa o mesmo princípio. Não porque alguém estivesse lendo Maturana, mas porque, ao enfrentar o desafio de manter muitos sistemas coerentes, se redescobre por necessidade o que governa qualquer sistema bem-organizado. São quatro padrões, e ao final eles revelam algo sobre a própria natureza dos componentes — os três paradigmas que dão título ao capítulo.
Um serviço de pagamento conversa com dezenas de outros — validação de cartão, antifraude, autorização. Um dia, o antifraude fica lento e começa a falhar. O pagamento o chama e espera; o timeout é de trinta segundos, mas nesse intervalo chegam novas requisições, e o pagamento abre cem, mil threads esperando respostas que não virão. A memória estoura, o pagamento fica lento, e como muitos serviços o chamam, a lentidão sobe em cascata: antifraude cai, pagamento engasga, checkout trava, ninguém compra. Uma falha local derrubou a plataforma inteira.
O Circuit Breaker resolve isso como o disjuntor de uma casa: detecta a sobrecarga e corta aquele circuito, e o resto segue. Ele monitora a taxa de falhas; enquanto está baixa, deixa tudo fluir; quando ela ultrapassa o limite, abre, e passa a rejeitar de imediato qualquer chamada ao serviço problemático, em vez de esperar — falha rápido; depois de alguns segundos, deixa passar uma requisição de teste e, se ela volta bem, fecha de novo. A diferença é tudo: sem ele, a falha local destrói o sistema; com ele, a falha é contida, e o sistema segue operando, ainda que degradado.
E por quê? Porque respeita um princípio que Maturana descreveu há cinquenta anos: o processamento é inviolável por instrução externa. Sem Circuit Breaker, o pagamento na prática instrui o antifraude — “responda em trinta segundos” — e fica preso a uma ordem que o outro não consegue cumprir. Com ele, o pagamento perturba o antifraude, mas mantém a própria autonomia: se a resposta não vem, decide desistir e seguir. É o que o nervo faz com o músculo — perturba com um sinal, não instrui a contração; e se o nervo adoece, o músculo não fica preso a uma ordem sem sentido, apenas não responde, e continua vivo. O mesmo padrão reaparecerá nas pessoas: quando a liderança tenta instruir o processamento interno de alguém em cada detalhe, em vez de perturbar com pedidos claros, a pessoa “abre o circuito” — para de responder, e a falha sobe em cascata.
No monólito, uma operação complexa cabia numa transação atômica: tudo ou nada, com rollback se algo falha. Mas em microsserviços cada serviço tem seu próprio banco, e não há transação global. Como manter consistência quando um pedido precisa reservar estoque, cobrar, emitir nota e agendar entrega — e o pagamento falha no terceiro passo, depois de o estoque já ter sido reservado? A tentação é um orquestrador central que manda em todos e desfaz o que for preciso — mas esse coordenador vira um novo monólito: qualquer mudança o afeta, qualquer falha sua derruba tudo.
A Saga resolve por coreografia: cada sistema reage a eventos que os outros publicam, e ninguém manda em ninguém. O estoque reserva e anuncia “reserva confirmada”; o pagamento escuta, decide processar, e — se o cartão recusa — anuncia “pagamento recusado”; o estoque escuta isso e, autonomamente, decide desfazer a própria reserva. A coordenação emerge da comunicação, sem comando central. O princípio é o de Maturana outra vez: a coordenação nasce do acoplamento estrutural entre sistemas autônomos, não de uma ordem. O nervo não instrui a fibra a contrair; publica um sinal, e cada fibra decide segundo a própria estrutura — se algumas estão em sofrimento, não respondem, e o corpo segue, degradado, mas inteiro.
Com dezenas de serviços, cada um precisaria de resiliência, segurança e observabilidade — e, na abordagem ingênua, cada time reescreve esse código de infraestrutura, até 80% do serviço ser encanamento e 20% ser negócio, com cada mudança de política exigindo redeploy de todos. O Service Mesh põe um proxy pequeno ao lado de cada serviço, que intercepta toda a comunicação e cuida disso. O serviço não sabe que está sendo observado: faz uma chamada comum, e o proxy aplica as políticas, definidas centralmente num arquivo, não no código.
Funciona porque observação pode existir sem instrução. Para monitorar um serviço sem o mesh, é preciso enfiar código dentro dele — invadir seu encapsulamento. Com o mesh, o serviço permanece inviolado; o proxy observa e coleta, mas não diz como o serviço processa. É o que o médico faz: mede sua pressão e sua temperatura sem instruir sua fisiologia. Observação estrutural, encapsulamento intacto.
Há um problema que aparece quando um domínio cresce: o modelo de dados bom para escrever não é o bom para ler. Escrever exige consistência e integridade — normalização, transações, nenhuma venda de item inexistente. Ler relatórios e recomendações exige velocidade — agregações, desnormalização. Forçar um único modelo a fazer os dois resulta em nenhum dos dois bem-feito: queries que cruzam dez tabelas para responder uma pergunta simples.
O CQRS separa o modelo de escrita do de leitura, e os sincroniza por eventos: cada comando publica um evento, e as projeções de leitura se atualizam ao ouvi-lo. Funciona porque domínios operacionais distintos pedem estruturas distintas. Na biologia, sensores e atuadores usam estruturas radicalmente diferentes — receptores de um lado, terminais sinápticos de outro —, e justamente por não tentarem ser a mesma coisa, cada um é especializado e eficiente. O modelo de escrita é o motor; o de leitura é o sensor; cada um no seu domínio.
Quatro padrões, quatro problemas reais, quatro soluções que Netflix, Amazon e Uber adotaram porque bilhões dependiam disso. E todas materializando o mesmo princípio — processamento inviolável, autonomia operacional, acoplamento sem comando, domínios distintos. Visto assim, é uma bela história de convergência. Mas há uma segunda leitura, e é a que importa.
Olhe o que cada padrão de fato faz. O Circuit Breaker existe porque o componente não absorve a falha do vizinho. A Saga existe porque o componente não coordena sozinho. O Service Mesh existe porque o componente não relata o próprio estado. O CQRS existe porque o componente mistura domínios que deveria separar. Cada padrão é uma prótese — uma estrutura externa que faz pelo componente aquilo que ele não faz por dentro. E foi Ashby quem previu isso: num ambiente que muda, um componente sem variedade interna empurra a complexidade para fora. Ela não some; desloca-se de dentro do componente para a malha entre componentes. A engenharia chamou essas próteses de boas práticas — mas elas são, antes, o retrato da rigidez que não foi resolvida.
Por isso a decomposição em microsserviços, sozinha, não dissolveu o monólito: apenas o distribuiu. Cada peça permaneceu alopoiética — determinística, fixa, sem variabilidade —, e o acoplamento que antes era interno ao monólito reapareceu como uma teia de coordenação entre peças. Trocou-se um monólito por um monólito distribuído, e a complexidade que se queria eliminar mudou de endereço.
E é aqui que o capítulo entrega o que prometeu. Os padrões, ao expor o limite de tornar tudo determinístico, revelam que componentes não têm uma só natureza — há três paradigmas. O alopoiético: a máquina, o processo, o algoritmo, onde o output é fixo e o determinismo é virtude, desde que o domínio seja estável. O autopoiético: o vivo — a pessoa, a cultura —, que não se instrui, só se perturba, e que carrega a variabilidade que o determinístico não tem. E o heteropoiético: o sistema que opera sobre a linguagem — a LLM —, capaz de absorver variedade dentro de guard rails, um terceiro regime que não existia quando os padrões foram criados. O erro que gera as próteses é tratar como alopoiético o que pede outro paradigma. A engenharia só tinha um martelo, e martelou tudo de determinismo; o resto do livro mostra os outros dois.
O Capítulo 4 começa pelo avesso — pelos casos em que aplicar esses princípios é justamente o erro. Depois, dos Capítulos 5 a 10, a aplicação em profundidade. Mas a base já está montada: você reconhece a estrutura, e reconhece, agora, que ela tem três naturezas, não uma.
Decompor não dissolveu o monólito. Só o espalhou — porque cada peça continuou sendo da mesma natureza.