Microserviços
Tags: distributed, computing, microservices, architecture
Published: 2023-05-13 03:12:48

---
title: Microserviços
published: true
description: Microserviços
tags: distributed, computing, microservices, architecture
series: Arquitetura Computacional
cover_image: https://img.freepik.com/vetores-gratis/ilustracao-quantica-isometrica_23-2149260764.jpg?w=2000&t=st=1683947816~exp=1683948416~hmac=63f75e0282ce7eb258acfaac19752c4938e43bee651e9ef256e092a6eb6d03ec
---

Microserviços e sistemas distribuídos são conceitos relacionados, pois os microserviços são uma abordagem para a construção de sistemas distribuídos.

Um sistema distribuído é um conjunto de computadores independentes conectados por uma rede e que trabalham em conjunto para realizar uma ou mais tarefas. Cada nó (servidor) no sistema distribuído pode ser responsável por diferentes funções, que podem ser implementados em diferentes linguagens de programação e em diferentes sistemas operacionais.

Microserviços é uma abordagem de arquitetura de software em que um aplicativo ou sistema é construído como um conjunto de serviços independentes, que se comunicam entre si por meio de APIs bem definidas e padronizadas. Cada serviço é projetado para realizar uma única tarefa específica, como gerenciamento de usuários, processamento de pagamentos, envio de e-mails, entre outros.

Os microserviços são pequenos, autônomos e desacoplados, o que significa que podem ser desenvolvidos, implantados e escalados independentemente uns dos outros. Permite que as equipes de desenvolvimento se concentrem em áreas específicas do sistema, aprimorem continuamente seus serviços e implementem atualizações sem afetar o funcionamento de outros serviços.

Uma forma de escalar os microserviços é horizontalmente, o que significa que mais instâncias podem ser adicionadas para lidar com maior número de solicitações, sem a necessidade de alterar o serviço, tornando os microserviços uma boa opção para sistemas em que a demanda varia ao longo do tempo.

A arquitetura de microserviços pode trazer muitos benefícios, como maior flexibilidade, escalabilidade, resiliência e facilidade de manutenção. No entanto, também apresenta desafios únicos em termos de gerenciamento de complexidade, monitoramento e coordenação entre os serviços. Portanto, a adoção de microserviços deve ser cuidadosamente planejada e gerenciada para garantir que os benefícios superem os desafios.

Os microserviços são implementados seguindo um conjunto de regras e princípios que visam garantir sua eficácia e escalabilidade. Esses princípios são conhecidos como `The Twelve-Factor App` os "12 fatores", um conjunto de diretrizes para desenvolvimento de software que foram criadas pela empresa [`Heroku`](https://devcenter.heroku.com/) em 2011, e que se tornaram referência na indústria de desenvolvimento de software.

## Os 12 fatores (The Twelve-Factor App)

- **Código-base:**

O código-fonte do aplicativo deve ser controlado por um sistema de controle de versão, como o [`Git`](https://git-scm.com/), para que possa ser gerenciado adequadamente.

- **Dependências:**

Todas as dependências do aplicativo, como bibliotecas e frameworks, devem ser claramente declaradas e isoladas para evitar conflitos entre versões.

- **Configurações:**

As configurações do aplicativo, como chaves de API e URLs de banco de dados, devem ser armazenadas em variáveis de ambiente e não no código-fonte para facilitar as configurações em diferentes ambientes.

- **Backings services(Serviços de apoio):**

Os serviços de back-end, como banco de dados e filas, devem ser tratados como recursos conectáveis, permitindo que o aplicativo seja implementado em diferentes ambientes de maneira consistente.

- **Build, release, run (Compilar, liberar, executar):**

O processo de compilação, liberação e execução do aplicativo deve ser separado para facilitar a implantação e a execução em diferentes ambientes.

- **Processos:**

O aplicativo/serviço deve ser executado como um ou mais processos sem estado, permitindo que ele seja dimensionado horizontalmente conforme necessário.

- **Port binding (Vinculação de porta):**

Os serviços devem ser expostos por meio de portas para facilitar a comunicação entre os componentes do serviço.

- **Concurrency (Concorrência):**

O aplicativo/serviço deve ser projetado para dimensionar horizontalmente, permitindo que seja executado em vários nós de processamento para atender às demandas de carga de trabalho.

- **Disposability (Descartabilidade):**

O aplicativo/serviço deve ser projetado para ser facilmente descartável, permitindo que ele seja facilmente reimplantado e substituído se necessário.

- **Dev/prod parity (Paridade de desenvolvimento/produção):**

Os ambientes de desenvolvimento, teste e produção devem ser mantidos o mais consistentes possível para evitar problemas de compatibilidade e garantir que o aplicativo possa ser facilmente movido entre eles.

- **Logs (Registros):**

Os logs do aplicativo devem ser tratados como fluxos de eventos e não como arquivos estáticos para facilitar o monitoramento e a depuração.

- **Admin processes (Processos de administração):**

As tarefas administrativas, como migrações de banco de dados e backups, devem ser executadas como processos separados e isolados para minimizar o impacto no aplicativo em si.

## Por fim

Em resumo, os microserviços, os 12 fatores e os sistemas distribuídos são abordagens fundamentais para o desenvolvimento, implantação e gerenciamento de aplicativos escaláveis e resilientes em nuvem. Enquanto os sistemas distribuídos fornecem uma base sólida para a criação de aplicativos que compartilham recursos e dados entre vários dispositivos em uma rede, os microserviços fornecem uma abordagem para projetar aplicativos divididos em componentes independentes que podem ser implantados e gerenciados separadamente. E, os 12 fatores fornecem um conjunto de práticas recomendadas para garantir que os aplicativos baseados em nuvem sejam desenvolvidos e implantados de maneira consistente e confiável. Ao adotar essas abordagens, as empresas podem obter maior flexibilidade, agilidade e resiliência em seus aplicativos, bem como reduzir o tempo e o custo de desenvolvimento e implantação.

## Referências

Martin Fowler - Microservices: [https://martinfowler.com/articles/microservices.html](https://martinfowler.com/articles/microservices.html)
Chris Richardson - Microservices.io: [https://microservices.io/](https://microservices.io/)
Sam Newman - Building Microservices: [https://samnewman.io/books/building_microservices/](https://samnewman.io/books/building_microservices/)
Kubernetes - Microservices: [https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/](https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/)
Spring Boot - Microservices: [https://spring.io/microservices](https://spring.io/microservices)
Amazon Web Services - Microservices: [https://aws.amazon.com/microservices/](https://aws.amazon.com/microservices/)
Microsoft Azure - Microservices: [https://azure.microsoft.com/en-us/solutions/microservice-applications]https://azure.microsoft.com/en-us/solutions/microservice-applications)
IBM - Microservices: [https://www.ibm.com/cloud/learn/microservices](https://www.ibm.com/cloud/learn/microservices)
NGINX - Microservices: [https://www.nginx.com/resources/library/microservices/](https://www.nginx.com/resources/library/microservices/)
[microservices.io](https://microservices.io/index.html)
[What is Microservice Architecture?](https://badia-kharroubi.gitbooks.io/microservices-architecture/content/strategy/what-is-microservices-architecture.html)
[128 - Microserviços](https://www.lambda3.com.br/2019/02/lambda3-podcast-128-microsservicos/), __este é uma série de 6 epsódios de podcast em PT-BR__.
[Microsserviços Prontos Para a Produção: Construindo Sistemas Padronizados em uma Organização de Engenharia de Software](https://www.amazon.com.br/Microsservi%C3%A7os-Prontos-Para-Produ%C3%A7%C3%A3o-Padronizados/dp/8575226215/ref=sr_1_1?qid=1685722493&refinements=p_27%3ASusan+Fowler&s=books&sr=1-1)
[Arquitetura de microsserviços](https://learn.microsoft.com/pt-br/dotnet/architecture/microservices/architect-microservice-container-applications/microservices-architecture)