Close

Arquitetura de microsserviços

A arquitetura de microsserviços proporciona um sistema moderno, distribuído e bastante escalável


No mundo de hoje, modernizar aplicativos muitas vezes significa migrar para aplicativos nativos da nuvem, criados como microsserviços. Em seguida, eles são implementados com tecnologias de contêiner, como Docker e Kubernetes. A Netflix e a Atlassian conseguiram, bem como inúmeras outras empresas. E deu certo porque a arquitetura de microsserviços melhora a escalabilidade, a velocidade de desenvolvimento e a iteração de serviços.

A arquitetura de microsserviços divide o aplicativo em vários serviços que podem ser implementados com independência e se comunicam por meio de APIs. Assim, cada serviço pode ser implementado e escalado com autonomia. Essa abordagem permite a entrega rápida e frequente de aplicativos grandes e complexos. Ao contrário do aplicativo monolítico, a arquitetura de microsserviços permite que equipes implementem novos recursos e façam alterações com mais velocidade, sem precisar reescrever trechos enormes de código.

Algumas características da arquitetura de microsserviços:

Serviços com diversos componentes

Microsserviços são formados por serviços de componentes individuais e pouco associados que podem ser desenvolvidos, implementados, operados, alterados e reimplementados sem comprometer o funcionamento de outros serviços ou a integridade do aplicativo. Assim, é possível acelerar e facilitar a implementação de cada recurso do aplicativo.

Muito sustentável e testável

Com os microsserviços, equipes podem testar novos recursos e reverter caso algo não funcione. Assim, fica mais fácil atualizar o código, e o tempo de entrada no mercado para novos recursos diminui. Além disso, simplifica o processo de identificação e correção de falhas e bugs em serviços individuais.

Propriedade de equipes pequenas

Equipes pequenas e independentes costumam criar serviços dentro dos microsserviços, o que é um incentivo para a adoção de práticas ágeis e de DevOps. Assim elas ganham autonomia e rapidez para trabalhar, o que encurta o ciclo de desenvolvimento.

Organização em torno de funcionalidades comerciais

A abordagem de microsserviços organiza serviços com base em funcionalidades comerciais. As equipes são multidisciplinares e têm uma variedade completa de habilidades necessárias para o desenvolvimento, trabalhando para processar uma funcionalidade individual.

Infraestrutura automatizada

Equipes que criam e mantêm microsserviços costumam seguir práticas de automação de infraestrutura, como integração (CI), entrega (CD) e implementação (também CD) contínuas. Assim, é possível criar e implementar cada serviço com independência, sem afetar outras equipes. Além disso, a equipe pode implementar a nova versão do serviço lado a lado com a versão anterior.

Exemplo de arquitetura de microsserviços


Considere um projeto hipotético de software de comércio eletrônico como exemplo. O diagrama a seguir é de um site de comércio eletrônico com aplicativos web e para dispositivos móveis que interagem com vários microsserviços, cada um com funcionalidades específicas para um domínio.

Aplicativos web modernos são executados em navegadores e, muitas vezes, mostrados pela rede de distribuição de conteúdo (CDN, na sigla em inglês). A CDN tem um benefício: distribuir aplicativos web para servidores de todo o mundo, para que possam ser baixados com rapidez em navegadores web. Além disso, as CDNs disponibilizam ativos de mídia, como imagens, áudio e vídeo. Por exemplo, neste sistema, imagens e vídeos dos produtos à venda são exibidos pela CDN.

Diagrama de microsserviços na web

Os microsserviços nesse gráfico são:

Serviço de conta

Mostra informações sobre a conta do cliente, como endereço e dados de pagamento.

Serviço de estoque

Mostra informações atualizadas sobre o estoque de produtos que o cliente pode comprar.

Serviço de carrinho

Permite que o cliente selecione os produtos do estoque que quer comprar.

Serviço de pagamento

Permite que os clientes paguem pelos produtos no carrinho.

Serviço de frete

Agenda o empacotamento e a entrega do produto comprado.

Aplicativos e microsserviços interagem por meio de APIs REST publicadas por cada microsserviço. Um gateway de API permite que esses aplicativos usem as APIs disponibilizadas pelos microsserviços e possibilita a troca de microsserviços com a mesma API.

Cada microsserviço é composto por um serviço e um banco de dados. Os serviços lidam com a API REST, implementam a lógica de negócios e armazenam informações no banco de dados. No caso dos microsserviços, recursos como bancos de dados e filas ficam isolados uns dos outros, de acordo com a metodologia 12 Factor App.

Como criar microsserviços


Para muitas empresas, o primeiro passo é começar com a arquitetura monolítica. Em seguida, é preciso dividir a base de código em vários serviços, implementar os padrões certos para falha normal e recuperação de problemas de rede, lidar com a consistência dos dados, monitorar a carga de serviço etc. Mas essa é só a parte técnica. Também é necessário reorganizar equipes e, talvez, adotar a cultura de DevOps.

E depois vem a parte difícil: dividir a arquitetura monolítica em microsserviços. Refatorar um esquema de banco de dados monolítico pode ser uma operação delicada. É importante identificar com clareza de quais conjuntos de dados cada serviço precisa e de quaisquer sobreposições. A entrega contínua ajuda a reduzir os riscos de falha no lançamento e a garantir que a equipe esteja focada em criar e executar o aplicativo, em vez de ficar presa na implementação.

Microsserviços versus arquitetura monolítica


Arquitetura monolítica é o modelo tradicional do programa de software, que é construído como unidade unificada e é autossuficiente e independente de outros aplicativos. Arquitetura de microsserviços é o contrário, pois usa vários serviços implementáveis com independência. Os monólitos podem ser convenientes no início da vida de um projeto para facilitar o gerenciamento de código, a sobrecarga cognitiva e a implementação. Mas, quando o aplicativo monolítico cresce e se torna complexo, fica difícil escalar, a implementação contínua fica mais desafiadora e as atualizações podem ser complicadas.

Enquanto o aplicativo monolítico é criado como unidade indivisível, os microsserviços dividem essa unidade em uma coleção de unidades independentes que contribuem para o todo. O aplicativo é criado como uma série de serviços implementáveis com independência, descentralizados e desenvolvidos com autonomia.

Arquitetura distribuída


Os microsserviços são um sistema distribuído, ou seja, uma coleção de programas de computador que utilizam recursos computacionais em vários pontos centrais de computação diferentes para atingir um objetivo comum e compartilhado. Sistemas distribuídos ajudam a aumentar a confiabilidade e o desempenho do sistema, além de facilitar a escalada.

Os pontos centrais no sistema distribuído oferecem redundância, pois, se um deles falha, há outros prontos para substituição. A escalabilidade de cada ponto central pode ser horizontal e vertical, o que melhora o desempenho. Vale lembrar que é possível adicionar mais pontos centrais para absorver cargas elevadas recebidas pelo sistema.

Kubernetes vs. Docker


O Docker é uma plataforma comercial de conteinerização e tempo de execução que ajuda desenvolvedores a criar, implementar e executar contêineres. Embora ofereça uma maneira eficiente de empacotar e distribuir aplicativos conteinerizados, usar apenas o Docker para executar e gerenciar contêineres em escala é um desafio.

O Kubernetes é uma popular plataforma de código aberto que orquestra sistemas de tempo de execução em um cluster de recursos em rede e pode ser usada com ou sem o Docker. Enquanto o Docker é um tempo de execução do contêiner, o Kubernetes é uma plataforma para executar e gerenciar contêineres de muitos tempos de execução de contêineres.

Gerenciamento de configurações


O gerenciamento de configuração de software é um processo que gerencia, organiza, rastreia e monitora as alterações nos metadados de configuração de um sistema de software. É comumente usado junto com o controle de versão e a infraestrutura de implementação/integração contínuas.

O gerenciamento de configuração ajuda as equipes de engenharia a criar sistemas robustos e estáveis por meio do uso de ferramentas de gerenciamento e monitoramento automáticos das atualizações dos dados de configuração. Ele ajuda a gerenciar melhor a proliferação de software em uma arquitetura de microsserviço, criando uma “fonte da verdade” com um local central para configuração.

Chandler Harris
Chandler Harris

Chandler Harris é escritor e estrategista de marketing da Atlassian. Escreveu mais de 40 publicações diferentes sobre assuntos variados como tecnologia, ciências, negócios, finanças e educação.


Leitura recomendada

Marque essas referências como favoritas para aprender sobre desenvolvimento de software e ficar por dentro das novidades do Compass

Ilustração DevOps

Comunidade do Compass

ilustração de superação de obstáculos

Tutorial: criar novo componente

Ilustração do mapa

Comece a usar o Compass de graça

Inscreva-se para receber a newsletter de DevOps

Thank you for signing up