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
23API Gateway
45Users Service
6Orders Service
7Payments Service

Cada servicio puede tener su propia base de datos.


17.3 Ventajas de microservicios

ventajaexplicación
escalabilidadcada servicio escala por separado
independenciaequipos trabajan en servicios distintos
flexibilidadcada servicio puede usar tecnología distinta
despliegue rápidoactualizar un servicio sin parar todo

17.4 Desventajas

problemaexplicación
más complejidadmás servicios
comunicaciónservicios deben hablar entre sí
monitorizaciónmá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
23API Gateway
45Users 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
23API Gateway
45Auth Service
6User Service
7Course Service
8Payment Service
9Notification Service

Cada uno implementado con Spring Boot.

  • Loading...