Microserviços são uma abordagem arquitetônica para desenvolver software onde uma aplicação é composta por pequenos serviços independentes que se comunicam entre si. Além disso, cada serviço é executado como um processo separado e se comunica através de APIs bem definidas. Essa abordagem contrasta com a arquitetura monolítica tradicional, onde todas as funcionalidades de uma aplicação são integradas em um único código.
Monolitos e Microserviços
Antes de começar a entender microserviços, vamos realizar algumas comparações entre monolitos e microserviços.
Primeiramente, a arquitetura monolitica é um modelo tradicional no desenvolvimento de sistemas. Assim, dentre as características dessa arquitetura, estão a base de código centralizada, componentes interdependentes e uma maior demora na modificação da arquitetura dado que uma mudança afeta toda a base de código.
Pontos positivos | Pontos negativos |
Início do desenvolvimento simples | Maior coordenação necessária conforme o projeto e a equipe aumenta. |
Latencia baixa na comunicação entre os processos | Modularidade é afetada |
Única base de código | Escalonamento fraco e demora na construção da aplicação |
Recomendado para inicio de um projeto onde requisitos não estão totalmente estabelecidos | Manutenção pode se tornar complexa |
Fonte: Manual do Devops: Como obter agilidade, confiabilidade e segurança em organizações tecnológicas.
Enquanto isso, os microserviços são uma abordagem focada em criar serviços independentes e pequenos, possuindo um contexto bem definido e se comunicando com outros serviços a partir de uma interface bem definida.
Pontos positivos | Pontos negativos |
Unidades são simples | Latência de rede |
A escala e o desempenho são independentes | Gestão de múltiplas pequenas unidades |
Testes independentes | Necessário ferramentas sofisticadas para gerenciamento |
Fonte: Manual do Devops: Como obter agilidade, confiabilidade e segurança em organizações tecnológicas.
Características os Microserviços
Os microserviços possuem algumas características que iremos abordar a seguir.
Gestão de dados descentralizada
A gestão de dados descentralizada distribui os dados entre vários pontos de controle ou nós em uma rede, em vez de armazená-los ou gerenciá-los por uma única entidade centralizada.
Escalabilidade
Um dos principais motivos que levam as organizações a adotarem microserviços é a capacidade de escalá-los horizontalmente. Isso significa que você pode aumentar o número de instâncias de um serviço específico que requer mais recursos. No entanto, essa vantagem vem acompanhada de uma gestão mais complexa de orquestração e coordenação de microserviços.
Organização entorno das capacidades de negócio
Em vez de organizar os serviços com base em funcionalidades técnicas ou camadas tecnológicas, a abordagem baseada em capacidades de negócio foca em decompor a aplicação de acordo com as funções e processos de negócio essenciais. Uma capacidade de negócio é uma função ou processo específico que a organização precisa para atingir seus objetivos. Exemplos incluem gestão de clientes, processamento de pedidos, faturamento, etc.
Inspirado no conceito de “bounded context” do Domain-Driven Design (DDD), cada microserviço representa um contexto delimitado de um domínio de negócio, com suas próprias regras e modelos de dados.
Automação
A automação de CI/CD (Continuous Integration/Continuous Delivery) é essencial para a eficácia e eficiência do desenvolvimento de software, especialmente em uma arquitetura de microserviços. Implementar CI/CD em microserviços envolve uma série de práticas e ferramentas que garantem a integração contínua de código, testes automáticos, entrega e implantação contínuas, permitindo que novas funcionalidades e correções de bugs sejam entregues rapidamente e com alta qualidade.
Desafios dos Microserviços
Existem diversos desafios ao usar microserviços. Abaixo há uma lista de alguns desafios.
1. Complexidade: Gerenciar uma grande quantidade de serviços pode se tornar complicado. É necessário um bom sistema de orquestração e monitoramento.
2. Comunicação entre Serviços: A comunicação entre microserviços pode introduzir latência e complexidade adicional, requerendo soluções robustas para gerenciamento de APIs e mensagens.
3. Transações Distribuídas: Garantir a consistência de dados através de múltiplos serviços pode ser desafiador, exigindo estratégias como sagas ou compensações.
4. DevOps e Automação: A abordagem de microserviços exige uma cultura DevOps madura, com processos de CI/CD bem estabelecidos para gerenciar o deploy contínuo e a integração de serviços.
5. Monitoramento e Debugging: Ferramentas e práticas eficazes de monitoramento e rastreamento são cruciais para detectar e resolver problemas em um ambiente de microserviços.
Padrões de Microserviços
Por fim, existem diversos padrões ao usar microserviços. Abaixo há uma lista de alguns deles.
1. API Gateway: Um ponto de entrada unificado para todas as solicitações que vão para os microserviços. Ele gerencia a autenticação, autorização, roteamento de solicitações e agregação de respostas.
2. Circuit Breaker: Um padrão para aumentar a resiliência de microserviços, impedindo que falhas em um serviço causem falhas em cascata no sistema. Implementações populares incluem Hystrix e Resilience4j.
3. Saga: Um padrão para gerenciar transações distribuídas que coordena uma série de transações locais em diferentes serviços.
Conclusão
Portanto, a arquitetura de microserviços oferece uma maneira poderosa e flexível de construir e escalar aplicações modernas. Embora apresente desafios, os benefícios de agilidade, escalabilidade e resiliência fazem dela uma escolha popular para muitas organizações. Adotar microserviços exige uma mudança de mentalidade e práticas de desenvolvimento, mas pode resultar em sistemas mais robustos e adaptáveis às necessidades de negócio em constante evolução.
Para mais artigos como esse, clique aqui.