FORMACIÓN · AI APPLICATION DEVELOPMENT

Week 19 — Producción, Escalabilidad y Resiliencia

La Super Aplicación ya tiene Agent, RAG, Memory, Tools y capacidades multimodales. Ahora tenemos que conseguir que funcione de forma fiable cuando deje de ser un experimento.

Semana 19 de 24 · Nivel avanzado

1. Objetivos de Week 19

La pregunta central

Hasta ahora hemos aprendido a construir una aplicación que funciona.

Ahora debemos aprender a construir una aplicación que pueda funcionar de forma fiable.

Al terminar esta semana deberás entender:

Objetivo práctico

Al terminar la semana, la Super Aplicación deberá poder procesar trabajos pesados sin bloquear la aplicación principal, controlar errores y proporcionar información suficiente para saber qué está ocurriendo.

2. Prototype vs Production

Esta distinción es fundamental.

Prototipo


USER
 ↓
API
 ↓
LLM
 ↓
ANSWER

Puede ser suficiente para demostrar una idea.

Producción


USER
 ↓
LOAD BALANCER
 ↓
API
 ↓
AUTH
 ↓
RATE LIMIT
 ↓
QUEUE
 ↓
WORKERS
 ↓
LLM
 ↓
RAG
 ↓
MEMORY
 ↓
TOOLS
 ↓
DATABASE
 ↓
OBSERVABILITY

La complejidad aumenta porque ahora debemos preocuparnos por situaciones que en un prototipo normalmente ignoramos.

Prototipo Producción
Funciona una vez Funciona repetidamente
Un usuario Muchos usuarios
Sin logs Observabilidad
Error = fallo Errores controlados
Procesamiento inmediato Procesamiento síncrono/asíncrono
Sin límites Rate limiting
Coste desconocido Coste controlado

3. Arquitectura de producción

Vamos a evolucionar nuestra arquitectura.



                         USERS
                           │
                           ↓
                    LOAD BALANCER
                           │
                           ↓
                    API GATEWAY
                           │
          ┌────────────────┼────────────────┐
          ↓                ↓                ↓
        AUTH           RATE LIMIT        CACHE
          │                │                │
          └────────────────┼────────────────┘
                           ↓
                      APPLICATION
                           │
             ┌─────────────┼─────────────┐
             ↓             ↓             ↓
           AGENT          RAG          MEMORY
             │
             ↓
           TOOLS
             │
             ↓
          QUEUES
             │
       ┌─────┼─────┐
       ↓     ↓     ↓
    WORKER WORKER WORKER
       │     │     │
       └─────┼─────┘
             ↓
        EXTERNAL AI
             │
             ↓
        DATABASES
             │
             ↓
      OBSERVABILITY

No es obligatorio utilizar todos estos componentes desde el primer día.

La habilidad importante es saber cuándo necesitas cada uno.

4. ¿Qué significa escalar?

Supongamos que nuestra aplicación tiene un único usuario.


1 USER
 ↓
1 SERVER

Funciona perfectamente.

Ahora llegan 1.000 usuarios.


1000 USERS
     ↓
     ?

El servidor puede no ser capaz de procesar todas las solicitudes.

Escalado vertical


SERVER
4 CPU
16 GB RAM

        ↓

SERVER
16 CPU
64 GB RAM

Escalado horizontal


             LOAD BALANCER
                    │
       ┌────────────┼────────────┐
       ↓            ↓            ↓
    SERVER 1     SERVER 2     SERVER 3

Para aplicaciones modernas, el escalado horizontal suele ser especialmente importante.

5. Procesamiento síncrono vs asíncrono

Síncrono


USER
 ↓
REQUEST
 ↓
PROCESS
 ↓
WAIT
 ↓
ANSWER

El usuario permanece esperando.

Problema

Imaginemos que subir y procesar un PDF tarda 45 segundos.


USER
 ↓
UPLOAD
 ↓
PROCESS 45 seconds
 ↓
RESPONSE

La experiencia es mala.

Asíncrono


USER
 ↓
UPLOAD
 ↓
CREATE JOB
 ↓
"Procesando..."
 ↓
RETURN JOB ID

Después:


JOB
 ↓
QUEUE
 ↓
WORKER
 ↓
PROCESS
 ↓
DATABASE
 ↓
READY

El usuario puede continuar utilizando la aplicación.

6. Colas y workers

Una cola es una estructura que permite poner trabajos pendientes.


QUEUE

[Job 1]
[Job 2]
[Job 3]
[Job 4]
[Job 5]

Los workers procesan esos trabajos.


             QUEUE
               │
       ┌───────┼───────┐
       ↓       ↓       ↓
    WORKER1 WORKER2 WORKER3

Ejemplo

100 usuarios suben documentos.


100 UPLOADS
     ↓
100 JOBS
     ↓
QUEUE
     ↓
WORKERS

Los trabajos se procesan de forma controlada.

Ventaja

Ejemplos de tecnologías

7. Caching

Una cache evita realizar trabajo innecesario.

Ejemplo

El usuario pregunta:


¿Cuál es la política de vacaciones?

Nuestro sistema realiza:


QUESTION
 ↓
RAG
 ↓
LLM
 ↓
ANSWER

Si 1.000 usuarios preguntan exactamente lo mismo, podríamos estar repitiendo trabajo.

Podemos utilizar cache.


QUESTION
 ↓
CACHE?
 │
 ├── YES → ANSWER
 │
 └── NO
      ↓
     RAG
      ↓
     LLM
      ↓
    CACHE
      ↓
    ANSWER

Tipos de cache

No todo debe cachearse.

Una respuesta dependiente de información en tiempo real puede quedar obsoleta.

8. Rate limiting

Rate limiting significa limitar cuántas solicitudes puede realizar un usuario durante un periodo.

Ejemplo


USER A

100 requests / minute

LIMIT:
20 requests / minute

La solicitud número 21 puede ser rechazada temporalmente.

¿Por qué?

Rate limit por usuario


USER A → 100 requests
USER B → 100 requests
USER C → 100 requests

Rate limit por endpoint


/chat
100/min

/upload
20/min

/expensive-analysis
5/min

9. Resiliencia

Una aplicación de producción debe asumir que las cosas fallarán.

¿Qué puede fallar?

Diseño ingenuo


CALL LLM
 ↓
ERROR
 ↓
APPLICATION FAILS

Diseño resiliente


CALL LLM
 ↓
ERROR
 ↓
RETRY?
 │
 ├── YES
 │    ↓
 │   RETRY
 │
 └── NO
      ↓
   FALLBACK
      ↓
   ERROR CONTROLADO

Retry

Podemos volver a intentar una operación que ha fallado.

Pero cuidado.


RETRY
RETRY
RETRY
RETRY
RETRY
...

Esto puede empeorar el problema.

Exponential backoff


Intento 1
↓
1 segundo

Intento 2
↓
2 segundos

Intento 3
↓
4 segundos

Intento 4
↓
8 segundos

Los reintentos deben tener un límite.

10. Gestión profesional de errores

No todos los errores son iguales.

Error Ejemplo Tratamiento
Usuario Archivo no válido Mensaje al usuario
Autenticación Token inválido 401/403
Rate limit Demasiadas peticiones 429
Timeout LLM tarda demasiado Retry/fallback
Proveedor API caída Retry/fallback
Servidor Error inesperado Log + alerta

Mala experiencia


ERROR 500

Mejor experiencia


No hemos podido completar
el análisis en este momento.

Hemos registrado el incidente.
Puedes volver a intentarlo.

Pero internamente...


ERROR_ID:
INC-2026-008392

SERVICE:
document-analysis

USER:
12345

MODEL:
...

LATENCY:
...

ERROR:
timeout

11. Observabilidad

Observabilidad significa poder entender qué está ocurriendo dentro del sistema.

Las tres grandes piezas

  • Logs — qué ocurrió.
  • Métricas — cuánto ocurrió.
  • Traces — dónde ocurrió.

                 OBSERVABILITY

             ┌───────┼───────┐
             ↓       ↓       ↓
           LOGS   METRICS  TRACES
             │       │       │
             └───────┼───────┘
                     ↓
                 DASHBOARD
                     ↓
                   ALERTS

12. Logs

Un log es un registro de lo que ha ocurrido.

Mala práctica


print("error")

Mejor


{
  "timestamp": "...",
  "level": "ERROR",
  "service": "agent",
  "operation": "call_llm",
  "user_id": "...",
  "request_id": "...",
  "error": "timeout"
}

¿Qué debemos registrar?

Nunca debemos registrar secretos o información sensible innecesariamente.

13. Métricas

Una métrica es un valor cuantificable.

Ejemplos

Métrica Qué indica
Requests/min Carga
Error rate Fiabilidad
Latency Velocidad
Queue depth Trabajos pendientes
CPU Uso de servidor
Memory Consumo de memoria
Tokens Consumo de IA
Cost Coste

Dashboard


REQUESTS
1,248/min

ERROR RATE
1.7%

P95 LATENCY
1.8 sec

QUEUE
84 jobs

AI COST
€32.40

ACTIVE USERS
218

14. Distributed tracing

Imaginemos que una pregunta tarda 12 segundos.

¿Dónde están esos 12 segundos?


REQUEST
│
├── AUTH
│   └── 30ms
│
├── RAG
│   └── 200ms
│
├── MEMORY
│   └── 50ms
│
├── TOOL
│   └── 500ms
│
└── LLM
    └── 11.2s

Ahora sabemos que el problema está en el LLM.

Trace


TRACE_ID: abc123

request
 ├─ auth
 ├─ memory
 ├─ rag
 │   └─ vector_search
 ├─ tool
 └─ llm

Esto es especialmente útil cuando tenemos muchos servicios.

15. Costes de IA en producción

Una aplicación AI puede funcionar perfectamente y aun así ser económicamente inviable.

Ejemplo

Supongamos:


10.000 usuarios

cada uno:
10 requests/día

TOTAL:
100.000 requests/día

Si cada request tiene un coste medio de €0,02:


100.000 × €0,02

= €2.000 / día

El número es hipotético, pero la idea es fundamental.

Debemos medir

Cost per feature


CHAT
€0.001/request

DOCUMENT ANALYSIS
€0.08/document

VIDEO ANALYSIS
€0.70/video

Esto permite tomar decisiones de producto.

16. Deployment

Desplegar significa hacer que nuestra aplicación esté disponible para usuarios reales.

Entorno local


YOUR COMPUTER
 ↓
localhost

Producción


INTERNET
 ↓
DOMAIN
 ↓
REVERSE PROXY
 ↓
APPLICATION
 ↓
DATABASE

Entornos

Entorno Uso
Development Desarrollo
Staging Pruebas
Production Usuarios reales

Principio fundamental

No debemos experimentar directamente sobre producción.

Pipeline conceptual


CODE
 ↓
GIT
 ↓
TESTS
 ↓
BUILD
 ↓
STAGING
 ↓
VALIDATION
 ↓
PRODUCTION

17. Health checks

Nuestra infraestructura necesita saber si un servicio está funcionando.

Health check


GET /health

{
  "status": "ok"
}

Pero podemos ir más allá


{
  "application": "ok",
  "database": "ok",
  "redis": "ok",
  "queue": "ok",
  "llm": "ok"
}

Readiness vs liveness

Una aplicación puede estar viva pero no estar preparada para recibir tráfico.


LIVENESS
¿Estoy vivo?

READINESS
¿Estoy preparado?

18. Utilizar IA para construir sistemas de producción

Aquí aparece una de las habilidades más importantes de todo el curso.

No queremos utilizar la IA solamente para generar código.

Queremos utilizarla como arquitecto, reviewer, tester, analista y copiloto técnico.

Prompt — Architecture Review


Actúa como un arquitecto de software
especializado en aplicaciones AI.

Esta es mi arquitectura:

[PEGAR ARQUITECTURA]

Analiza:

1. escalabilidad
2. seguridad
3. disponibilidad
4. latencia
5. costes
6. observabilidad
7. puntos únicos de fallo
8. gestión de errores
9. concurrencia
10. recuperación ante fallos

No generes código todavía.

Quiero primero un análisis crítico.

Prompt — Production Readiness Review


Analiza mi aplicación AI
como si fueras responsable
de aprobarla para producción.

Genera una checklist que cubra:

- authentication
- authorization
- secrets
- rate limiting
- logging
- monitoring
- tracing
- backups
- database
- queues
- retries
- timeouts
- caching
- cost control
- testing
- deployment
- rollback
- disaster recovery

Clasifica cada punto como:

CRITICAL
HIGH
MEDIUM
LOW

Prompt — Chaos Engineering


Quiero comprobar la resiliencia
de mi aplicación AI.

Simula conceptualmente
estos fallos:

- LLM unavailable
- database unavailable
- Redis unavailable
- queue unavailable
- timeout
- high traffic
- invalid file
- huge file
- repeated requests

Para cada escenario:

1. qué ocurre;
2. qué debería ocurrir;
3. cómo detectarlo;
4. cómo recuperarnos;
5. qué test implementar.

19. Ejemplos completos

Ejemplo 1 — PDF


USER
 ↓
UPLOAD
 ↓
VALIDATION
 ↓
CREATE JOB
 ↓
QUEUE
 ↓
WORKER
 ↓
PDF PROCESSOR
 ↓
OCR / VISION
 ↓
CHUNKING
 ↓
EMBEDDINGS
 ↓
VECTOR DB
 ↓
READY

Ejemplo 2 — Pregunta al Agent


USER
 ↓
AUTH
 ↓
RATE LIMIT
 ↓
CACHE
 ↓
MEMORY
 ↓
RAG
 ↓
AGENT
 ↓
TOOL
 ↓
LLM
 ↓
ANSWER

Ejemplo 3 — LLM caído


AGENT
 ↓
LLM
 ↓
TIMEOUT
 ↓
RETRY
 ↓
TIMEOUT
 ↓
FALLBACK MODEL
 ↓
ANSWER

Ejemplo 4 — Worker caído


QUEUE
 ↓
WORKER 1
 ↓
CRASH

JOB REMAINS

QUEUE
 ↓
WORKER 2
 ↓
PROCESS

Ejemplo 5 — Demasiados usuarios


1000 USERS
 ↓
LOAD BALANCER
 ↓
SERVER 1
SERVER 2
SERVER 3
SERVER 4
 ↓
QUEUE
 ↓
WORKERS

20. Ejercicios prácticos

Ejercicio 1 — Prototipo

Explica tres diferencias entre un prototipo AI y una aplicación de producción.

Ver respuesta

Una aplicación de producción necesita, entre otras cosas, gestión de errores, seguridad, observabilidad, escalabilidad y control de costes.

Ejercicio 2 — Asíncrono

¿Por qué sería recomendable procesar un PDF de 500 páginas de forma asíncrona?

Ver respuesta

Porque el procesamiento puede tardar mucho tiempo y consumir recursos. Una cola permite crear un trabajo, devolver el control al usuario y procesarlo mediante workers.

Ejercicio 3 — Queue

Diseña un flujo para procesar 1.000 documentos.

Ver solución

UPLOADS
 ↓
VALIDATION
 ↓
1000 JOBS
 ↓
QUEUE
 ↓
WORKERS
 ↓
PROCESSING
 ↓
DATABASE
 ↓
STATUS = READY

Ejercicio 4 — Cache

¿Qué problemas podría solucionar una cache?

Ver respuesta
  • reducir latencia;
  • reducir llamadas externas;
  • reducir coste;
  • reducir carga.

Ejercicio 5 — Rate limit

Diseña límites razonables para:


CHAT
UPLOAD
VIDEO ANALYSIS
Ver una posible solución

CHAT
100 requests/min

UPLOAD
20 uploads/min

VIDEO ANALYSIS
5 jobs/min

Los valores son ejemplos. Los límites reales dependen del producto, coste y capacidad.

Ejercicio 6 — Retry

¿Por qué no debemos reintentar una petición indefinidamente?

Ver respuesta

Porque podemos aumentar la carga sobre un sistema que ya está fallando, generando un efecto cascada.

Ejercicio 7 — Observabilidad

¿Qué utilizarías para saber por qué una petición tardó 12 segundos?

Ver respuesta

Distributed tracing permite dividir la petición en operaciones y conocer cuánto tiempo consume cada una.

Ejercicio 8 — Arquitectura

Diseña la arquitectura de producción de nuestra Super Aplicación.

Ver solución

USER
 ↓
LOAD BALANCER
 ↓
API
 ↓
AUTH
 ↓
RATE LIMIT
 ↓
CACHE
 ↓
AGENT
 ├── MEMORY
 ├── RAG
 └── TOOLS
 ↓
QUEUE
 ↓
WORKERS
 ↓
AI SERVICES
 ↓
DATABASE
 ↓
OBSERVABILITY

Ejercicio 9 — Fallo del LLM

¿Qué debería ocurrir si el proveedor de IA deja de responder?

Ver solución
  • detectar timeout;
  • registrar el error;
  • aplicar retry limitado;
  • usar fallback si existe;
  • informar al usuario;
  • generar alerta si el problema persiste.

Ejercicio 10 — Producción

Crea una checklist de 15 elementos que revisarías antes de poner la Super Aplicación en producción.

Ver solución
  1. authentication;
  2. authorization;
  3. secrets;
  4. rate limiting;
  5. input validation;
  6. database backups;
  7. logging;
  8. metrics;
  9. tracing;
  10. health checks;
  11. timeouts;
  12. retries;
  13. cost monitoring;
  14. rollback;
  15. incident management.

Ejercicio 11 — Avanzado

Un usuario sube un vídeo de 2 GB. El procesamiento tarda 10 minutos. Diseña la experiencia completa.

Ver solución

UPLOAD
 ↓
VALIDATION
 ↓
CREATE JOB
 ↓
202 ACCEPTED
 ↓
JOB ID
 ↓
QUEUE
 ↓
WORKER
 ↓
VIDEO PROCESSING
 ↓
TRANSCRIPTION
 ↓
FRAME ANALYSIS
 ↓
SUMMARY
 ↓
DATABASE
 ↓
STATUS = READY
 ↓
NOTIFICATION

21. Test autocorregible

Objetivo para superar la semana: 80%.

Ver respuestas

Todas las respuestas correctas son la opción A.

22. Proyecto Week 19

Production Readiness Layer

Vamos a transformar la Super Aplicación en una aplicación preparada para ser utilizada por múltiples usuarios.

Objetivo

Implementar una primera arquitectura de producción alrededor del sistema que hemos construido durante las semanas anteriores.

Debe incluir

Arquitectura objetivo


                         USERS
                           │
                           ↓
                    REVERSE PROXY
                           │
                           ↓
                         API
                           │
             ┌─────────────┼─────────────┐
             ↓             ↓             ↓
           AUTH        RATE LIMIT       CACHE
             │             │             │
             └─────────────┼─────────────┘
                           ↓
                         AGENT
                           │
              ┌────────────┼────────────┐
              ↓            ↓            ↓
            MEMORY        RAG         TOOLS
                           │
                           ↓
                         QUEUE
                           │
                  ┌────────┼────────┐
                  ↓        ↓        ↓
               WORKER1  WORKER2  WORKER3
                  │        │        │
                  └────────┼────────┘
                           ↓
                       AI SERVICES
                           │
                           ↓
                        DATABASE
                           │
                           ↓
                     OBSERVABILITY

Feature 1 — Job system

Implementa un sistema de trabajos para operaciones largas.


POST /jobs

{
  "type": "document_analysis",
  "file_id": "..."
}

Respuesta:


{
  "job_id": "...",
  "status": "queued"
}

Feature 2 — Job status


GET /jobs/{id}

{
  "status": "processing",
  "progress": 62
}

Feature 3 — Estados


CREATED
   ↓
QUEUED
   ↓
PROCESSING
   ↓
COMPLETED

          ↘ FAILED

Feature 4 — Retry

Los trabajos fallidos temporalmente deben poder reintentarse.

Feature 5 — Observabilidad

Cada job debe tener:

Feature 6 — Dashboard

Crea una pequeña pantalla de administración:


JOBS

Queued       24
Processing   12
Completed    842
Failed       17

ERROR RATE
1.8%

AVG LATENCY
2.4 sec

AI COST TODAY
€18.43

Tests del proyecto

Test Resultado esperado
100 jobs Se procesan mediante workers.
Worker cae El trabajo puede continuar/reintentarse.
LLM timeout Retry controlado.
Rate limit excedido Request rechazada.
Cache hit Se evita trabajo innecesario.
Database unavailable Error controlado.
Invalid file Validación rechaza archivo.
Health check Devuelve estado correcto.
Logs Request identificable.
Cost tracking Se registra consumo.

Entregables

23. Reto avanzado — ¿Qué pasa si...?

No queremos que el alumno se limite a construir el camino feliz.

Debemos aprender a pensar como un ingeniero de producción.

Escenario A

El proveedor de IA deja de responder durante 10 minutos.

Qué deberías plantearte
  • timeout;
  • retry;
  • fallback;
  • queue;
  • user experience;
  • alerting;
  • coste;
  • recuperación.

Escenario B

10.000 usuarios suben documentos simultáneamente.

Qué deberías plantearte
  • rate limiting;
  • queue;
  • workers;
  • autoscaling;
  • storage;
  • cost;
  • backpressure.

Escenario C

Un worker procesa incorrectamente un documento.

Qué deberías plantearte
  • validación;
  • logs;
  • job status;
  • retry;
  • dead-letter queue;
  • alerting;
  • reprocesamiento.

24. Recursos externos

The Twelve-Factor App
Principios clásicos para construir aplicaciones modernas preparadas para despliegue y operación.
OpenTelemetry
Referencia fundamental para observabilidad, métricas y tracing.
Prometheus
Sistema de monitorización y métricas ampliamente utilizado.
Grafana
Dashboards y visualización de métricas y observabilidad.
Redis Documentation
Cache, almacenamiento rápido, colas y otros patrones.
RabbitMQ
Sistema de mensajería y colas.
Apache Kafka
Plataforma distribuida de event streaming.
Docker Documentation
Contenedores y empaquetado de aplicaciones.
Kubernetes Documentation
Orquestación y gestión de contenedores a escala.
Google SRE Books
Recursos sobre Site Reliability Engineering.
OWASP Top 10
Referencia esencial para seguridad de aplicaciones web.
GitHub Actions
Automatización de CI/CD.

25. Checklist Week 19

















































26. Criterios para superar Week 19

Área Nivel esperado
Arquitectura Puede diseñar una arquitectura orientada a producción.
Escalabilidad Entiende horizontal y vertical.
Async Puede justificar el uso de queues.
Resiliencia Puede diseñar retry, timeout y fallback.
Observabilidad Entiende logs, métricas y traces.
Costes Puede identificar los principales drivers de coste.
Proyecto Dispone de jobs y workers funcionales.
Testing Ha probado escenarios de fallo.
Test ≥80%.

27. Preparación para Week 20

Seguridad de aplicaciones AI

Ahora que nuestra Super Aplicación puede recibir múltiples usuarios, archivos, documentos, imágenes, audio y peticiones de IA, tenemos que asumir que algunos inputs serán maliciosos.

En Week 20 entraremos profundamente en:

  • AI Security;
  • prompt injection;
  • indirect prompt injection;
  • jailbreaks;
  • data leakage;
  • authorization;
  • tenant isolation;
  • secret management;
  • OWASP para aplicaciones LLM;
  • tool abuse;
  • agent hijacking;
  • security testing;
  • red teaming;
  • guardrails.


                 SUPER APP

                      │
                      ↓
                 TRUST BOUNDARY
                      │
          ┌───────────┼───────────┐
          ↓           ↓           ↓
       USER INPUT   FILES       TOOLS
          │           │           │
          └───────────┼───────────┘
                      ↓
                 SECURITY LAYER
                      │
                      ↓
                    AGENT
                      │
                      ↓
                   ACTIONS