Executando verificação de segurança...
4

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:

  1. Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new "features".

  2. 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"

Carregando publicação patrocinada...
2

Adorei o seu comentário e as recomendações de artigos.

Me identifiquei pois na empresa que trabalho está sendo desenvolvido uma nova versão da aplicação (que é web). Nessa versão nova estão tentando aderir essa visão de microserviços, separando cada módulo em um microserviço diferente, e cara, com certeza subestimaram muito a complexidade disso, principalmente para uma empresa pequena onde a maioria são Dev Juniores.

Fiquei curioso sobre o tópico da abordagem modular que você citou. Teria algum artigo ou pode dissertar mais sobre?

2

Ótimo, obrigado pelo retorno.

Comece com "The Art of Unix Programming" por Eric S. Raymond, que está disponível gratuitamente na internet, você encontrará um recurso inestimável para entender os princípios da supracitada filosofia Unix. Há um capítulo inteiro dedicado à modularidade, além de outro focado em estratégias para gerenciar a complexidade. Este livro é uma excelente introdução de como os princípios de design que promovem a clareza e a simplicidade tornaram o Unix parte fundamental da computação moderna.

Depois avance para "Patterns of Enterprise Application Architecture" por Martin Fowler. Este trabalho aprofunda-se nos padrões de design que são essenciais para construir aplicações empresariais robustas e escaláveis. Enquanto Raymond fornece uma base filosófica e abstrata, Fowler oferece um catálogo de soluções prontas que podem ser aplicados para lidar com a complexidade das aplicações de grande escala.

Ao explorar estes livros, você perceberá que, no coração do desenvolvimento de software modular, está a definição de interfaces claras e precisas. Interfaces bem definidas são o fundamento para a criação de componentes de software que podem ser desenvolvidos, testados e mantidos de forma independente.