Microserviços são a ideia certa, feitos do jeito errado. Será que eu li isso aqui? O problema não são os microserviços per si, mas a complexidade desnecessária que as pessoas adicionam aos seus projetos. Não é porque todas as grandes empresas tecnologias usam, que você deve usar também. Eles precisam de toda essa complexidade, você não.
O que faz sentido, porém, é criar programas que façam uma coisa bem feita e que trabalhem bem com outros programas, a boa e velha filosofia unix:
Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new "features".
Expect the output of every program to become the input to another, as yet unknown, program.
Essa é a essência do que os microservices deveriam ser, não sistemas distríbuidos.
A tese A Note on Distributed Computing, escrito por pesquisadores da Sun é uma leitura essencial para qualquer pessoa interessada em compreender os desafios fundamentais da computação distribuída. Publicado no início dos anos 90, esse trabalho seminal destaca as diferenças cruciais entre programação local e distribuída, argumentando que construir sistemas distribuídos corretamente — seja em termos de desempenho, confiabilidade, escalabilidade, ou qualquer outro critério de "correto" — é notoriamente difícil.
Importante destacar, esse trabalho introduziu as "Falácias da Computação Distribuída", que são suposições errôneas que desenvolvedores frequentemente fazem ao projetar sistemas distribuídos. Quase todos que embarcam na jornada dos microserviços parecem não ter aprendido essas lições, ignorando coisas como latência e falhas de comunicação.
E mesmo que você acerte, e que a adoção de microservices traga vantagens significativas em termos de agilidade, resiliência e escalabilidade, ela invariavelmente introduz muita complexidade. Esta complexidade não deve ser subestimada. Quase sempre as dificuldades de gerenciar uma arquitetura distrubída é desproporcional as suas vantagens.
Na maioria dos cenários uma abordagem modular, inspirada na filosofia Unix, oferece as mesmas vantagens. Isso não apenas simplifica o desenvolvimento e a manutenção, mas também mantém a equipe focada em entregar valor de forma eficiente, sem se perder na gestão de uma arquitetura distribuída (e portanto) complexa.
Existe uma frase famosa que resume tudo: "Você não constrói um sistema distribuído a menos que você absolutamente precise dele"