Tema representativo de entrevista

¿Cómo se diseña un servicio de retención y reducción de resolución (downsampling) de métricas de series temporales?

Diseño de sistemasDifícil
Equipo editorial de Offer.ccPublicado Actualizado

Pregunta

Una plataforma de monitoreo ingiere miles de millones de muestras de series temporales etiquetadas por día. Diseñe un sistema que mantenga 15 días de datos de alta resolución y 2 años de datos de baja resolución, cubriendo el downsampling, el enrutamiento de consultas, la cardinalidad de etiquetas y la validación.

1. Pregunta

Una plataforma recibe métricas de series temporales etiquetadas por servicio, inquilino (tenant) y región. La depuración a corto plazo necesita datos a nivel de segundos, mientras que los reportes a largo plazo necesitan tendencias por minutos u horas. La ingesta sigue creciendo. Conserve 15 días de muestras sin procesar y 2 años de agregados mientras controla los costos y evita que una alta cardinalidad abrume las consultas.

2. Restricciones y aclaraciones

  • Confirme el intervalo de raspado (scrape), la cantidad y cardinalidad de etiquetas, los rangos de consulta, los SLO, el retraso de datos aceptable y los requisitos de eliminación.
  • Separe las muestras sin procesar, los agregados de ventana fija, los resultados de reglas de registro (recording rules) y los archivos a largo plazo.
  • No reemplace contadores, histogramas o cuantiles con un promedio simple; la agregación debe preservar la semántica de las métricas.
  • Defina la ingesta al menos una vez (at-least-once), las muestras duplicadas, las marcas de tiempo fuera de orden y el aislamiento de inquilinos.

3. Arquitectura principal

La capa de ingesta aplica listas de permitidos de etiquetas, presupuestos de cardinalidad y compresión por lotes antes de escribir en el almacenamiento caliente particionado por tiempo. La capa de consulta enruta por rango y paso (step): los rangos cortos leen bloques sin procesar, los rangos largos leen bloques preagregados y los rangos mixtos se combinan con metadatos de resolución. Un trabajo de ventana reproducible lee datos sin procesar, escribe bloques de agregados versionados, los verifica y solo entonces elimina los bloques sin procesar caducados.

4. Flujo de referencia

text
ingest(sample):
  series = canonicalize(metric_name, sorted_labels)
  enforce_cardinality_budget(series)
  append_to_time_partition(series, sample)

downsample(window):
  raw = read_raw(window)
  agg = aggregate_by_metric_semantics(raw, resolution=5m)
  write_versioned_block(window, agg, source_watermark)
  verify_counts_checksums_and_watermark(agg)

query(range, step):
  blocks = choose_resolution(range, step)
  return merge_with_gap_and_resolution_metadata(blocks)

Para los contadores, preserve los incrementos y los reinicios; para los gauges, preserve mínimo/máximo/promedio; para los histogramas, fusione los buckets o las estructuras nativas de histogramas. Devuelva la resolución real, la cobertura y las brechas para que los usuarios no confundan los datos con downsampling con la precisión sin procesar.

5. Compensaciones de consistencia y costo

Las muestras tardías o la ejecución repetida pueden cambiar un agregado, por lo que los trabajos necesitan marcas de agua (watermarks), versiones y escrituras idempotentes, además de un período de corrección definido tras el cierre de la ventana. Las etiquetas de alta cardinalidad multiplican los costos de memoria, índices y consultas; limite las etiquetas arbitrarias de los usuarios con cuotas por inquilino o preagregación. Una mayor resolución, una retención más prolongada y una menor latencia de consulta tienen costos directos de almacenamiento y cómputo.

6. Verificación y observabilidad

  • Valide los recuentos de muestras de entrada/salida, los incrementos de contadores, los totales de buckets, las sumas de verificación (checksums) y las marcas de agua para cada ventana.
  • Reproduzca la misma ventana repetidamente y confirme la idempotencia y las versiones de resultados reemplazables.
  • Monitoree la tasa de rechazo de ingesta, el recuento de series, las muestras de consulta, el retraso del downsampling, la tasa de brechas y el costo de almacenamiento.
  • Compare los resultados sin procesar y los agregados para incidentes reales para garantizar que los picos, los reinicios y las anomalías no se diluyan al promediar.

7. Errores comunes

  • Promediar cada métrica por tiempo y romper la semántica de contadores, cuantiles o histogramas.
  • Usar cadenas de etiquetas no ordenadas como clave de serie, creando series duplicadas y una cardinalidad incorrecta.
  • Eliminar bloques sin procesar antes de verificar el downsampling, imposibilitando la reproducción o la corrección de datos tardíos.
  • Enrutar únicamente por rango de tiempo e ignorar el paso, las brechas y los metadatos de resolución.

8. Puntos de evaluación en entrevistas

Define un modelo de datos por niveles

El candidato separa los datos sin procesar, los preagregados y los archivados, e indica la resolución, la retención y el propósito de consulta de cada nivel.

Preserva la semántica de las métricas

El candidato trata los contadores, gauges, histogramas y cuantiles de forma diferente en lugar de aplicar una única función de promedio a todos los tipos.

Controla la cardinalidad y el costo

El candidato propone reglas de etiquetas, cuotas de inquilinos, rechazo en la ingesta y presupuestos de almacenamiento, explicando luego la relación entre consultas y costos.

Diseña una validación reproducible

El candidato utiliza marcas de agua, versiones, escrituras idempotentes y comprobaciones de reproducción mientras monitorea las brechas, el retraso y la fidelidad de las anomalías.

Fuentes públicas

Preguntas relacionadas

Herramienta de entrevista relacionada

Usa Resolver para una respuesta de diseño de sistemas

Aclara primero los requisitos y luego avanza a través de la escala, la arquitectura, la elección de componentes y las compensaciones (trade-offs).

Ver la herramienta