Curso de Spring Boot
Muchas aplicaciones modernas no se construyen como una sola aplicación grande.
En su lugar se utilizan microservicios.
Los microservicios dividen el sistema en varios servicios pequeños e independientes.
Cada servicio tiene una responsabilidad específica.
17.1 Qué es un microservicio
Un microservicio es una aplicación pequeña que se encarga de una parte concreta del sistema.
Ejemplo:
1Sistema ecommerce
Podría dividirse en:
1Servicio usuarios 2Servicio pedidos 3Servicio pagos 4Servicio inventario 5Servicio notificaciones
Cada uno funciona de forma independiente.
17.2 Arquitectura monolítica vs microservicios
Monolito
Todo está en una sola aplicación.
1Frontend 2Backend 3Base de datos
Problemas:
- difícil escalar
- difícil mantener
- despliegues complejos
Microservicios
El sistema se divide en servicios independientes.
1Frontend 2 ↓ 3API Gateway 4 ↓ 5Users Service 6Orders Service 7Payments Service
Cada servicio puede tener su propia base de datos.
17.3 Ventajas de microservicios
| ventaja | explicación |
|---|---|
| escalabilidad | cada servicio escala por separado |
| independencia | equipos trabajan en servicios distintos |
| flexibilidad | cada servicio puede usar tecnología distinta |
| despliegue rápido | actualizar un servicio sin parar todo |
17.4 Desventajas
| problema | explicación |
|---|---|
| más complejidad | más servicios |
| comunicación | servicios deben hablar entre sí |
| monitorización | más difícil |
17.5 Comunicación entre microservicios
Los microservicios normalmente se comunican mediante HTTP REST.
Ejemplo:
1OrderService → UserService
Petición HTTP:
1GET http://user-service/users/10
17.6 Ejemplo simple de microservicio
User Service
1@RestController 2@RequestMapping("/users") 3public class UserController { 4 5 @GetMapping("/{id}") 6 public User getUser(@PathVariable Long id) { 7 8 return new User(id, "Ana"); 9 10 } 11 12}
17.7 Llamar a otro microservicio
Podemos llamar usando RestTemplate.
Ejemplo
1@Service 2public class OrderService { 3 4 private final RestTemplate restTemplate = new RestTemplate(); 5 6 public User getUser(Long userId) { 7 8 String url = "http://localhost:8081/users/" + userId; 9 10 return restTemplate.getForObject(url, User.class); 11 12 } 13 14}
17.8 Usar Feign Client
Una forma mucho más cómoda es Feign Client.
Feign convierte llamadas HTTP en interfaces Java.
17.9 Añadir dependencia
1<dependency> 2 <groupId>org.springframework.cloud</groupId> 3 <artifactId>spring-cloud-starter-openfeign</artifactId> 4</dependency>
17.10 Activar Feign
1@EnableFeignClients 2@SpringBootApplication 3public class Application { 4 5}
17.11 Crear cliente Feign
1@FeignClient(name="user-service", url="http://localhost:8081") 2public interface UserClient { 3 4 @GetMapping("/users/{id}") 5 User getUser(@PathVariable Long id); 6 7}
17.12 Usar el cliente
1@Service 2public class OrderService { 3 4 private final UserClient userClient; 5 6 public OrderService(UserClient userClient) { 7 this.userClient = userClient; 8 } 9 10 public User getUser(Long userId) { 11 12 return userClient.getUser(userId); 13 14 } 15 16}
Spring hace la llamada HTTP automáticamente.
17.13 API Gateway
Cuando hay muchos microservicios se usa un API Gateway.
El gateway es la puerta de entrada al sistema.
Arquitectura:
1Cliente 2 ↓ 3API Gateway 4 ↓ 5Users Service 6Orders Service 7Payments Service
Ventajas:
- seguridad centralizada
- control de tráfico
- simplificación del frontend
17.14 Service Discovery
Cuando hay muchos servicios se usa un sistema de descubrimiento.
Ejemplo:
1Eureka 2Consul 3Kubernetes
Esto permite que los servicios se encuentren automáticamente.
17.15 Base de datos en microservicios
Cada microservicio debería tener su propia base de datos.
Ejemplo:
1UserService → user_db 2OrderService → order_db 3PaymentService → payment_db
Esto evita dependencias fuertes entre servicios.
17.16 Buenas prácticas
Servicios pequeños
Cada microservicio debe tener una responsabilidad clara.
Comunicación simple
Preferir REST o eventos.
Base de datos independiente
Evitar que varios servicios compartan la misma base de datos.
Logging centralizado
Usar herramientas como:
1ELK 2Grafana 3Prometheus
17.17 Ejemplo arquitectura real
1Frontend 2 ↓ 3API Gateway 4 ↓ 5Auth Service 6User Service 7Course Service 8Payment Service 9Notification Service
Cada uno implementado con Spring Boot.
- Loading...