Sistemas Distribuidos
📈 Construcción de un Sistema Distribuido Escalable para Almacenamiento y Procesamiento de Medios
Quiero expresar mi gratitud a mis colegas profesionales que me han inspirado en los últimos años: David Daupeyroux y YASH MAHENDRA JOSHI.
En el panorama digital actual, atender a millones de usuarios de manera eficiente exige sistemas que escalen horizontalmente, manejen fallos y procesen grandes cantidades de datos rápidamente.
Esta guía recorre una arquitectura distribuida para gestionar metadatos, almacenamiento de medios, generación de feeds, notificaciones y análisis, enfocándose tanto en decisiones de diseño como en ideas de implementación.
🔹 Resumen del Esquema
User
└──> DNS
└──> Balanceador de Carga
├──> API Gateway 1
├──> API Gateway 2
└──> CDN (para Contenido Estático)
├──> Almacenamiento de Imágenes/Miniaturas
└──> Almacenamiento de Video
API Gateway
├── Autenticación, Autorización
├── Caché, Transformación
├── Limitación de Tasa, Proxy Inverso
├── Monitoreo, Registro, Funciones Serverless
Balanceador de Carga envía:
- Control al Servidor de Metadatos
- Datos al Servidor de Bloques
Servidor de Metadatos
├──> Servicio de Notificaciones
│ └──> Cola de Notificaciones
├──> Particionamiento Basado en Directorios
├──> Gestor de Shards
│ └──> Servicio de Generación de Feeds
│ └──> Cola de Generación de Feeds
├──> Agregadores de Resultados de Búsqueda
├──> Caché (Redis/Memcached)
└──> Bases de Datos de Metadatos (Particionadas)
Servidor de Bloques
└──> Almacenamiento de Archivos Distribuido
├──> Almacenamiento de Imágenes/Miniaturas
└──> Almacenamiento de Video
└──> Servicio de Procesamiento de Video
└──> Cola de Procesamiento de Video
└──> Trabajadores
Sistemas de Coordinación y Soporte
├── Servicio de Coordinación (Zookeeper)
├── Registro Distribuido
└── Trazado Distribuido
Data Warehouse
├── Sistemas de Procesamiento de Datos (Hadoop/MapReduce, Spark)
│ ├── Programador Distribuido
│ └── Trabajadores
└── Salida (Métricas, Informes, etc.)
└── Visualización de Informes y Análisis de Datos
└── Base de Datos
🔹 Manejo de Solicitudes de Usuario
Los usuarios interactúan vía DNS ➔ Balanceador de Carga ➔ API Gateway(s) para:
- Tolerancia a Fallos
- Distribución de Carga
- Escalabilidad
🔥 Detalles Técnicos Clave
- Autenticación, Autorización
- Caché, Transformación
- Limitación de Tasa, Proxy Inverso
- Contenido estático servido vía CDN
location /static/ {
proxy_pass http://cdn.example.com/static/;
proxy_cache cdn_cache;
}
🔹 Flujo de Metadatos y Datos
- Datos de Control ➔ Servidor de Metadatos
- Datos Binarios ➔ Servidor de Bloques
🔥 Detalles Técnicos Clave
- Caché de metadatos vía Redis/Memcached
- Particionamiento basado en directorios para balanceo de carga
def partition_directory(file_id):
return f"{hash(file_id) % 1000:03d}" # 1000 buckets
🔹 Notificaciones y Generación de Feeds
Cuando los usuarios suben medios:
- El Servicio de Notificaciones activa Notificaciones
- La Generación de Feeds construye feeds personalizados
🔥 Detalles Técnicos Clave
- Desacoplamiento vía colas para escalabilidad
import boto3
import json
sqs = boto3.client('sqs')
sqs.send_message(
QueueUrl='https://sqs.amazonaws.com/queue-url',
MessageBody=json.dumps({
'event_type': 'NEW_UPLOAD',
'user_id': uploader_id,
'followers': follower_ids
})
)
🔹 Pipeline de Procesamiento de Video
- Desplazar transcodificación, generación de miniaturas
- Los trabajadores consumen trabajos de las colas
🔥 Detalles Técnicos Clave
- Aislar cargas pesadas de CPU/GPU
def process_video(video_path):
output_path = video_path.replace('.mov', '.mp4')
subprocess.run(["ffmpeg", "-i", video_path, "-vcodec", "h264", "-acodec", "aac", output_path])
🔹 Coordinación y Gestión Distribuida
- Zookeeper para Descubrimiento de Servicios
- Registro y Trazado Distribuido para Observabilidad
from kazoo.client import KazooClient
zk = KazooClient(hosts='127.0.0.1:2181')
zk.start()
zk.create("/services/worker1", b"127.0.0.1:8000", ephemeral=True)
🔹 Análisis de Datos e Informes
- Flujos de Eventos recopilados para inteligencia empresarial
- Pipelines de Datos (Hadoop/Spark)
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("VideoAnalytics").getOrCreate()
data = spark.read.json("s3://bucket/videos/metrics.json")
aggregated = data.groupBy("video_id").count()
aggregated.write.parquet("s3://bucket/videos/aggregated/")
📊 Por Qué Funciona Este Diseño
- 🛡️ Tolerancia a Fallos: Balanceadores de Carga, Colas, CDN
- 📈 Escalabilidad: Escalado independiente de Metadatos/Datos
- ⚡ Baja Latencia: Caché, trabajos asíncronos
- 📊 Big Data Analytics: Hadoop/Spark
- 🔧 Mantenibilidad: Aislamiento de servicios, Trazado Distribuido
🔥 Reflexiones Finales
Esta arquitectura ofrece escalabilidad, tolerancia a fallos, baja latencia y observabilidad — crítico para plataformas de medios como YouTube, Instagram o TikTok.
Adoptar colas, capas de caché, procesamiento distribuido y separación de responsabilidades es innegociable para el éxito a largo plazo.
Autor: Michael Wybraniec
Servidores MCP: Conectando IA a Datos en Tiempo Real
Aprende a crear un servidor Model Context Protocol (MCP) usando Python y la API de Open-Meteo para proporcionar datos meteorológicos a modelos de lenguaje como GPT-4 y Claude.
Calidad: ¿Cómo proteger Frontends potenciados por IA?
Hoy, la IA no se limita solo a proyectos especializados — está integrada en casi todo lo que construimos. Ya sea una función de búsqueda, un motor de recomendaciones, un chatbot o un dashboard predictivo, la IA se está convirtiendo en un elemento estándar del stack tecnológico.
Servidores MCP: Conectando IA a Datos en Tiempo Real
Aprende a crear un servidor Model Context Protocol (MCP) usando Python y la API de Open-Meteo para proporcionar datos meteorológicos a modelos de lenguaje como GPT-4 y Claude.
Calidad: ¿Cómo proteger Frontends potenciados por IA?
Hoy, la IA no se limita solo a proyectos especializados — está integrada en casi todo lo que construimos. Ya sea una función de búsqueda, un motor de recomendaciones, un chatbot o un dashboard predictivo, la IA se está convirtiendo en un elemento estándar del stack tecnológico.

