Planteamiento y contexto
Los productores envían CloudEvents con reintentos, cargas útiles versionadas y tráfico irregular. La gateway debe validar los sobres (envelopes), aislar a los inquilinos, preservar la evidencia de entrega y hacer explícito el comportamiento de entrega al menos una vez (at-least-once) para los consumidores.
Qué evalúa el entrevistador
- Transformar un sobre de protocolo en contratos claros de ingesta y entrega.
- Elegir el alcance de la idempotencia, el estado de los reintentos y los límites de transferencia duradera.
- Diseñar el aislamiento de inquilinos, la evolución de esquemas y la evidencia operativa.
Preguntas para aclarar antes de responder
- ¿Qué pico de eventos por segundo y tamaños de carga útil debe admitir cada inquilino?
- ¿Se permite que los productores reintenten indefinidamente y se requiere ordenamiento por origen (source) o asunto (subject)?
- ¿Qué consumidores necesitan entrega al menos una vez y pueden deduplicar por origen más ID?
- ¿Los esquemas están registrados centralmente y cuánto tiempo deben retenerse los eventos sin procesar para su reproducción (replay)?
Estructura de respuesta en 30 segundos
Terminaría TLS en un edge autenticado, validaría el sobre de CloudEvents y la cuota del inquilino, y luego anexaría el evento sin procesar de forma duradera antes de responder con un acuse de recibo (acknowledgement). Una cola particionada distribuye en abanico (fan-out) a los consumidores mediante entrega al menos una vez; (tenant, source, id) es la clave de deduplicación cuando el productor garantiza su estabilidad. Los acuses de recibo de los consumidores, los cronogramas de reintentos, las colas de mensajes no entregados (dead letters), las versiones de esquemas y los límites por inquilino hacen que la pérdida y la duplicación sean visibles en lugar de implícitas.
Análisis detallado paso a paso
1. Ingerir y validar
Aceptar binding HTTP estructurado o binario, aplicar límites de tamaño y tipo de contenido, y validar atributos obligatorios como specversion, type, source y id. Autenticar al inquilino y rechazar un sobre no válido antes del trabajo duradero. Preservar los bytes y encabezados exactos recibidos para auditoría y reproducción.
2. Elegir el límite de durabilidad
Escribir un registro de evento inmutable y un outbox o desplazamiento de registro (log offset) en una sola operación duradera antes de devolver una respuesta exitosa. Un acuse de recibo basado únicamente en colas corre el riesgo de perder eventos si la publicación en la cola no se confirma; un diseño basado únicamente en bases de datos puede generar cuellos de botella en el fan-out de alto volumen. Exponga la compensación entre latencia y durabilidad.
3. Deduplicar sin ocultar los reintentos
Utilizar una clave (source, id) con alcance de inquilino y un período de retención que cubra los reintentos de los productores. Almacenar el resumen (digest) de la carga útil y la versión del esquema; la misma clave con diferentes bytes es un conflicto que requiere cuarentena. Mantener los intentos de entrega separados del evento lógico para que los reintentos sigan siendo observables.
4. Entregar y reintentar
Los consumidores extraen (pull) de las particiones o reciben entregas enviadas (push) con una concesión (lease). Un acuse de recibo exitoso hace avanzar el intento; los tiempos de espera y los fallos transitorios programan un retroceso exponencial (exponential backoff) con fluctuación (jitter). Los fallos permanentes se trasladan a un flujo de mensajes no entregados con alcance de inquilino con controles de reproducción y registros de auditoría.
5. Evolucionar y operar
Validar las versiones de esquema en el ingreso, enrutar eventos incompatibles a cuarentena y admitir declaraciones de capacidades de los consumidores. Medir eventos aceptados, rechazados, duplicados, demorados, reintentados, enviados a dead-letter y reproducidos por inquilino y origen. Aplicar cuotas, cifrado, retención y controles de acceso sin registrar secretos ni cargas útiles sin restricciones.
Respuesta de ejemplo de alta calidad
“Autenticaría a cada inquilino en el edge, validaría el sobre de CloudEvents, aplicaría límites de tamaño y cuota, y anexaría el evento exacto y los encabezados de forma duradera antes de confirmar. Luego, un log particionado realiza la entrega al menos una vez. La clave de deduplicación es inquilino más origen más ID cuando el productor garantiza la estabilidad del ID; si cambia el digest para la misma clave, se pone en cuarentena. Los consumidores confirman los intentos, los fallos transitorios retroceden con jitter y los fallos permanentes van a un flujo de dead-letter reproducible. Las versiones de esquemas, las métricas por inquilino, la retención y los logs de auditoría hacen explícita la semántica de entrega.”
Errores comunes
- Confirmar antes del anexo duradero → una caída del sistema pierde el evento → enviar ack después del límite duradero elegido.
- Deduplicar por ID globalmente → inquilinos u orígenes pueden colisionar → delimitar el alcance de la clave y verificar el digest.
- Prometer exactamente una vez → los reintentos y los efectos en consumidores siguen siendo posibles → establecer al menos una vez y exigir consumidores idempotentes.
- Descartar esquemas incompatibles → la depuración y la reproducción se vuelven imposibles → poner en cuarentena con evidencia versionada.
Preguntas de seguimiento y respuestas
¿Puede la gateway garantizar el ordenamiento?
Solo dentro de un alcance definido, como una partición por origen y asunto. Preserves los metadatos de secuencia, enrute la misma clave a una sola partición y documente que los reintentos o consumidores paralelos pueden retrasar eventos posteriores.
¿Qué pasa si un productor reutiliza un ID para diferentes cargas útiles?
Compare el digest almacenado y rechace o ponga en cuarentena el conflicto. Nunca sobrescriba silenciosamente el primer evento; alerte al productor porque el contrato de deduplicación se ha roto.
¿Cómo se admite la reproducción específica por inquilino?
Mantenga registros de eventos inmutables con tokens de reproducción vinculados a autorización, un nuevo ID de intento, límites de tasa y un registro de auditoría. Las reproducciones deben superar las verificaciones de esquema y deduplicación y no deben eludir el aislamiento de inquilinos.