4

⚙️ Microsserviços: o que são e quando utilizar?

#Arquitetura de Sistemas
Pablo Nazareth
Pablo Nazareth

Introdução

Quando migrei para uma arquitetura baseada em microsserviços, a princípio pensei que poderia ser algo mais simples, de fácil entendimento e implementação. Uma arquitetura baseada em criar pequenas partes de código ao em vez de uma aplicação única e grande, poderia ser considerada como a melhor solução para o desenvolvimento de novas aplicações.


Fonte: Daniel Stori (turnoff.us)


Aos poucos percebi que não é tão simples igual pensava, e que na verdade é muito mais complexa de ser implementada. Há diversas preocupações e responsabilidades que precisamos nos atentar, para evitar de trazer mais problemas do que solução.


Imagine que você precisa implementar uma aplicação em que cada contexto será dividido em um ou mais microsserviços, e que cada um deles terá o seu próprio banco de dados, testes automatizados e distribuição de forma independente? agora sim podemos imaginar a complexidade que irá se tornar, não é mesmo?



O objetivo desse artigo é de entendermos melhor sobre os microsserviços, o seu conceito, as suas vantagens, desvantagens e quando devemos ou não utiliza-lo como solução. 


O que são os Microsserviços?


Imagem extraída do artigo “Introdução aos microsserviços”


Primeiro precisamos entender o que são os microsserviços e porque vem se tornando cada vez mais popular no mundo de desenvolvimento de software.


A proposta desse tipo de arquitetura, é o desenvolvimento de aplicações de granularidade fina (pequena), que sejam mais flexíveis, escaláveis e com manutenção mais simples do que as arquiteturas convencionais, e com o foco em realizar uma única função ou responsabilidade.


Resumidamente, é descrita por Martin Fowler como:

“Uma abordagem para desenvolver um único aplicativo como um conjunto de pequenos serviços, cada um executando em seu próprio processo...” (Martin Fowler, 2014)


Quais são as suas vantagens e desvantagens?



Vantagens

  • Desacoplamento: Os serviços são desvinculados, de modo que um serviço desconhece e não depende do outro para funcionar.
  • Escalabilidade: Poderá ser escalado para suportar grandes quantidades de requisições simultâneas.
  • Isolamento e resiliência: Se um serviço parar de funcionar, poderá ser escalado uma nova instância para funcionamento, e todo o restante da aplicação continuará funcionando.
  • Flexibilidade: Podemos ter várias equipes trabalhando simultaneamente e utilizando tecnologias e linguagens distintas, possibilitando a evolução constante do sistema.
  • Separação de responsabilidade: Cada serviço terá a sua responsabilidade, podendo ser separado por contexto/domínio da aplicação.


Desvantagens

  • Gerenciamento: Complexidade maior para gerenciamento de todos os microsserviços da aplicação. Isso inclui distribuição, automatização de testes, gerenciamento de serviços e falhas recorrentes.
  • Monitoramento: Será necessário implementar técnicas de monitoramento que possibilite a detecção e prevenção de falhas que possam ocorrer em qualquer microserviço.
  • Provisionamento: O microserviço é isolado e possui recursos próprios, portanto há diversas responsabilidades que o serviço deverá possuir, como por exemplo armazenamento próprio, configurações de clusterização e permissões de acesso.
  • Sincronização de dados: É possível que outros serviços irão depender de dados de outros serviços. É necessário que exista um modelo de sincronização e distribuição dos dados entre eles, como por exemplo mensageria. O desenvolvedor precisará lidar com práticas de rastreabilidade dessas mensagens, para numa eventual auditoria, tratamento de erros e rollbacks quando não ocorrer a conclusão de todo o processo.
  • Consistência eventual: Devido a abordagem distribuída da aplicação, nem sempre todos os dados estarão disponíveis para o usuário no momento em que é efetuado uma operação.


Quando utilizar essa arquitetura?


Fonte: devprojournal.com


  • Alta demanda: Se a sua aplicação irá ter grande picos de requisições, seja em determinadas horas, dias ou meses, então provavelmente você irá precisar escalar a sua aplicação para atender essa demanda. Como exemplo imagine dia de votação de BBB, Black Friday ou período de fechamento de imposto, o qual precisamos de uma solução que irá atender a alta quantidade de requisições, sem que a aplicação fique fora do ar.
  • Times distintos, separados por negócio: Os microsserviços nos permitem separar a aplicação de acordo com cada contexto do negócio, e que cada serviço possa ser implementado utilizando tecnologias diferentes.
  • Resiliência e tolerância à falhas: O sistema deverá continuar funcionando mesmo após apresentar falhas em alguns de seus componentes. A indisponibilidade de um serviço não poderá afetar o funcionamento dos demais.


Quando NÃO utilizar essa arquitetura?


Fonte: Laptrinhx — Why microservices fail?


  • Simplicidade: Quando a aplicação é simples, pequena e não irá evoluir.
  • Falta de Recursos: Não há uma equipe e infraestrutura para gerenciar os microsserviços.
  • Falta de Conhecimento: Se você não conhece o seu negócio e os problemas que você deverá enfrentar e as suas possíveis soluções, então provavelmente microsserviços não será uma boa opção.


Conclusão

A abordagem de microsserviços tem sido bastante discutida e adotada, entretanto, não significa que será sempre utilizada para resolver todos os tipos de problemas. Deverá sempre ser avaliado qual a melhor opção, de acordo com o contexto e requisitos a qual estarão sendo implementados.


Espero que através desse artigo, você consiga ter uma noção melhor do que é a arquitetura de microsserviços, as suas características e quais as vantagens e desvantagens de sua utilização.


Gostou do artigo? deixe a sua opinião com sugestões/críticas para que eu possa trazer mais conteúdo e ajudar a todos. Lembre-se de me seguir para acompanhar todos os meu próximos artigos, e até breve! 😊️



Referências

Microsserviços - dos grandes monolitos a pequenas rotas

Martin Fowler - Microservices

Medium - Uma introdução aos microsservicos

7
14499

Comentários (18)

0
Pablo Nazareth

Pablo Nazareth

26/03/2021 18:15

UHUUUUU!! muito obrigado pessoal! muito feliz 😁️

0
Rosemeire Deconti

Rosemeire Deconti

26/03/2021 17:55

Pablo! Parabéns pelo artigo e pelo prêmio!

0
J

Jonathas Araujo

26/03/2021 17:55

Parabéns mano, ganhou em 1° Lugar. !!!!!

0
Pablo Nazareth

Pablo Nazareth

26/03/2021 13:19

Obrigado @Marlon e @Daniela :)

0
D

Daniela Silva

26/03/2021 12:34

Adorei o artigo, parabéns 👏

0
Marlon Menezes

Marlon Menezes

26/03/2021 12:25

Excelente artigo meu amigo. Parabéns!

0
Pablo Nazareth

Pablo Nazareth

26/03/2021 11:59

@Jonathas Araujo

Acabei de acessar lá, obrigado! 🤘️


Para criar um hyperlink, basta você passar o mouse sobre o texto, e em seguida clicar no terceiro ícone da direita para a esquerda que tem aqui na barra de ferramentas do comentário.

0
J

Jonathas Araujo

26/03/2021 11:50

Opá aqui está

https://web.digitalinnovation.one/articles/lista-de-cursos?back=%2Farticles&page=1&order=oldest

Não sei como faz para virar um hiper link

0
Pablo Nazareth

Pablo Nazareth

26/03/2021 11:46

@Jonathas_Araujo

Boa!!! fico feliz que consegui te ajudar! 🚀️ você tem o link do seu artigo para eu dar uma olhada? será um prazer ler o seu artigo 😊️

0
J

Jonathas Araujo

26/03/2021 11:42

Voltei, deu certo. Obrigado. Copiei e colei as imagens da internet.

Arquiteto de Software | Engenheiro de Software | Desenvolvedor FullStack | .NET Core | C# | Javascript | Angular |MCP

Brasil