P
PodcNewsbeta
/Infraestructura
← Volver

Dimensionado para 1.000.000 usuarios generando audio al 85% de capacidad

Diagrama de infraestructura

Activa funciones del sistema, configura cuántos usuarios las ejecutan en simultáneo y observa el consumo real por equipo

Potencia total infra
~268 kW
plena carga · datasheets reales
Diseñado para
1.000.000
usuarios generando audio (85% cap.)
W / usuario (sin carga)
0,09 W
91 kW idle / 1M usuarios TTS
Operación más costosa
1,80 W
Guardar podcast · INSERT ~8 MB en MySQL
🌐
Internet
🛡️
Firewall
×48
FortiGate 600F
🔀
Switch Central
×8
Cisco C9500-32C
⚖️
Balanceador
×20
F5 BIG-IP i2800
🔀
Switch Distribución
×20
Cisco C9300-48P
🖥️
Servidores App
×270
Dell R650xs
⚙️
Workers de Colas
×200
Dell R450
Caché Redis
×25
Dell R350
🗄️
MySQL Principal
×41
Dell R750xs
🗄️
MySQL Réplicas
×31
Dell R750xs
💾
Almacenamiento
×12
Dell R750xd

Simulación de carga

Activa una o varias funciones y ajusta cuántos usuarios las ejecutan al mismo tiempo

🔐Login / Registro

bcrypt 12 rondas en worker threads: 1 núcleo atiende ~50 logins simultáneos; el event loop no se bloquea. La consulta MySQL (~0,89 W) domina el coste por usuario. Saturación CPU a ~459.000 logins simultáneos.

Por usuario1.170 W
📰Ver noticias

Proxy I/O-bound a newsdata.io. Node.js libera el event loop durante la espera (~500 ms); CPU casi inactivo. Redis absorbe hits repetidos con coste mínimo.

Por usuario0.150 W
✍️Generar guion

Llamada async a Gemini (3–8 s de I/O puro). Durante la espera, el event loop atiende otras peticiones. CPU activo solo al sanitizar y parsear la respuesta (~100 ms).

Por usuario0.300 W
🎙️Generar audio

~5 peticiones async a AWS Polly. Node.js espera I/O puro (3–6 s); CPU activo solo en chunking y concatenación de buffers MP3 (~200 ms). La red es el principal recurso consumido.

Por usuario0.180 W
💾Guardar podcast

INSERT de ~8 MB (audio base64) en MySQL Principal + escritura en MinIO. Los HDDs Seagate Exos X20 consumen 6.4 W en escritura. El disco es el cuello de botella.

Por usuario1.800 W
▶️Reproducir

El audio está como data URI base64 en el navegador; no hay petición al servidor. Carga marginal mínima por keep-alive HTTP.

Por usuario0.050 W
🔄Cargar más noticias

Paginación I/O-bound con token nextPage. Idéntico a Ver noticias. Redis absorbe tokens ya resueltos; Node.js en espera I/O la mayor parte del tiempo.

Por usuario0.120 W
🎵Mis audios

SELECT en MySQL Réplica (el Principal no se toca). Recupera filas LONGTEXT de audio; HDDs en lectura secuencial (Seagate Exos X20: 8.1 W c/u).

Por usuario0.400 W

Diagrama de flujo de datos

Recorrido completo de los datos desde el navegador hasta los servicios externos y la base de datos

Browser / Frontend
API Route (Next.js)
Servicio externo
Base de datos
Pipeline de generación de podcast
🌐
Usuario / Browser
TodayForYou.tsx
GET /api/news?q=…&language=es
📡
/api/news
caché 60 s · revalidate
→ fetch
← results[ ]
🌍
newsdata.io
REST API · es
POST /api/podcast · title, url, minutes
✍️
/api/podcast
sanitizeScript()
→ prompt ES
← script
🤖
Google Gemini
2.5-flash → 2.0 → 1.5-flash → 1.5-pro
POST /api/tts · text
🎙️
/api/tts
chunks ≤ 2 800 chars · concat MP3
→ texto
← MP3 buffer
🔊
AWS Polly
Enrique · standard
audioBase64 → data URI
▶️
Audio Player
data URI · 1x / 1.25x / 1.5x
POST /api/saved-audios · JWT requerido
💾
/api/saved-audios
GET · POST · DELETE
→ INSERT
← rows
🗄️
MySQL
audios_guardados
Autenticación
Registro
Browser
email + contraseña
POST /api/auth/register
bcrypt · 12 rondas
INSERT usuarios
MySQL · usuarios
Login · email
Browser
email + contraseña
NextAuth · authorize()
bcrypt.compare()
SELECT usuarios WHERE email
token.id = user.id
JWT · stateless
session.user.id
Login · Google OAuth
Google OAuth
provider externo
signIn callback
auto-create / update
INSERT o UPDATE · google_id
token.id = row.id
JWT · stateless
session.user.id
Mis audios
🎵
mis-audios page
sesión requerida
GET / DELETE →
← audios[ ]
💾
/api/saved-audios
verifica JWT · usuario_id
SELECT / DELETE →
← LONGTEXT audio
🗄️
MySQL Réplica
audios_guardados

Valores calculados con datasheets oficiales: Fortinet (FortiGate 600F) · Cisco (C9500-32C, C9300-48P) · F5 (BIG-IP i2800) · Intel (TDP Xeon) · Seagate (Exos X20) · Dell PowerEdge · mayo 2026