Vista General de Arquitectura
Entendiendo cómo funciona ReliaPulse internamente.
Vista General del Sistema
┌─────────────────────────────────────────────────────────────────┐
│ Load Balancer │
└─────────────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ Next.js │ │ Next.js │ │ Next.js │
│ App (1) │ │ App (2) │ │ App (n) │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
└───────────────┼───────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ PostgreSQL│ │ Redis │ │ Workers │
└───────────┘ └───────────┘ └───────────┘Componentes Core
Aplicación Next.js
La aplicación principal maneja:
- UI del Dashboard (React Server Components)
- Endpoints API (Route Handlers)
- Páginas de estado públicas (Server-rendered)
- Autenticación (NextAuth.js)
Base de Datos PostgreSQL
Almacén de datos primario para:
- Organizaciones y usuarios
- Componentes y estado
- Incidentes y actualizaciones
- Configuración y ajustes
Redis
Usado para:
- Colas de trabajos en segundo plano (BullMQ)
- Almacenamiento de sesiones
- Contadores de rate limiting
- Caché (opcional)
Workers en Segundo Plano
Procesos separados que manejan:
- Monitoreo de uptime (health checks)
- Polling de métricas (integraciones externas)
- Entrega de notificaciones
- Limpieza de datos
Flujo de Datos
Creación de Incidente
Usuario crea incidente
│
▼
API Route Handler
│
├─► PostgreSQL (guardar incidente)
│
└─► Cola Redis (trabajos de notificación)
│
▼
Proceso Worker
│
├─► Email/SMS/Webhook
│
└─► Alertas On-callFlujo de Health Check
Scheduler (Worker)
│
▼
Request HTTP al Target
│
▼
Evaluar Condiciones
│
├─► Éxito: Actualizar estado del componente
│
└─► Fallo: Verificar umbral
│
├─► Bajo umbral: Marcar como fallido
│
└─► Sobre umbral: Crear incidente
│
└─► Enviar notificacionesFlujo de Polling de Métricas
Scheduler (Worker)
│
▼
Consultar API Externa (Datadog, Prometheus, etc.)
│
▼
Parsear Respuesta
│
├─► Almacenar data points
│
├─► Verificar umbrales
│
└─► Actualizar estado del componenteMulti-Tenancy
ReliaPulse usa un modelo de multi-tenancy de base de datos única:
Aislamiento de Organización
- Cada modelo de datos incluye
organizationId - Todas las consultas filtran por organización
- Las rutas API validan acceso a la organización
- No hay acceso a datos entre organizaciones
Contexto de Request
// Middleware extrae organización de la sesión
const session = await auth();
const organizationId = session.user.organizationId;
// Todas las consultas de DB incluyen filtro de organización
const components = await prisma.component.findMany({
where: { organizationId }
});Autenticación
Sistema de Autenticación Dual
Request
│
├─► Verificar header Authorization
│ │
│ └─► ¿API Key encontrada? ─► Validar key ─► Sesión sintética
│
└─► Sin API key ─► Verificar cookie de sesión ─► Auth de sesiónFlujo de Sesión
- Usuario inicia sesión vía NextAuth.js
- Sesión almacenada en JWT (o base de datos)
- Cookie enviada con cada request
- Middleware valida sesión
Flujo de API Key
- Request incluye
Authorization: Bearer sk_live_xxx - Key es hasheada y buscada
- Permisos verificados contra los requeridos
- Sesión sintética creada para el request
Escalabilidad
Escalamiento Horizontal
- Servidores de app: Sin estado, escalan detrás del load balancer
- Workers: Escalan añadiendo más procesos
- Base de datos: Usar réplicas de lectura para consultas
- Redis: Modo cluster para alta disponibilidad
Optimizaciones de Rendimiento
- Server components (menos JS en cliente)
- Optimización de consultas de DB (índices, batching)
- Caché de respuestas (donde es apropiado)
- Connection pooling (Prisma)
Arquitectura de Despliegue
Docker Compose (Desarrollo/Pequeña Escala)
docker-compose.yml
├── app (Next.js)
├── worker (BullMQ workers)
├── db (PostgreSQL)
├── redis (Redis)
└── adminer (Admin de DB)Kubernetes (Producción)
├── Deployments
│ ├── app (replicas: 3)
│ └── worker (replicas: 2)
├── Services
│ ├── app-service
│ └── worker-service (interno)
├── Ingress
│ └── ingress principal
└── Externos
├── RDS/Cloud SQL
└── ElastiCache/Cloud MemorystoreDocumentación Relacionada
- Stack Tecnológico - Tecnologías usadas
- Base de Datos - Diseño de esquema
- Workers - Procesamiento en segundo plano
- Seguridad - Medidas de seguridad