Pular para o conteúdo principal

Módulo 13: Spring Cloud e Microsserviços

🎯 Objetivos do Módulo​

Ao final deste módulo, você será capaz de:

  • ✅ Compreender a arquitetura de microsserviços vs monolítica
  • ✅ Configurar um Service Discovery com Eureka
  • ✅ Centralizar a configuração com Spring Cloud Config
  • ✅ Criar uma API Gateway com Spring Cloud Gateway
  • ✅ Implementar a comunicação entre serviços com Feign
  • ✅ Aplicar padrões de resiliência com Resilience4j
  • ✅ Compreender os padrões: Circuit Breaker, Retry, Rate Limiter

📋 Pré-requisitos​

Antes de começar este módulo, certifique-se de dominar:

  • ✅ Módulo 1-6: Fundamentos de Spring Boot e Spring Data JPA
  • ✅ Módulo 7: Transações e configuração
  • ✅ Módulo 8: Spring Security (para proteger os serviços)
  • ✅ Módulo 12: Docker e deploy (para orquestrar os serviços)
  • ✅ Conceitos de REST API
  • ✅ Docker e Docker Compose (essencial!)

🏗️ Arquitetura do Módulo​


📚 Plano do Módulo​

Capítulos Teóricos​

#CapítuloDuraçãoDescrição
1Introdução aos Microsserviços45 minMonolito vs Microsserviços, patterns, 12-Factor App
2Service Discovery - Eureka1hEureka Server/Client, Load Balancing
3Configuração Centralizada1hSpring Cloud Config, Git backend, Refresh
4API Gateway1h15Spring Cloud Gateway, Rotas, Filtros
5Comunicação entre Serviços1h30Feign, Resilience4j, Circuit Breaker

Trabalhos Práticos​

#TPDuraçãoDescrição
1Eureka Server e Clients1h30Criar o registro de serviços
2Config Server1hConfiguração centralizada Git
3API Gateway1h30Gateway com routing e filtros
4Feign + Resilience4j2hComunicação resiliente

Duração total estimada: ~12 horas


🎬 Antes / Depois deste Módulo​

❌ ANTES (Arquitetura Monolítica)​

┌─────────────────────────────────────────────┐
│ MONOLITH APPLICATION │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Users │ │Products │ │ Orders │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ ┌─────────────────────────────────┐ │
│ │ SINGLE DATABASE │ │
│ └─────────────────────────────────┘ │
└─────────────────────────────────────────────┘

Problemas:
- Um bug = toda a aplicação fora do ar
- Escalabilidade: tudo ou nada
- Deploy: precisa redeployar tudo
- Tecnologias: apenas uma stack
- Times: conflitos de merge

✅ DEPOIS (Arquitetura de Microsserviços)​

┌──────────┐   ┌──────────┐   ┌──────────┐
│ Users │ │ Products │ │ Orders │
│ Service │ │ Service │ │ Service │
│ :8081 │ │ :8082 │ │ :8083 │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
│ ┌─────────┴─────────┐ │
└────┤ Eureka Server ├────┘
│ :8761 │
└─────────┬─────────┘
│
┌─────────┴─────────┐
│ API Gateway │
│ :8080 │
└───────────────────┘

Vantagens:
- Isolamento de falhas
- Escalabilidade independente
- Deploy contínuo
- Polyglot (Java, Node, Python...)
- Times autônomos

🧩 Componentes Spring Cloud​


🏢 Caso de Uso: Microsserviços E-Commerce​

Ao longo deste módulo, construiremos uma plataforma de e-commerce:

Serviços a Criar​

ServiçoResponsabilidadePortaBanco de dados
eureka-serverRegistro de serviços8761-
config-serverConfiguração centralizada8888Git repo
api-gatewayPonto de entrada único8080-
user-serviceGestão de usuários8081PostgreSQL
product-serviceCatálogo de produtos8082PostgreSQL
order-serviceGestão de pedidos8083PostgreSQL
inventory-serviceEstoque de produtos8084PostgreSQL
notification-serviceEmails/SMS8085-

Fluxo de um Pedido​


🔑 Conceitos-Chave​

1. Service Discovery (Por quê?)​

Sem Service Discovery:
- URLs hardcoded: http://192.168.1.10:8081
- Se o serviço muda → tudo quebra
- Load balancing manual

Com Eureka:
- Serviços se registram: "Eu sou user-service"
- Clientes perguntam: "Onde está user-service?"
- Eureka responde com todas as instâncias
- Load balancing automático

2. Configuração Centralizada (Por quê?)​

Sem Config Server:
- Cada serviço tem seu application.properties
- Alterar uma senha do banco = modificar 10 arquivos
- Redeploy de todos os serviços

Com Config Server:
- Configuração no Git
- Um único local para modificar
- Refresh sem reiniciar
- Criptografia de segredos

3. API Gateway (Por quê?)​

Sem Gateway:
- Cliente conhece todos os serviços
- CORS precisa ser tratado em todos
- Auth implementada em todos
- Rate limiting impossível

Com Gateway:
- Ponto de entrada único
- Auth centralizada
- Rate limiting
- Logging centralizado
- Transformação de requests/responses

4. Circuit Breaker (Por quê?)​

Sem Circuit Breaker:
- Serviço A chama Serviço B
- Serviço B está fora do ar
- Serviço A espera... timeout
- Falha em cascata → tudo fora do ar

Com Circuit Breaker:
- Detecta falhas
- "Abre" o circuito
- Retorna fallback imediato
- "Fecha" quando B volta

📦 Stack Técnica​

Dependências Maven (BOM)​

<!-- No POM pai -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2023.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

Versões Compatíveis​

Spring BootSpring CloudJava
3.2.x2023.0.x (Leyton)17+
3.1.x2022.0.x (Kilburn)17+
3.0.x2022.0.x (Kilburn)17+

⚠️ Quando Usar Microsserviços?​

✅ Boas Razões​

  • Aplicação grande com múltiplos times
  • Necessidade de escalabilidade diferente por componente
  • Domínios de negócio bem definidos (Bounded Contexts)
  • Necessidade de resiliência (isolamento de falhas)
  • Deploys frequentes e independentes

❌ Más Razões​

  • "Está na moda"
  • Projeto pequeno / time pequeno
  • MVP / Protótipo
  • Time sem experiência DevOps
  • Infraestrutura limitada

💡 Regra de Ouro​

"Se você não tem os problemas de um monolito, você não precisa de microsserviços."

— Martin Fowler


🗺️ Progressão do Módulo​


🚀 Pronto para Começar?​

Este módulo é avançado e requer bom domínio dos módulos anteriores. Se você está pronto:

  1. Instale o Docker (essencial para este módulo)
  2. Certifique-se de ter 16GB+ de RAM (vários serviços)
  3. Prepare uma IDE com suporte a Spring (IntelliJ recomendado)

Começar o Capítulo 1: Introdução aos Microsserviços →


Voltar para o início