VMageste — SaaS de analítica de marketing de gran volumen
~3 millones de eventos al día, multiinquilino
Métricas clave

Contexto
Las agencias y los equipos de marketing de resultados alternan constantemente entre los paneles de Meta, Google y TikTok, conciliando cifras que nunca terminan de coincidir. La plataforma reúne esas fuentes en un solo lugar.
El desafío
Ingerir unos 3 millones de eventos diarios de las API de Meta, Google y TikTok en una plataforma multiinquilino, manteniendo bajo control la latencia de OLTP y la capacidad de respuesta de los paneles en tiempo real, sin cuellos de botella.
La arquitectura
Lideré el rediseño de un monolito en Node.js hacia una arquitectura de microservicios orientada a eventos. Kafka desacopla la ingesta del procesamiento; los consumidores en Golang procesan los flujos a escala; ClickHouse absorbe las consultas analíticas para que PostgreSQL se encargue únicamente de las cargas transaccionales. Patrón Strangler Fig para migrar sin interrupciones.
Flujo de la arquitectura
Fuentes de tráfico
- Meta
- TikTok
Ingesta
- Apache Kafka
- Desacopla la ingesta del procesamiento
Procesamiento
- Consumidores en Golang
- Enriquecimiento y deduplicación de contactos
Almacenamiento
- ClickHouse: consultas analíticas
- PostgreSQL: transaccional
Producto
- Paneles en tiempo real
- Alertas e informes
Decisiones de ingeniería
Migrar sin detener el producto
El patrón Strangler Fig permitió sustituir el monolito pieza a pieza, manteniendo el sistema anterior en funcionamiento mientras se migraba cada parte, en lugar de una reescritura de una sola vez, que es donde este tipo de proyectos suele fracasar.
Separar las escrituras de las lecturas analíticas
Ingesta asíncrona mediante Kafka y consultas analíticas en un almacén columnar. Ambas cargas dejaron de competir por el mismo recurso, que era la verdadera causa de la lentitud.
Contactos depurados desde la entrada
El enriquecimiento y la deduplicación ocurren en el proceso de ingesta, no en un informe. El equipo comercial recibe una base ya depurada, en lugar de descubrir duplicados mientras llama.