Saltar al contenido principal

Módulo 13: Spring Cloud y Microservicios

🎯 Objetivos del Módulo​

Al finalizar este módulo, usted será capaz de:

  • ✅ Comprender la arquitectura de microservicios vs monolítica
  • ✅ Configurar un Service Discovery con Eureka
  • ✅ Centralizar la configuración con Spring Cloud Config
  • ✅ Crear una API Gateway con Spring Cloud Gateway
  • ✅ Implementar la comunicación entre servicios con Feign
  • ✅ Aplicar patrones de resiliencia con Resilience4j
  • ✅ Comprender los patrones: Circuit Breaker, Retry, Rate Limiter

📋 Prerrequisitos​

Antes de comenzar este módulo, asegúrese de dominar:

  • ✅ Módulo 1-6: Fundamentos de Spring Boot y Spring Data JPA
  • ✅ Módulo 7: Transacciones y configuración
  • ✅ Módulo 8: Spring Security (para asegurar los servicios)
  • ✅ Módulo 12: Docker y despliegue (para orquestar los servicios)
  • ✅ Conceptos de REST API
  • ✅ Docker y Docker Compose (¡esencial!)

🏗️ Arquitectura del Módulo​


📚 Plan del Módulo​

Capítulos Teóricos​

#CapítuloDuraciónDescripción
1Introducción a los Microservicios45 minMonolito vs Microservicios, patrones, 12-Factor App
2Service Discovery - Eureka1hEureka Server/Client, Load Balancing
3Configuración Centralizada1hSpring Cloud Config, backend Git, Refresh
4API Gateway1h15Spring Cloud Gateway, Rutas, Filtros
5Comunicación entre Servicios1h30Feign, Resilience4j, Circuit Breaker

Trabajos Prácticos​

#TPDuraciónDescripción
1Eureka Server y Clientes1h30Crear el registro de servicios
2Config Server1hConfiguración centralizada Git
3API Gateway1h30Gateway con routing y filters
4Feign + Resilience4j2hComunicación resiliente

Duración total estimada: ~12 horas


🎬 Antes / Después de este Módulo​

❌ ANTES (Arquitectura Monolítica)​

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

Problèmes:
- Un bug = toute l'app down
- Scaling: tout ou rien
- Déploiement: tout redéployer
- Technologies: une seule stack
- Équipes: conflits de merge

✅ DESPUÉS (Arquitectura de Microservicios)​

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

Ventajas:
- Aislamiento de fallos
- Escalado independiente
- Despliegue continuo
- Polyglot (Java, Node, Python...)
- Equipos autónomos

🧩 Componentes de Spring Cloud​


🏢 Caso de Uso: Microservicios E-Commerce​

A lo largo de este módulo, construiremos una plataforma de e-commerce:

Servicios a Crear​

ServicioResponsabilidadPuertoBase de datos
eureka-serverRegistro de servicios8761-
config-serverConfiguración centralizada8888Repositorio Git
api-gatewayPunto de entrada único8080-
user-serviceGestión de usuarios8081PostgreSQL
product-serviceCatálogo de productos8082PostgreSQL
order-serviceGestión de pedidos8083PostgreSQL
inventory-serviceStock de productos8084PostgreSQL
notification-serviceEmails/SMS8085-

Flujo de un Pedido​


🔑 Conceptos Clave​

1. Service Discovery (¿Por qué?)​

Sin Service Discovery:
- URLs hardcodeadas: http://192.168.1.10:8081
- Si el servicio se mueve → todo falla
- Load balancing manual

Con Eureka:
- Los servicios se registran: "Soy user-service"
- Los clientes preguntan: "¿Dónde está user-service?"
- Eureka responde con todas las instancias
- Load balancing automático

2. Configuración Centralizada (¿Por qué?)​

Sin Config Server:
- Cada servicio tiene su application.properties
- Cambiar una contraseña de BD = modificar 10 archivos
- Re-desplegar todos los servicios

Con Config Server:
- Configuración en Git
- Un solo lugar para modificar
- Refresh sin reinicio
- Encriptación de secretos

3. API Gateway (¿Por qué?)​

Sin Gateway:
- El cliente conoce todos los servicios
- CORS a gestionar en todas partes
- Auth a implementar en todas partes
- Rate limiting imposible

Con Gateway:
- Punto de entrada único
- Autenticación centralizada
- Rate limiting
- Logging centralizado
- Transformación de requests/responses

4. Circuit Breaker (¿Por qué?)​

Sin Circuit Breaker:
- Servicio A llama a Servicio B
- Servicio B está caído
- Servicio A espera... timeout
- Falla en cascada → todo caído

Con Circuit Breaker:
- Detecta los fallos
- "Abre" el circuito
- Devuelve fallback inmediato
- "Cierra" cuando B vuelve

📦 Stack Técnico​

Dependencias Maven (BOM)​

<!-- Dans le parent POM -->
<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>

Versiones Compatibles​

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

⚠️ ¿Cuándo Usar Microservicios?​

✅ Buenas Razones​

  • Aplicación grande con múltiples equipos
  • Necesidad de escalado diferente por componente
  • Dominios de negocio bien definidos (Bounded Contexts)
  • Necesidad de resiliencia (aislamiento de fallos)
  • Despliegues frecuentes e independientes

❌ Malas Razones​

  • "Está de moda"
  • Proyecto pequeño / equipo pequeño
  • MVP / Prototipo
  • Equipo sin experiencia DevOps
  • Infraestructura limitada

💡 Regla de Oro​

"Si usted no tiene los problemas de un monolito, no necesita microservicios."

— Martin Fowler


🗺️ Progresión del Módulo​


🚀 ¿Listo para Comenzar?​

Este módulo es avanzado y requiere un buen dominio de los módulos anteriores. Si está listo:

  1. Instale Docker (esencial para este módulo)
  2. Asegúrese de tener 16GB+ de RAM (varios servicios)
  3. Prepare un IDE con soporte para Spring (se recomienda IntelliJ)

Comenzar el Capítulo 1: Introducción a los Microservicios →


Volver al inicio