Title: Simulación de microservicios
Course: 2025 - LISI - Virtualizacion 2-2 > Section: Aplicaciones Prácticas y Proyecto Final

🧩 Tema: Simulación de Microservicios

🎯 Objetivo General

Comprender el concepto de microservicios y aplicar su simulación mediante contenedores Docker, utilizando herramientas como Docker Compose para representar arquitecturas distribuidas.

📘 Contenidos

1. ¿Qué son los microservicios?

Los microservicios son una arquitectura de software que divide una aplicación en múltiples servicios pequeños, independientes y especializados, que se comunican entre sí mediante APIs. Cada servicio se encarga de una funcionalidad específica y puede desarrollarse, desplegarse y escalarse de forma autónoma.

2. Características clave

- Desacoplamiento: Cada servicio es independiente.
- Escalabilidad: Se pueden escalar servicios según demanda.
- Desarrollo paralelo: Equipos pueden trabajar en servicios distintos.
- Resiliencia: Fallos en un servicio no afectan a toda la aplicación.
- Tecnología heterogénea: Cada servicio puede usar diferentes lenguajes o bases de datos.

3. Simulación con Docker

Docker permite simular microservicios mediante contenedores que representan cada servicio. Docker Compose facilita la orquestación de múltiples contenedores, definiendo cómo se comunican y se ejecutan juntos.

🧪 Ejemplo Práctico: Simulación de Microservicios

🗂 Estructura del Proyecto

microservices-simulation/
├── docker-compose.yml
├── auth-service/
│   ├── Dockerfile
│   ├── app.js
│   └── package.json
├── product-service/
│   ├── Dockerfile
│   ├── app.js
│   └── package.json
└── frontend/
    ├── Dockerfile
    ├── app.js
    └── package.json


📄 auth-service/app.js

const express = require('express');

const app = express();

app.get('/auth', (req, res) => res.json({ user: 'usuario123' }));

app.listen(4000, () => console.log('Auth service en puerto 4000'));

📄 product-service/app.js

const express = require('express');

const app = express();

app.get('/products', (req, res) => res.json([{ id: 1, name: 'Laptop' }]));

app.listen(5000, () => console.log('Product service en puerto 5000'));

📄 frontend/app.js

const express = require('express');

const axios = require('axios');

const app = express();

app.get('/', async (req, res) => {

  const user = await axios.get('http://auth-service:4000/auth');

  const products = await axios.get('http://product-service:5000/products');

  res.send(`Usuario: ${user.data.user}, Productos: ${products.data.map(p => p.name).join(', ')}`);

});

app.listen(3000, () => console.log('Frontend en puerto 3000'));

📄 docker-compose.yml

version: '3'

services:

  auth-service:

    build: ./auth-service

    ports:

      - "4000:4000"

  product-service:

    build: ./product-service

    ports:

      - "5000:5000"

  frontend:

    build: ./frontend

    ports:

      - "3000:3000"

    depends_on:

      - auth-service

      - product-service

🎥 Actividad Sugerida

Título: Simulación de Microservicios con Docker
Producto final: Video explicativo en YouTube
Pasos:

1. Crear los servicios y sus archivos.
2. Construir y levantar los contenedores con docker-compose up --build.
3. Verificar la comunicación entre servicios.
4. Grabar un video explicando:
  - Qué son los microservicios
  - Cómo se simulan con Docker
  - Cómo se comunican entre sí
  - La app funcionando en el navegador

📌 Recomendaciones

- Usar OBS Studio para grabar pantalla.
- Explicar cada archivo y comando.
- Mostrar cómo se escalan los servicios si se desea.