Saltar al contenido
Volver a los proyectos
Sistemas y arquitectura
En desarrollo

VMageste — SaaS de analítica de marketing de gran volumen

~3 millones de eventos al día, multiinquilino

Métricas clave

~3 M de eventos/día
SaaS multiinquilino
Kafka + ClickHouse
Liderazgo de equipo
VMageste — SaaS de analítica de marketing de gran volumen — ~3 millones de eventos al día, multiinquilino

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

  1. Fuentes de tráfico

    • Meta
    • Google
    • TikTok
  2. Ingesta

    • Apache Kafka
    • Desacopla la ingesta del procesamiento
  3. Procesamiento

    • Consumidores en Golang
    • Enriquecimiento y deduplicación de contactos
  4. Almacenamiento

    • ClickHouse: consultas analíticas
    • PostgreSQL: transaccional
  5. 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.

Todas las tecnologías

Golang
Apache Kafka
ClickHouse
NestJS
PostgreSQL
Redis
Docker
DDD
Artículo completoDel monolito a Kafka + ClickHouse: cómo rediseñé un analytics con millones de eventos por día9 min de lecturaLeer el artículo