Arquitectura técnica

Stack moderno y probado. Diseñado para operación real.

Cada tecnología elegida por una razón concreta. Sin modas, sin sobre-ingeniería. Stack que cualquier equipo de 2 a 50 personas puede operar.

Stack por capas

Cada componente tiene un propósito claro y está justificado por la operación real de un ITSM/PSA.

Frontend

Next.js15
SSR, SSG, App Router

Renderizado híbrido para páginas de marketing estáticas y app dinámica en la misma base de código. SEO nativo, optimización automática de imágenes y code splitting.

React19
UI reactiva

Ecosistema masivo, componentes reutilizables, Server Components para reducir JavaScript en cliente y mejorar Core Web Vitals.

Backend

Django5
Framework full-stack

Seguridad incorporada (CSRF, XSS, SQL injection), ORM maduro con migraciones, panel de admin automático, autenticación y permisos listos para producción.

DRF3.15
REST API

Serialización declarativa, paginación, filtros, throttling, autenticación por token y OpenAPI schema automático para documentación.

Datos

PostgreSQL16
ACID, JSON, extensions

Transacciones ACID garantizadas, soporte nativo JSON/JSONB para datos flexibles, row-level security para multi-tenant, full-text search y extensiones como pg_trgm.

Redis7
Cache, sesiones, colas

Latencia sub-milisegundo para cache de consultas frecuentes, store de sesiones distribuido, pub/sub para eventos en tiempo real y broker para colas de Celery.

Procesamiento

Celery5
Tareas asíncronas

Procesamiento robusto en background: envío de emails, notificaciones webhooks, generación de informes, importaciones masivas y cálculos de SLA sin bloquear peticiones HTTP.

Celery Beat5
Jobs programados

Scheduler integrado para tareas periódicas: verificación de SLAs vencidos, alertas de escalado, limpieza de sesiones expiradas, reportes diarios y backups automáticos.

Contenedores

Docker27
Imágenes reproducibles

Entorno idéntico en desarrollo y producción. Aislamiento de dependencias, imágenes optimizadas con multi-stage builds y seguridad por capas.

Docker Compose2
Orquestación de servicios internos

Definición declarativa de todos los servicios en un YAML. Usado internamente para gestionar el stack completo de la plataforma SaaS sin Kubernetes.

Diagrama por capas

Cómo se conectan los componentes desde el usuario hasta los datos.

Capa de usuario
Navegador / App
CDN / Estáticos
Capa de aplicación
Next.js SSR/SSG
API Gateway
Django REST
Lógica de negocio
Capa de datos y procesos
PostgreSQL
Redis Cache
Celery Workers
Flujo síncrono

Request → Response. El usuario espera el resultado. Incluye SSR, API calls y cache hit.

Flujo asíncrono

Fire-and-forget. Email, webhooks, reportes y SLA checks via Celery workers. El usuario no espera.

Flujo de petición

El camino de una solicitud desde el navegador hasta la base de datos — y el desvío para tareas asíncronas.

Camino síncrono: cada request pasa por todas las capas

1
Usuario
Navegador o API client
2
Next.js
SSR/SSG o API proxy
3
Django API
Validación y lógica
4
PostgreSQL
Datos persistentes
5
Redis
Cache + sesión
6
Respuesta
HTML o JSON
Petición normal (síncrona)
1. Next.js renderiza con SSR o sirve SSG cacheado
2. Si hay datos dinámicos, llama a Django API
3. Redis cache: si hay hit, devuelve sin tocar PostgreSQL
4. Cache miss → Query a PostgreSQL → Guarda en Redis
5. Respuesta al usuario en <200ms
Tarea asíncrona (Celery)
1. Django recibe la acción (ej: cerrar ticket)
2. Encola tarea en Celery via Redis broker
3. Responde al usuario inmediatamente (HTTP 200)
4. Celery worker recoge la tarea de la cola
5. Procesa: envía email, actualiza métricas, notifica
6. Si falla: retry con backoff exponencial
Tareas programadas (Celery Beat)
Cada minuto

Verificar SLAs vencidos y disparar alertas

Cada 5 minutos

Refrescar materialized views de KPIs

Cada hora

Limpiar sesiones expiradas de Redis

Diario 08:00

Enviar reporte de SLA del día anterior

Diario 02:00

Backup de PostgreSQL (pg_dump)

Semanal

Rotación de logs y limpieza de temporales

Por qué este stack

Cada tecnología fue elegida con criterio. Estas son las razones técnicas que justifican cada decisión.

Next.js

  • Rendimiento: SSR para contenido dinámico, SSG para páginas de marketing, ISR para actualización incremental sin rebuild completo.
  • SEO: Meta tags dinámicos, sitemap automático, structured data y optimización de Core Web Vitals nativa.
  • DX: App Router, Server Components, hot reload instantáneo y ecosistema de librerías compatible.
  • Ecosistema: Middleware nativo, image optimization, internationalization y soporte para edge runtime.

Django

  • Seguridad: Protección contra CSRF, XSS, SQL injection, clickjacking. Seguridad por defecto, no opcional.
  • Batteries-included: Admin panel, ORM, migraciones, autenticación, permisos, señales y middleware incluidos.
  • ORM maduro: QuerySets expresivos, lazy evaluation, prefetch_related/select_related para N+1, y migraciones reversibles.
  • Comunidad: Documentación de referencia excelente, paquetes para cualquier necesidad y long-term support releases.

PostgreSQL

  • Fiabilidad: ACID completo, WAL para crash recovery, PITR (Point-in-Time Recovery) y replicación nativa.
  • Extensiones: pg_trgm para búsqueda fuzzy, pg_stat_statements para análisis de queries, row-level security para multi-tenant.
  • Rendimiento: Indexación avanzada (GIN, GiST, partial), partitioning nativo y query planner inteligente.
  • Flexibilidad: JSONB para datos semi-estructurados, custom types, y full-text search sin Elasticsearch.

Redis

  • Velocidad: Operaciones en memoria con latencia <1ms para cache de sesiones, queries y datos frecuentes.
  • Pub/Sub: Canales para eventos en tiempo real entre microservicios y notificaciones push.
  • Session store: Compartido entre instancias de Django, escalable horizontalmente sin sticky sessions.
  • Job queue: Broker nativo para Celery con soporte para prioridades, delays y reconocimiento de tareas.

Celery

  • Asíncrono: Tareas pesadas (emails, PDFs, imports) fuera del request path. El usuario no espera.
  • Scheduling: Celery Beat para jobs periódicos con definición en código, no en crontabs separados.
  • Fiabilidad: Retry con backoff exponencial, dead letter queues, rate limiting y monitoreo con Flower.
  • Escalado: Añadir workers sin tocar código. Distribución automática de carga entre procesos.

Docker

  • Reproducibilidad: Misma imagen de desarrollo a producción. Sin «en mi máquina funciona».
  • Aislamiento: Cada servicio en su contenedor con dependencias propias. Sin conflictos.
  • Simplicidad: Contenedores para gestionar el stack completo. Sin orquestadores complejos.
  • Seguridad: Imágenes base slim, usuarios no-root, scan de vulnerabilidades y rebuilds automatizados.

Adecuado para ITSM/PSA

No es un stack genérico. Cada decisión técnica responde a un requisito concreto de gestión de servicios TI y PSA.

Modelo multi-tenant

Requisito

Separación completa de datos entre clientes con eficiencia operativa.

Solución

PostgreSQL Row-Level Security (RLS)

Cada tenant aísla sus datos a nivel de fila en la misma base de datos. Sin duplicated schemas, sin shards. Los queries del ORM de Django aplican automáticamente el filtro de tenant. Esto reduce coste de infraestructura y simplifica backups.

Seguimiento de SLA en tiempo real

Requisito

Contadores de tiempo de respuesta y resolución por prioridad, actualizados al segundo.

Solución

Redis para contadores incrementales

Los timers de SLA se almacenan como claves Redis con TTL. Cada actualización es un INCR/DECR atómico. Si un ticket se pausa, el tiempo restante se serializa. La latencia es <1ms y no impacta a PostgreSQL. Celery Beat verifica vencimientos cada minuto.

Notificaciones en background

Requisito

Emails de notificación, webhooks y alertas sin ralentizar la interfaz del usuario.

Solución

Celery workers dedicados

Cada acción que genera una notificación (ticket creado, SLA en riesgo, comentario público) encola una tarea en Celery. Los workers procesan con prioridad, retry automático y dead letter queue. El usuario recibe respuesta HTTP instantánea.

Marketing estático + app dinámica

Requisito

Páginas de marketing con SEO perfecto junto a la aplicación operativa en tiempo real.

Solución

Next.js hybrid rendering

Las páginas de marketing (Inicio, Soluciones, Precios) se generan estáticamente con SSG en build time. El dashboard y las vistas operativas se sirven con SSR o CSR dinámico. Todo en el mismo dominio, mismo deploy, mismo código.

Consultas analíticas pesadas

Requisito

Dashboards con métricas de SLA, tiempo por cliente y KPIs sin afectar la operación diaria.

Solución

PostgreSQL materialized views + Redis cache

Los reportes agregados se materializan en PostgreSQL y se refrescan con Celery Beat (cada 5 min). El resultado se cachea en Redis. El dashboard carga en <200ms sin tocar las tablas de operaciones.

Eventos entre módulos

Requisito

Crear un ticket desde un cambio, actualizar SLA al reasignar, notificar al cliente al cerrar.

Solución

Django Signals + Redis Pub/Sub

Los signals de Django conectan lógica entre módulos (Service Desk → Contratos → Inventario). Para notificaciones entre usuarios en tiempo real se usa Redis Pub/Sub. Cada acción genera el efecto dominó correcto.

Qué cambia en la práctica

Cada tenant es una base de datos separada
Row-Level Security en una sola base de datos
Menos coste de infraestructura y backups más simples
Timers de SLA calculados on-the-fly en cada request
Contadores atómicos en Redis con latencia <1ms
Reducción de carga en PostgreSQL y UI instantánea
Notificaciones bloquean la creación de tickets
Celery procesa emails y webhooks en background
Respuesta HTTP <100ms incluso con 5 notificaciones
Consultas analíticas ralentizan la operación
Materialized views cacheadas en Redis
Dashboard de KPIs en <200ms sin impacto operativo

Arquitectura probada. Despliegue flexible.

Stack diseñado para operación real. Tú decides dónde ejecutarlo.