Pular para conteúdo

O que é um Microservice

Definição

Um microserviço é uma abordagem arquitetural para o desenvolvimento de software onde uma aplicação é estruturada como uma coleção de serviços pequenos, independentes e fracamente acoplados. Cada microserviço:

  • É focado em uma única funcionalidade ou domínio de negócio
  • Executa seu próprio processo
  • Comunica-se através de mecanismos leves, geralmente HTTP/REST ou mensageria
  • Pode ser desenvolvido, implantado e escalado independentemente
  • Geralmente possui seu próprio armazenamento de dados

Características Principais

1. Independência

Cada microserviço pode ser desenvolvido, implantado, atualizado e escalado de forma independente, sem afetar outros serviços. Isso permite:

  • Ciclos de desenvolvimento mais rápidos
  • Implantações mais frequentes e com menor risco
  • Escalabilidade granular (escalar apenas os serviços que precisam de mais recursos)

2. Especialização Tecnológica

Diferentes microserviços podem utilizar diferentes tecnologias, linguagens de programação e frameworks, permitindo:

  • Escolher a melhor ferramenta para cada trabalho específico
  • Adotar novas tecnologias de forma incremental
  • Experimentar novas abordagens sem comprometer todo o sistema

3. Resiliência

O isolamento entre microserviços aumenta a resiliência do sistema como um todo:

  • Falhas em um serviço não necessariamente afetam outros serviços
  • É possível implementar mecanismos de tolerância a falhas, como circuit breakers
  • Recuperação mais rápida, pois apenas o serviço afetado precisa ser reiniciado

4. Organização por Domínio de Negócio

Os microserviços são tipicamente organizados em torno de capacidades de negócio, não de camadas técnicas:

  • Alinhamento com os domínios de negócio (seguindo princípios de Domain-Driven Design)
  • Equipes multifuncionais responsáveis por serviços específicos
  • Melhor compreensão do código e do propósito de cada serviço

Comparação com Arquitetura Monolítica

mmd

Monolítico

  • Simplicidade: Mais fácil de desenvolver inicialmente
  • Implantação: Uma única unidade de implantação
  • Escalabilidade: Escala como uma unidade, mesmo que apenas partes precisem de mais recursos
  • Consistência: Transações mais simples dentro do mesmo processo
  • Desenvolvimento: Pode se tornar complexo e difícil de manter à medida que cresce

Microserviços

  • Complexidade: Mais complexo de desenvolver e gerenciar inicialmente
  • Implantação: Múltiplas unidades de implantação independentes
  • Escalabilidade: Escala por serviço, otimizando recursos
  • Consistência: Requer estratégias para consistência eventual entre serviços
  • Desenvolvimento: Mais fácil de manter e evoluir serviços individuais

Desafios dos Microserviços

1. Complexidade Distribuída

  • Comunicação entre serviços introduz latência
  • Necessidade de lidar com falhas de rede- Debugging mais complexo em sistemas distribuídos
  • Necessidade de monitoramento e rastreamento distribuídos

2. Consistência de Dados

  • Transações distribuídas são difíceis de implementar
  • Necessidade de adotar padrões como Saga para operações que envolvem múltiplos serviços
  • Consistência eventual em vez de consistência forte

3. Governança

  • Padronização de APIs e contratos
  • Versionamento de serviços
  • Documentação e descoberta de serviços

4. Operacional

  • Necessidade de automação para implantação e monitoramento
  • Complexidade de infraestrutura (containers, orquestração)
  • Maior sobrecarga operacional

Padrões Comuns em Microserviços

1. API Gateway

Um componente que atua como ponto de entrada único para todos os clientes, roteando requisições para os serviços apropriados.

mmd