Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Arquitetura microserviços

Boa noite!

Gostaria de alguma indicação de material ou experiência com uma arquitetura voltada a microserviços.

Até o momento já pesquisei por diversas mídias, mostrando os prós e contras, porém cada material acaba explicando de uma maneira, então não entendi se existe um padrão para esse modelo de arquitetura.

https://github.com/dashersw/cote

No repositório acima eles utilizaram Socket para fazer a comunicação entre os serviços. Pensando em uma grande quantidade de serviços seria viável utilizar essa abordagem, ou via API poderia ser melhor?

Sobre o frontend da aplicação. Em alguns lugares vi uma UI consumindo diversos serviços, e em outras vezes o próprio frontend era quebrado em microserviços. A respeito dessa divisão no frontend alguém já experimentou seguir tal abordagem?

Sobre persistência dos dados. Muitos dos materiais diziam para os serviços terem seus próprios bancos de dados. Imagino que os dados de um serviço serão usados como regra de negócio para outro e vice versa em certas ocasiões, e um banco por serviço poderia tornar isso mais complexo. A ideia é quebrar o microserviço até o ponto dele não depender de maneira alguma sobre outro?

Desde já agradeço a atenção e estou aberto a opiniões.

Atenciosamente,

Alison Cassis

5 respostas
solução!

Bom dia Alison!

Tendo alguma experiência com manutenção de um sistema baseado em micro-serviços, eu posso te dar algumas das respostas que você procura aqui.

Bom eu vou ter que começar com uma frase muito clichê mas que é verdade: você tem que procurar uma solução adequada ao seu caso, e ela provavelmente será única.

Beleza, vamos lá.

  • Sobre o armazenamento de dados, acho que você quase acertou em cheio: o ideal é que todos os sistemas tenham seu próprio banco, pois assim um sistema não interfere no outro. Porém, isso pode sim aumentar a complexidade e o acoplamento entre os serviços. Vai existir acoplamento e ele é necessário, pois um sistema tem que consumir dados, eles estarão descritos de uma certa maneira em outro. Então haverá uma certa "duplicação" de modelagem, mas o ideal é que você faça essa troca SOMENTE dos dados que irá utilizar.
  • Sobre o Front, vai da sua necessidade. A sua landing page pode precisar consumir diversos serviços sim (por exemplo a listagem de produtos vem de um serviço e o formulário de contato com o helpdesk vem de outro), mas o ideal é, de novo, que você só faça a integração com aquilo que realmente precisar. Esse tipo de integração diminui o acoplamento pois a página em questão não precisa conhecer nem a modelagem do objeto, se o conteúdo carregado vier já pronto pra renderização.
  • Ser Socket ou API é uma decisão de projeto, depende mais do tipo de comunicação que você precisa com o usuário em uma dada página. Você precisa carregar uma vez e acabou a interação ativa? Provavelmente via API é melhor. Se precisa poder enviar dados a qualquer instante pro usuário, Socket é uma alternativa mais viável.

Espero ter esclarecido parte das suas dúvidas, ou ao menos o suficiente pra te ajudar a fazer sua escolha.

Um abraço e bons estudos!

Boa noite Marco!

Muito obrigado pela resposta, realmente me ajudou a entender um pouco melhor esse modelo de arquitetura. Eu estava com a impressão de que não tinha muito bem um padrão, mas é como você disse, é a solução que se enquadra em dado problema.

Por acaso você teria algum material ou link que considere conteúdo relevante sobre o assunto?

No Trello de sugestões de cursos, o de microserviços é um dos mais votados. Alguma confirmação ou previsão de quando podemos ter um curso relacionado ao assunto?

Atenciosamente,

Alison Cassis

Puts, não tenho material não, o que eu aprendi foi meio no tapa mesmo, tanto as coisas boas quanto ruins! Hahahaha mas o Google foi um ótimo instrutor. Se eu cair em algum link bacana hoje eu posto aqui!

Não tenho como dar uma previsão do curso, infelizmente. Mas se é um dos mais votados com certeza vai ter alguma prioridade na escolha, fica atent@!

Abraço e bons estudos, Marco

Bom dia!

Encontrei dois posts, a respeito de banco de dados, com informações sobre esse modelo de arquitetura.

Seguem os links:

https://plainoldobjects.com/2015/09/02/does-each-microservice-really-need-its-own-database-2/

http://microservices.io/patterns/data/database-per-service.html

Abraços.

Bacana, obrigado pelos links! Vai ser uma leitura interessante e vai ajudar outros alunos com a mesma duvida!

Abraço e bons estudos!