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

O que é Monólito?

Recentemente, comecei a pensar sobre como o desenvolvimento de software tem evoluído e como a arquitetura dos sistemas mudou nos últimos anos. Um termo que sempre volta à tona nessa discussão é "monólito". Mas será que o monólito realmente morreu?

Por muito tempo, construir sistemas monolíticos foi o padrão. Tudo ficava dentro de uma única aplicação: backend, frontend, lógica de negócios, autenticação, tudo junto. Isso tinha suas vantagens, como uma implementação mais simples e menos complexidade na comunicação entre serviços. Mas, à medida que os sistemas cresceram e a necessidade de escalabilidade aumentou, os microserviços começaram a ganhar espaço. E aí veio a pergunta: será que os monólitos ficaram obsoletos?

Hoje, todo mundo quer falar de microserviços. Empresas como Netflix, Uber e Amazon mostram como essa abordagem pode ser poderosa. Mas e para sistemas menores? Será que vale a pena partir direto para um modelo distribuído, com toda a complexidade de orquestração, comunicação assíncrona e gerenciamento de falhas que ele traz?

Eu vejo cada vez mais desenvolvedores demonizando os monólitos, como se fossem uma coisa ultrapassada, mas será que isso é justo? Tem muita empresa rodando monólitos super eficientes, com código bem estruturado e fácil manutenção. Ao mesmo tempo, já vi sistemas de microserviços mal implementados que viraram um verdadeiro pesadelo de manutenção.

O que vocês acham? Ainda vale a pena começar um projeto como monólito e evoluir depois? Ou os microserviços já são o único caminho viável?

Carregando publicação patrocinada...
6

O monólito não só não morreu como ele é amplamente usado e mesmo que muitas pessoas queiram matá-lo usando algo mais complexo, ele continará sendo a melhor opção e a esmagadora maioria das pessoas continuarão com ele.

O que é mesma aplicação? É o mesmo executável? Se você tiver um frontend separado do backend já não é monólito? Eu desconheço essa definição.

Não é necessário microsserviços para ter escala, tem uma quantidade monumental de sites entre os mais acessados do mundo que provam isso com facilidade. Algumas pessoas falam nisso, mas até perdeu força com o tempo, porque isso sempre foi uma enorme mentira. As pessoas adotam microsserviços porque estava muito difícil gerenciar um sistema monumentalmente grande.

Ou seja, o fato da maioria dos sistemas não serem tão grandes assim já é um motivo para nem passar perto de microsserviços.

Algumas dessas empreesas voltaram atrás e mataram pelo menos uma parte dos microsserviços e mudaram para um monólito com alguns serviços por fora.

Além disso tem a boa e velha frase: "você não é a Netflix, não é o Spotify". E mesmo que fosse, algumas dessas empresas estão pagando o preço que não viram no começo quando adotaram essa novidade, e agora eles tem o pior dos dois mundos.

Microsserviços com menos do que centenas de programadores não faz o menor sentido.

Sabe porque alguns lugares menores conseguem implementar microsserviços? Porque não fazem microsserviço, não sabem disso e estão felizes por poderem dizer que estão fazendo e colocando no currículo.

Eu quase não vejo pessoas demonizando os monólitos, até quase todos os fervorosos definidores de microsserviços não costumam fazer isso.

A única opção é fazer um monólito bem-feito e em caso extremo e provado que dará certo é para pensar em microsserviços. Isso é amplamente difundido e só não segue quem é muito teimoso, naquele nível de narcisismo mesmo, o que é uma porcentagem até considerável da população, ainda que minoria.

Se o mundo fosse ideal menos de 0,1% das empresas usariam arquitetura de microsserviços.

Falei mais em vários lugares, pode ver o último: https://www.tabnews.com.br/maniero/4a8b8e0b-d385-4b22-b13a-d7b9be48cbd0. Pode ver outros só aqui: https://www.google.com/search?as_q=maniero+microsservi%C3%A7os&as_sitesearch=tabnews.com.br.

S2


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente (não vendo nada, é retribuição na minha aposentadoria) (links aqui no perfil também).

2

Em 2019, eu prestava consultoria para uma startup. O projeto estava indo relativamente bem: um sistema monolítico, mas bem organizado por contextos. Era um MVP, e o time corria contra o tempo para validar a ideia no mercado.

Mas aí os donos ouviram falar sobre microserviços — afinal, "grandes empresas usam", né? Chamaram outro consultor, que, apesar de nunca ter construído um microserviço de verdade, vendia a ideia como solução mágica. Eu alertei sobre a complexidade envolvida: orquestração, observabilidade, resiliência, deploys independentes, DevOps forte... Mas a ideia dos microserviços vendeu melhor.

Resultado: o projeto travou. A complexidade cresceu exponencialmente, o sistema nunca foi entregue, e a startup acabou falindo por não conseguir atender os prazos. Os investidores surtaram.

Hoje, vejo muita gente construindo uma API separada do front-end e chamando isso de microserviço. Ilusão total. Separar front e back com uma API não transforma sua arquitetura num microserviço. É só uma aplicação desacoplada — e olha lá. 😅

3

Isso chama-se programação orientada a currículo ou à modinha. A pesso vai tentando ver quem quer fazer para ele poder construir e colocar no currículo. E mesmo dando errado ela coloca, melhor ainda que a empresa não existe mais para pergun tarem se deu certo ou não.

Mas eu acho bom porque que decidiu por isso também merecia o destino que teve, apesar de que a pessoa vai colocar no currículo que liderou um grande time, etc., etc. É básico, muito básico que não deve fazer em um MVP e sempre, sempre, deve começar com um monólito para depois ver um dia se é necessário microsserviços (que provavelmente vão adotar sem necessidade, ja queriam mesmo) e se o monólito for bem-feito será fácil mudar isso.

Como microsserviços é uma solução muito diferente só deveria ser adotada organicamente, sem pressa, testando aos poucos, somente com pessoas competentes nisso.

Por isso que eu ataco fortemente as modinhas, e tem gente que não gosta, especialmente os que ganham dinheiro justamente com isso.

1

Essa é uma pergunta puramente de arquitetura. A resposta rápida é: O que seu sistema precisa?

Precisa ser extremamente escalável, e não de forma uniforme? Faça em serviços.

Precisa ser estável, de rápido desenvolvimento e não tem um tráfego gigantesco? faça o que preferir.

Eu prefiro fazer monolito, mas não fico preso, analiso o que o projeto precisa antes.