Universidad Nacional de Luján
Departamento de Ciencias Básicas
Sistemas Distribuidos y Programación Paralela 2026 Dr. David Petrocelli
TP 3 · Parte 2
📑 Índice del documento

Trabajo Práctico Nº 3 — Parte 2

Computación en la Nube (Kubernetes / RabbitMQ)

Fecha de entrega: 20/05/2026 — todos los puntos.

Continuidad con la Parte 1. Esta entrega asume los ejercicios del Hit #0 (patrones de mensajería [RMQ]) y el Hit #1 (Sobel distribuido sobre Docker [SOB68]) ya resueltos. Los requisitos generales de entrega (informe, repositorio público, CI/CD, gitleaks, video, health-check) y la lista de Contenidos del programa relacionados son los mismos que los declarados en la Parte 1 — no se repiten acá.


Práctica

La definición canónica del NIST [NIST800-145] establece cinco características esenciales del Cloud Computing: on-demand self-service, broad network access, resource pooling, rapid elasticity y measured service. El paper de Berkeley de Armbrust et al. [ARMBRUST10] —“A View of Cloud Computing”— sigue siendo la referencia académica más citada para entender el modelo y sus tradeoffs económicos.

Sobre esa base, en la práctica tenemos dos patrones de trabajo:

Pensemos la nube como una extensión de la capacidad de cómputo de los equipos locales. Aplicando este enfoque podemos implementar el patrón de Cloud-Bursting [CBURST]: cuando la demanda local satura la capacidad propia, “se desborda” hacia la nube.

Nota sobre tradeoffs distribuidos. Antes de diseñar componentes que se sincronizan en la nube, conviene tener presente el teorema CAP de Brewer [BREWER00]: en presencia de particiones de red, hay que elegir entre consistencia y disponibilidad. RabbitMQ y Redis adoptan posiciones distintas en ese espacio — investiguen cuál es la elección de cada uno y por qué importa para su arquitectura.

En esta segunda parte vamos a hacer que todo lo que en la Parte 1 se corrió “distribuido” (pero centralizado en la propia computadora) escale realmente.

¿Qué queremos lograr?


Hit #2 — Sobel con offloading en la nube

El objetivo del Hit #2 es construir una base elástica: el mismo cómputo del operador de Sobel del Hit #1, pero usando Terraform [TF] para crear nodos de trabajo bajo demanda y eliminarlos al terminar la tarea. Para cada worker, el ciclo es:

Requisitos de Infraestructura como Código (IaC)

El objetivo es construir una arquitectura híbrida escalable (tipo 1, inicial). Presenten el diagrama de arquitectura y justifiquen, para cada servicio, dónde lo despliegan (local vs nube) y por qué.

Hit #2 — Sobel con Offloading en la Nube


Hit #3 — Sobel contenerizado, asincrónico y escalable (base del TP Integrador)

A diferencia del esquema híbrido del Hit #2, ahora la idea es construir una infraestructura 100% en la nube pero con un enfoque diferente: orquestada con Kubernetes [K8S]. El paper de Burns et al. [BURNS16] —“Borg, Omega, and Kubernetes”— traza el linaje conceptual de K8s desde los sistemas de orquestación internos de Google y explica por qué se diseñó como está.

1. Desplegar con Terraform un cluster de Kubernetes (GKE)

Este cluster va a manejar todos los recursos del sistema: tanto los servicios de infraestructura (RabbitMQ, Redis) como los componentes de aplicación (frontend, backend, split, joiner). La configuración mínima exigida es:

  1. Nodegroup de infraestructura: aloja los servicios base (RabbitMQ, Redis, observabilidad).
  2. Nodegroup de aplicaciones: aloja los componentes del sistema (frontend, backend, split, joiner).
  3. Pool de workers fuera del cluster: máquinas virtuales gestionadas con Terraform aparte (no son nodos de Kubernetes), encargadas de las tareas de cómputo intensivo. Mantenerlas fuera del cluster permite escalarlas de manera independiente y aprovechar tipos de instancia distintos sin cambiar el nodepool de GKE.

Requisitos de mensajería (aplicando los patrones del Hit #0)

Hit #3 — Arquitectura Kubernetes (GKE)

2. Construir los pipelines de despliegue


Hit #3 (cont.) — Análisis de desempeño bajo carga

Para evaluar el desempeño de la plataforma vamos a medir los tiempos de respuesta en diferentes escenarios, modificando tres variables:

Nota sobre quotas: las cuentas gratuitas de los cloud providers tienen límites de VMs por región/zona. Si necesitan escalar a más nodos para los experimentos, distribúyanlos entre varias regiones para no chocar contra el cupo.

El objetivo es entender cómo la plataforma responde al modificar estas variables, identificar la capacidad real de escalabilidad y los posibles cuellos de botella. Los resultados se presentan en una tabla con el tiempo de respuesta para cada combinación de variables, dando una visión clara de la evolución del desempeño bajo distintas condiciones.

Herramienta de load testing: usar una herramienta de benchmarking como Locust [LOCUST] o k6 [K6]. Permiten definir escenarios reproducibles y generar reportes comparables. Documenten la configuración del test (cantidad de virtual users, ramp-up, duración) y presenten los resultados con métricas estándar: latencia p50/p95/p99, throughput (req/s) y tasa de errores.


Hit #4 — Observabilidad (Prometheus + Grafana)

La observabilidad es un pilar de las prácticas modernas de Site Reliability Engineering [BEYER16]: sin métricas, logs y trazas no se pueden definir SLOs ni razonar sobre la salud del sistema en producción. Desplieguen Prometheus [PROM, BRAZIL18] y Grafana [GRAF] en el cluster de Kubernetes para monitorear la plataforma:

  1. Instalación: instalar Prometheus y Grafana en el nodegroup de infraestructura. Pueden usar el Helm chart oficial prometheus-community/kube-prometheus-stack.
  2. Instrumentación: instrumentar los servicios (backend, workers, split, joiner) para que exporten métricas custom: tareas procesadas, tareas en cola, tiempo de procesamiento por tarea y errores.
  3. Dashboard: crear un dashboard en Grafana que muestre como mínimo:
    • Uso de CPU y memoria por pod/nodo.
    • Mensajes procesados en RabbitMQ (publicados vs consumidos vs en cola).
    • Latencia de procesamiento de tareas (p50, p95, p99).
    • Tasa de errores.
  4. Alertas: configurar al menos una alerta básica (por ejemplo: cola de RabbitMQ supera un umbral, o un worker no responde en X segundos).

Referencias y Bibliografía

Cloud Computing — papers fundacionales

Kubernetes y orquestación

Observabilidad y SRE

IaC, Load Testing y otras herramientas