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 novas funções e façam alterações com mais velocidade, sem precisar reescrever trechos enormes de código.
Teste o Compass grátis
Aprimore a experiência de desenvolvedor, catalogue todos os serviços e melhore a integridade do software.
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 função do aplicativo.
Muito sustentável e testável
Com os microsserviços, equipes podem testar novas funções e reverter caso algo não funcione. Assim, fica mais fácil atualizar o código, e o tempo de entrada no mercado para novas funções 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.
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.
Próximo tópico
Leitura recomendada
Marque essas referências como favoritas para aprender sobre desenvolvimento de software e ficar por dentro das novidades do Compass