Arquitectura de Alta Disponibilidad
Sistema diseñado para garantizar la disponibilidad de los datos incluso cuando la base de datos principal (Aiven) falla.
Flujo de datos completo
1
El usuario envía un registro desde el frontend
→
Worker (Cloudflare)
2
Worker intenta conectar a Aiven (PostgreSQL)
→
✅ Si responde → Guarda directamente
o
❌ Si falla → Envía a CloudAMQP
3
CloudAMQP almacena el mensaje en la cola cola_personas
→
Espera a que el agente local lo procese
4
El Agente Local (Node.js) consume la cola
→
Guarda inmediatamente en PostgreSQL Local
5
Cada 10 segundos, el agente sincroniza con Aiven
→
Sube pendientes de local → nube
→
Baja nuevos de nube → local
Aiven
Base de Datos Principal
Aiven es el origen de la verdad del sistema. Es una base de datos PostgreSQL alojada en la nube que almacena todos los registros de forma permanente.
🔗 Conexión:
db-personas-vpnoriente-27f2.i.aivencloud.com:11577
Usuario: avnadmin
Base de datos: defaultdb
SSL: Requerido (certificado propio)
Almacenamiento persistente
Fuente de verdad
PostgreSQL
CloudAMQP
Cola de Mensajes (LavinMQ)
CloudAMQP es un servicio de colas de mensajes basado en RabbitMQ que actúa como buffer de emergencia cuando Aiven está caído.
🔗 Conexión:
jaragua.lmq.cloudamqp.com
Usuario: nbnxhngw
Virtual Host: nbnxhngw
Cola: cola_personas
Buffer de emergencia
RabbitMQ
Persistente
Worker
Cloudflare Worker
El Worker es el intermediario que recibe las peticiones del frontend y decide dónde guardar los datos según la disponibilidad de Aiven.
📋 Lógica de decisión:
1️⃣ Intentar conectar a Aiven
2️⃣ Si responde → guardar directamente en la nube
3️⃣ Si NO responde → enviar a la cola de CloudAMQP
✅ El usuario siempre recibe "Registro guardado"
Enrutador inteligente
Cloudflare
Sin estado
Agente Local
Agente de Sincronización
El agente es un script Node.js que escucha la cola de CloudAMQP, guarda en PostgreSQL local y sincroniza bidireccionalmente con Aiven.
⚙️ Funciones:
🔹 Consumidor: Escucha la cola 24/7
🔹 Guardado local: Inserta en PostgreSQL local
🔹 Sincronización: Cada 10 segundos con Aiven
Sincronizador bidireccional
Node.js
PostgreSQL
Cada 10s
Escenarios de funcionamiento
✅ Todo funciona
Usuario → Worker → Aiven (guarda) → Respuesta exitosa
Agente sincroniza cada 10s → Local actualizado
⚠️ Aiven caído
Usuario → Worker → ❌ Aiven falla
Worker envía a CloudAMQP → ✅ Usuario recibe "Guardado"
Agente escucha cola → Guarda en local
🔄 Recuperación
Aiven vuelve en línea → Agente detecta (10s)
Sube pendientes local → Aiven
Baja nuevos Aiven → Local
Sistema completamente sincronizado ✅
Configuración técnica
| Componente | Variable | Valor |
| Aiven | Host | db-personas-vpnoriente-27f2.i.aivencloud.com:11577 |
| Aiven | Usuario | avnadmin |
| CloudAMQP | Host | jaragua.lmq.cloudamqp.com |
| CloudAMQP | Cola | cola_personas |
| Worker | URL | https://worker-personas.vencedores4f.workers.dev/personas |
| Agente | Intervalo | 10 segundos |