Microserviços - Definição e Boas Práticas
Published: 2022-11-23 20:39:40

## O que são microserviços ?

É uma abordagem de arquitetura de software composta de pequenos serviços independentes que se comunicam e organizados de acordo com seu domínio de negócio.

## Diferenças entre as arquiteturas monolítica e de microsserviços

Com as **arquiteturas monolíticas**, todos os processos são altamente acoplados e executam como um único serviço. Isso significa que se um processo do aplicativo apresentar um pico de demanda, toda a arquitetura deverá ser escalada. A complexidade da adição ou do aprimoramento de recursos de aplicativos monolíticos aumenta com o crescimento da base de código. Essa complexidade limita a experimentação e dificulta a implementação de novas ideias. As arquiteturas monolíticas aumentam o risco de disponibilidade de aplicativos, pois muitos processos dependentes e altamente acoplados aumentam o impacto da falha de um único processo.

Com uma **arquitetura de microsserviços**, um aplicativo é criado como componentes independentes que executam cada processo do aplicativo como um serviço. Esses serviços se comunicam por meio de uma interface bem definida usando APIs leves. Os serviços são criados para recursos empresariais e cada serviço realiza uma única função. Como são executados de forma independente, cada serviço pode ser atualizado, implantado e escalado para atender a demanda de funções específicas de um aplicativo.

## Quais são as características dos microserviços?


**- Autonomia**
Cada serviço pode ser desenvolvido, escalado e implantado sem interferir em outros serviços. Não há necessidade de compartilhamento de código entre os serviços porque essa comunicação acontece por chamadas API (síncrona) ou de forma (assíncrona).

**- Especialistas**

Cada serviço é desenhado para resolver um problema específico, se um serviço começa a ter outras responsabilidades é indicado que se crie um serviço novo para novas responsabilidades. 

**- Resilientes**

A independência de serviço aumenta a resiliência a falhas na arquitetura, ou seja, se um dos serviços tiver algum problema, isso não deve afetar o funcionamento dos outros serviços.

## Boas práticas 


**- Estabilidade**

Um microserviço  considerado estável é aquele que durante o desenvolvimento, deploy, inclusão de novas tecnologias e desativação de outros serviços não resulta em instabilidade do eco sistema de microserviços.

**- Confiabilidade**

Um microserviço confiável dentro um eco sistema é aquele que outros microserviços podem confiar, pois o mesmo garante que sempre estará disponível para responder o que se espera dele.
Possui um ciclo de desenvolvimento padronizado para se proteger de más práticas de desenvolvimento.
É submetido a testes de unidade, integração, e2e e regras de coverage.
Conhece os clientes que dependem dele e isso é super importante, pois através dessa informação teremos uma estimativa de quanto e quando o serviço precisa escalar recursos para atender determinada demanda, até mesmo saber ter a estimativa de quantidade requisições que serão feitas para o nosso microserviço e etc.


**- Tolerância a falhas**

Nunca deve existir uma parte do eco sistema que uma falha do serviço afete todo o fluxo de uma aplicação.
Também não deve haver qualquer parte individual dentro de uma arquitetura de microserviço que possa derrubar o mesmo quando ela falhar.
Microserviços devem suportar falhas internas dentro dele mesmo e externas que acontecem em outras camadas.

Testes de cargas e testes de caos são indicados para ajudar a garantir tolerância a falhas.

Ter um fluxo de tratamento de incidentes também é importante para uma ação mais proativa da equipe de desenvolvimento.

**- Monitoramento**

É uma forma de acompanhar o que esta acontecendo ou que já aconteceu no microserviço, ter logging que refletem com precisão os estados do microserviço, os logs devem ter informações relevantes e não sensíveis (documentos, numero de cartão de crédito, senhas, etc.), mas um bom log é aquele sinaliza ciclos de início, meio e fim de determinada ação executada no microserviço. 

**- Bons alertas**
 
Possuir uma forma de emitir alerta para equipe de sustentação ou responsáveis caso ocorra algum tipo de falha no microserviço seja via e-mail, sms e etc.

**- Documentação**

Essa é uma das boas práticas mais inportantes para se manter um microserviço, qualquer pessoal deve ser capaz de saber qual a renponsabilidade do microserviço de forma individual dentro de um eco sistema.

Documentação deve possuir

- Descrição de responsabilidade do microserviço
- Diagrama de arquitetura
- Contato dos responsáveis (desenvolvedor, pessoas de negócios)
- Guia de bordo de desenvolvimento 
- Collection (postman ou insominia)
- FAQ (Em casos de serviços públicos) 

## Conclusão

Espero que esse post tenha te ajudado a entender um pouco sobre arquitetura de microserviço tendo em vista que esse é um post introdutório sem nenhuma intenção técnica, mas com objetivo de trazer clareza sobre definição e boas práticas da arquitetura que é tão utilizada por grandes empresas.

Obrigado por ler esse post fique a vontade para compartilhar e comentar.

Segue alguns links que podem te ajudar a aprofundar no assunto.

[https://microservices.io/](https://microservices.io/)
[https://aws.amazon.com/pt/microservices/(https://aws.amazon.com/pt/microservices/)
[https://cloud.google.com/learn/what-is-microservices-architecture?hl=pt-br](https://cloud.google.com/learn/what-is-microservices-architecture?hl=pt-br)