Mario Ruiz Díaz
← Todos los casos

Caso de estudio · Observabilidad

Tracing distribuido para los revenue services de anuncios de Pluto TV

Una traza por cada request de anuncios a través de Lambdas, contenedores, colas y una plataforma externa de transcoding, extendida a más de 20 servicios y a monitoreo de usuarios reales en las apps mobile, web y TV.

Visitar pluto.tv
Producto
pluto.tv ↗
Cliente
Pluto TV
Industria
Streaming gratuito con publicidad (FAST)
Rol
Senior Software Engineer & Tech Leader
Período
2020 – 2024
20+
servicios trazados de punta a punta
3
plataformas con RUM: mobile, web, TV
1
trace id por request de anuncios
Tracing distribuido para los revenue services de anuncios de Pluto TVESPECTADORESENTREGA DE ANUNCIOS · SYNCPROCESAMIENTO ASÍNCRONOTRANSCODING · EXTERNODATADOG APM · RUMPlayercorte publicitarioadProxyAWS Lambda · span raízadRequestercontenedoresAd servers VASTpartners externosAmazon SQSad tags sin usaradCollectorcontenedores · consumer SQSBase de creativescreatividadesHybriktranscoding externoAmazon SNSnotificaciones de jobsLambda de estadotranscode_job_statusUna traza por requesterrores resaltadosTags → métricasdispositivo · partner · appLogs dentro de spanssin redundanciaRUMapps clienteHTTPmsg SQStraza en el payloadspans · contexto de traza

Deslizá hacia el costado para ver el diagrama completo →

Revenue services de anuncios de Pluto TV con tracing distribuido. Cada servicio, salto de cola e incluso la plataforma externa de transcoding llevan el contexto de traza, así un request de anuncios es una sola traza en la APM.Descargar diagrama (PNG) ↓

Contexto

Pluto TV es un servicio de streaming gratuito financiado con publicidad. Sus revenue services deciden, buscan y preparan los anuncios de cada corte publicitario, entre Lambdas de AWS, servicios en contenedores, SQS y SNS, ad servers VAST de terceros y Hybrik, una plataforma externa de transcoding. Cuando algo fallaba, los ingresos estaban en juego.

El desafío

El troubleshooting dependía de logs repartidos entre Loggly y CloudWatch y de correlación manual: los ingenieros reconstruían cada request a mano, servicio por servicio. Los saltos asíncronos (mensajes de SQS, notificaciones de SNS, una plataforma externa en el medio) rompían cualquier correlación simple.

La solución

Tracing distribuido con Datadog APM en los revenue services: una prueba de concepto sobre el camino de un request de anuncios, después extendida a más de 20 servicios, más Datadog RUM en las apps mobile, web y TV. El contexto de traza se propaga por HTTP, SQS y SNS, incluso a través de Hybrik; los spans llevan tags de negocio; los logs viven dentro de su span padre.

  • Propagación de contexto

    El contexto de traza viaja por HTTP (adProxy → adRequester), mensajes de SQS (adProxy → adCollector) y notificaciones de SNS (adProxy → Hybrik → SNS → Lambda).

  • A través de una plataforma externa

    El contexto de traza se inyecta en el payload que se le envía a Hybrik y lo extrae la Lambda que recibe su notificación de SNS, así el job de transcoding queda dentro de la misma traza.

  • Tags como métricas automáticas

    Los tags de negocio (app, dispositivo, partner, endpoint, estado) en los spans se convierten en métricas y filtros sin instrumentación adicional.

  • Logs dentro de los spans

    Las entradas de log quedan adjuntas a su span padre, y datos del request como los query strings se escriben una sola vez como tag del span raíz en lugar de repetirse en cada log.

  • Monitoreo de usuarios reales

    Datadog RUM en las apps mobile, web y TV conecta lo que viven los espectadores con las trazas del backend detrás.

Decisiones clave

  1. 01

    Tracing, no más logging

    Los logs muestran qué pasó en un lugar; las trazas muestran un request de punta a punta. El objetivo era un único trace id con la historia completa de un request y los errores resaltados a nivel de traza.

    Alternativas evaluadas Logs más ricos e ids de correlación buscados entre herramientas.

  2. 02

    Llevar la traza a través de un tercero dentro de su propio payload

    Hybrik no propaga headers de traza. Inyectar el contexto de traza en el payload del job que se le envía a Hybrik, y extraerlo en la Lambda que procesa el callback de SNS, mantuvo el paso de transcoding externo dentro de la misma traza en lugar de empezar una nueva.

    Alternativas evaluadas Aceptar una traza cortada en el salto externo; correlacionar después por id de job.

  3. 03

    Probarlo primero en el camino más riesgoso

    La prueba de concepto cubrió tres servicios y una Lambda de transcoding que ejercitaban todos los mecanismos de propagación (HTTP, SQS, SNS y una plataforma externa), así el enfoque se validó donde la correlación era más difícil.

  4. 04

    Contexto de negocio como tags, una sola vez

    Poner dispositivo, partner y datos del request en los spans hace que cada traza se pueda buscar por lo que importa a los ingresos, y escribir los campos pesados una sola vez en el span raíz reduce la redundancia de logs.

  5. 05

    De prueba de concepto a estándar de plataforma

    Una vez trazado de punta a punta el camino más difícil, las mismas convenciones se extendieron a más de 20 servicios y a las apps cliente con RUM, para poder seguir un problema del lado del espectador hasta el backend.

Qué hice

  • Propuse y lideré la iniciativa de tracing distribuido para los revenue services.
  • Construí la prueba de concepto sobre adProxy, adCollector, adRequester y la Lambda de estado de transcoding.
  • Implementé la propagación de trazas por HTTP, SQS y SNS, y a través de Hybrik inyectando el contexto en su payload.
  • Extendí el tracing a más de 20 servicios y sumé Datadog RUM a las apps mobile, web y TV.
  • Definí las convenciones de tags y de logs dentro de los spans para los servicios.

Resultados

  • Tracing distribuido en más de 20 servicios.
  • Monitoreo de usuarios reales en las apps mobile, web y TV, vinculado a las trazas del backend.
  • La historia completa de un request de anuncios en un solo trace id, con los errores resaltados a nivel de traza.
  • Un camino directo a la causa en lugar de reconstruir a mano servicio por servicio.

Fuentes y prensa

Contacto

Traeme un problema real.

Un problema de escalado, una migración riesgosa, un workflow de IA que tiene que volverse confiable o un equipo que necesita una dirección técnica más clara.

Conversación de nivel founder · Feedback práctico · NDA disponible a pedido