MCP Vector Sync

by qtoexdj
Verified
# Sistema MCP Vector Sync: Enfoque Basado 100% en Eventos Este documento describe el nuevo enfoque basado completamente en eventos implementado en MCP Vector Sync para optimizar el rendimiento y reducir costos. ## Cambios Principales Hemos realizado los siguientes cambios en el sistema: 1. **Eliminación del polling periódico**: Eliminamos el sistema de verificación cada 6 horas para reducir costos y consultas innecesarias. 2. **Webhooks directos desde Supabase**: Implementamos un trigger que envía webhooks directamente desde Supabase cuando ocurre un cambio en los proyectos. 3. **Retraso ampliado para nuevas inserciones**: Aumentamos el tiempo de espera para nuevas inserciones de 2 a 20 segundos para garantizar mayor consistencia. 4. **Sistema de reintentos mejorado**: Añadimos reintentos automáticos con backoff exponencial en el trigger de Supabase. ## Arquitectura del Nuevo Sistema ### 1. Flujo de Eventos ``` [Cambio en proyectos] → [Trigger Supabase] → [Envío de webhook] → [MCP Vector Sync] → [Generación de vector] ``` ### 2. Manejo de Fallos El sistema implementa múltiples capas de protección: - **Reintentos automáticos**: El trigger intenta enviar el webhook hasta 3 veces antes de desistir - **Backoff exponencial**: Esperas de 2, 4 y 8 segundos entre intentos - **Tabla de respaldo**: Si todos los intentos fallan, se guarda en `pending_webhooks` - **Registro de auditoría**: Todos los intentos se registran en `webhook_logs` ### 3. Consistencia de Datos Para garantizar la consistencia: - Se aplica un retraso de 20 segundos para nuevas inserciones (INSERT) - Este tiempo permite que la transacción se complete totalmente antes de procesar el webhook - Reduce significativamente las condiciones de carrera ## Ventajas del Nuevo Sistema ### Reducción de Costos - **Eliminación de consultas periódicas**: Solo se realizan consultas cuando hay cambios reales - **Menos uso de recursos en Railway**: El servidor permanece inactivo la mayor parte del tiempo - **Menor consumo de API en Supabase**: Se eliminan las consultas periódicas a todas las tablas ### Mayor Eficiencia - **Procesamiento inmediato**: Los cambios se procesan en tiempo real (con el retraso controlado) - **Aprovechamiento de recursos**: Solo se utilizan recursos cuando realmente se necesitan - **Sin tiempos de espera**: No hay que esperar al siguiente ciclo de polling (antes 6 horas) ### Sistema Más Limpio - **Arquitectura simplificada**: Enfoque puramente event-driven - **Menos puntos de fallo**: Eliminación de componentes redundantes - **Código más mantenible**: Flujo de datos más directo y trazable ## Cómo Funciona el Nuevo Sistema 1. **Cuando se modifica un proyecto en Supabase**: - Se activa el trigger `projects_change_trigger` - La función `notify_project_change_direct()` envía un webhook HTTP directamente - Se registra el intento en `webhook_logs` 2. **En caso de éxito**: - El MCP Vector Sync recibe la notificación - Espera 20 segundos si es una inserción nueva - Procesa solo el proyecto específico mencionado en el payload - Actualiza el vector correspondiente 3. **En caso de fallo**: - El trigger reintenta hasta 3 veces con esperas progresivas - Si todos los intentos fallan, se registra en `pending_webhooks` como respaldo - El job cron que procesa `pending_webhooks` ha sido desactivado pero puede reactivarse si es necesario ## Implementación ### SQL para Supabase El archivo `direct_webhook.sql` contiene todos los cambios necesarios: - Creación de la función `notify_project_change_direct()` - Configuración del trigger para usar la nueva función - Desactivación del job cron de procesamiento ### Cambios en el Código - `src/health.ts`: Aumento del tiempo de retraso a 20 segundos - `src/index.ts`: Eliminación del inicio automático del monitoreo periódico ## Consideraciones de Seguridad Igual que antes, en un entorno de producción se recomienda: 1. Implementar autenticación para los webhooks 2. Configurar límites de tasa (rate limiting) 3. Implementar validación estricta de los datos ## Monitoreo y Mantenimiento - La tabla `webhook_logs` registra todos los intentos de envío - Proporciona información valiosa para debugging y auditoría - Permite identificar patrones de fallos o problemas recurrentes ## Conclusión El nuevo sistema basado 100% en eventos ofrece un enfoque más eficiente, económico y robusto para mantener sincronizados los vectores con los cambios en proyectos, eliminando el desperdicio de recursos mientras mantiene todas las capacidades del sistema anterior.