Pesquisei arquiteturas de microsserviços tentando obter uma visão geral de alto nível de todos os prós e contras, por que e por que, etc. Muitas das informações que estou lendo / assistindo são provenientes da ThoughtWorks (Martin Fowler, Neal Ford, etc.). al).
A maior parte do trabalho de Martin Fowler sobre o assunto tem alguns anos, quando a Microservices (como um nome familiar em programação, se não na prática geral) ainda era jovem, por isso tomo muito disso com um pouco de sal.
Uma coisa em particular é esta:
Ao ouvir histórias sobre equipes que usam uma arquitetura de microsserviços, notei um padrão comum.
- Quase todas as histórias de microsserviços bem-sucedidas começaram com um monólito muito grande e dividido
- Quase todos os casos em que ouvi falar de um sistema que foi construído como um sistema de microsserviço do zero, acabaram em sérios problemas.
Esse padrão levou muitos de meus colegas a argumentar que você não deve iniciar um novo projeto com microsserviços, mesmo que tenha certeza de que seu aplicativo será grande o suficiente para fazer valer a pena. .
(ref: https://martinfowler.com/bliki/MonolithFirst.html - ênfase deles)
Agora, três anos depois e com microsserviços um termo mais onipresente, é geralmente aceitável que um novo sistema seja tipicamente melhor atendido por ter blocos de serviço maiores (-sem-microsserviço-mas-menor-que-monólito) para começar e fazer eles mais granulares como parte de uma medida evolutiva?
Ou existe uma norma para iniciar um projeto do zero com uma arquitetura granular de microsserviços, em contraste com as declarações acima?
Parece uma abordagem geral sã, mas curiosa dos pensamentos da comunidade.
fonte
Na minha opinião, pode ser benéfico desenvolver um monólito primeiro (ou melhor: desenvolver partes de sua aplicação como monólito).
Há casos em que você não tem certeza sobre o domínio e os limites do seu problema (por exemplo, eu construo um site de gerenciamento de navios, preciso de um serviço de navio E um serviço de frota ou um serviço de navio é suficiente?) E, nesses casos, um o monólito pode ser mais fácil de desenvolver.
Você deve parar de fazer isso se precisar incluir tecnologias diferentes (por exemplo, suas partes existentes são escritas em C #, mas seu novo problema requer aprendizado de máquina, o que é melhor fazer com python), tenha um bom entendimento sobre os domínios em seu projeto ou seu monólito trata de galvanizar, por exemplo, todo mundo constrói esse monólito e esmaga a noção de serviços separados.
fonte
Tenho certeza de que houve algumas perguntas sobre este artigo exato da MF.
Minha opinião é a seguinte:
Um monólito com problemas de manutenção ou escalabilidade é aprimorado dividindo-o em microsserviços. Um projeto como esse quase sempre será "bem-sucedido", pois mesmo dividir uma seção pequena pode resultar em ganhos mensuráveis e você pode desenhar uma linha embaixo dela quando estiver feliz.
Quer a sua metade monólito + uma fila de mensagens e um par de processos de trabalho conta como 'Microservice Architecture' é um argumento a ter para o bar, mas você definitivamente vai ser chamar -se que quando você fala sobre o projeto.
Por outro lado, qualquer novo projeto, independentemente da arquitetura escolhida, corre o risco de não atender às expectativas; portanto, naturalmente, você esperaria uma menor taxa de sucesso. Além disso, se você começou com o objetivo de criar a coisa toda 'Arquitetura de microsserviço de práticas recomendadas' desde o início, pode estar se aventurando em novas tecnologias e nas partes mais difíceis dos microsserviços.
Também devemos lembrar que MF escreve de uma grande perspectiva de OOP. Ele é naturalmente cético em relação a uma abordagem distribuída mais moderna.
Hoje em dia, eu esperaria que qualquer solução de grandes empresas incorporasse um elemento de microsserviços, e apenas um tolo recomendaria que você fizesse um aplicativo gigante de monólito, a menos que esteja distribuindo um único aplicativo de estilo desktop.
fonte
Na minha (vasta) experiência, testemunhei muitos outros projetos falharem por causa de problemas de pessoas do que de tecnologia. Infelizmente, as pessoas não gostam de falhar e, portanto, tendem a relatar mal as razões da falha e culpar a tecnologia.
No meu domínio, finanças, a maioria dos novos projetos segue arquiteturas de microsserviço hoje em dia, e parece ser uma arquitetura vencedora da perspectiva do TCO (custo total de propriedade). Esses projetos não parecem falhar com tanta frequência e, quando o fazem, os motivos apresentados não costumam listar a arquitetura do aplicativo como o problema.
fonte