Eu tenho um problema. Vamos usar microsserviços! Agora eu tenho 13 problemas distribuídos.
Dividir seu sistema em componentes encapsulados, coesos e desacoplados é uma boa ideia. Ele permite que você resolva problemas diferentes separadamente. Mas você pode fazer isso perfeitamente em uma implantação monolítica (consulte Fowler: Microservice Premium ). Afinal, é isso que a OOP vem ensinando há muitas décadas! Se você decidir transformar seus componentes em microsserviços, não obterá nenhuma vantagem arquitetônica. Você ganha alguma flexibilidade em relação à escolha de tecnologia e possivelmente (mas não necessariamente!) Alguma escalabilidade. Mas você tem alguma dor de cabeça garantida (a) pela natureza distribuída do sistema e (b) pela comunicação entre os componentes. Escolher microsserviços significa que você tem outros problemas que são tão prementes que você está disposto a usar microsserviços apesar desses problemas.
Se você não for capaz de projetar um monolito que seja dividido em componentes, você também não poderá projetar um sistema de microsserviço. Em uma base de código monolítica, a dor será bastante óbvia. Idealmente, o código simplesmente não será compilado se estiver terrivelmente quebrado. Mas com microservices, cada serviço pode ser desenvolvido separadamente, possivelmente em diferentes idiomas. Quaisquer problemas na interação dos componentes não se tornarão aparentes até que você integre seus componentes e, nesse momento, já é tarde demais para corrigir a arquitetura geral.
A fonte No 1 de bugs é a incompatibilidade de interface. Pode haver erros flagrantes, como um parâmetro ausente, ou exemplos mais sutis, como esquecer de verificar um código de erro ou esquecer de verificar uma condição prévia antes de chamar um método. A tipagem estática detecta tais problemas o mais cedo possível: no seu IDE e no compilador, antes o código já é executado. Sistemas dinâmicos não têm esse luxo. Não vai explodir até que o código defeituoso seja executado.
As implicações para os microservices são assustadoras. Os microsserviços são inerentemente dinâmicos. A menos que você mude para uma linguagem formal de descrição de serviço, não é possível verificar qualquer tipo de correção no uso da interface. você tem que testar, testar, testar! Mas os testes são caros e geralmente não exaustivos, o que deixa a possibilidade de que ainda existam problemas na produção. Quando esse problema se tornará aparente? Somente quando esse caminho defeituoso é executado, em tempo de execução, em produção. A noção de que os problemas de produção levariam a um feedback mais rápido está