Tema representativo de entrevista

Entrevista de diseño de sistemas: ¿Cómo construirías una evaluación de feature flags consistente y segura ante rollbacks?

Diseño de sistemasDifícil
Equipo editorial de OfferCCPublicado Actualizado

Pregunta

Cientos de servicios evalúan feature flags según atributos de inquilino (tenant), región y usuario. Diseña la publicación de configuraciones, la propagación de contexto, la consistencia de caché, la contingencia ante fallos y el rollback.

Planteamiento y contexto

La plataforma sirve feature flags booleanas, de cadena de texto y estructuradas a servicios multiinquilino (multi-tenant). Las reglas pueden depender del inquilino, usuario, región y versión de la aplicación. Tras un despliegue, algunas instancias se actualizan de inmediato mientras que otras sufren retrasos de minutos, y el contexto sensible no debe llegar a los registros. Diseña el plano de control, el plano de datos, el contexto de evaluación, la caché, el despliegue, los fallos y el ciclo de auditoría.

Qué está evaluando el entrevistador

  • Separar la publicación del plano de control de la evaluación del plano de datos y definir objetivos de versión y consistencia.
  • Fusionar, sobrescribir, propagar y proteger correctamente el contexto de evaluación.
  • Diseñar la invalidación de caché, instantáneas sin conexión, valores predeterminados y rollbacks sin requerir una RPC en vivo por cada solicitud.
  • Hacer que la telemetría de exposición, errores, cambios y coincidencias de reglas sea auditable sin filtrar datos personales.

Preguntas para aclarar primero

  1. ¿La evaluación debe ser fuertemente consistente o se aceptan datos desactualizados (stale)? ¿Cuál es la obsolescencia máxima permitida?
  2. ¿Cuál es la precedencia de reglas para inquilino, usuario, dispositivo, región y versión?
  3. ¿Cuánto tiempo deben operar los servicios cuando el plano de control no esté disponible y quién aprueba los valores predeterminados?
  4. ¿Qué campos de contexto constituyen datos personales y cuáles pueden incluirse en los registros de exposición?
  5. ¿Se requieren SDKs multilenguaje y evaluación local sin conexión, o es aceptable un evaluador remoto?

Estructura de respuesta en 30 segundos

El plano de control validaría las reglas, publicaría versiones inmutables, gestionaría aprobaciones y ejecutaría rollbacks. Los SDKs del plano de datos evaluarían instantáneas locales versionadas para garantizar baja latencia y funcionamiento sin conexión. El contexto fusionaría los ámbitos global, de transacción y de invocación con un orden explícito de sobrescritura y campos mínimos. Las instancias recibirían actualizaciones mediante transmisión en tiempo real (streaming) combinada con sondeo (polling), con TTL y una verificación de monotonicidad de versiones. Los fallos utilizarían un valor predeterminado tipado o el último valor válido conocido (last-known-good) e indicarían la obsolescencia; las flags críticas podrían fallar de forma cerrada (fail closed). Los eventos de auditoría contendrían versiones y claves anónimas, nunca atributos en bruto.

Respuesta detallada paso a paso

Paso 1: Definir objetos y una máquina de estados de publicación

Una flag contiene tipo, valor predeterminado, reglas, variantes, entorno, versión y hora de activación. La publicación avanza por borrador, validación, aprobación, despliegue canary, completado o rollback; cada cambio genera una versión inmutable. Los errores de compilación, las discrepancias de tipos o la falta de valores predeterminados bloquean la publicación en lugar de convertirse en fallos en tiempo de ejecución para cada servicio.

Paso 2: Diseñar el contexto de evaluación

Representa los atributos de aplicación, host, región, inquilino y usuario como contexto estructurado. Fusiona el contexto global, de transacción y de invocación según la especificación con un orden explícito para claves duplicadas. Los SDKs no deben leer implícitamente estados de hilo arbitrarios. Aplica listas de permitidos (allowlists) de campos y anonimización antes de que el contexto entre a un SDK, transporte o registro.

Paso 3: Elegir evaluación local o remota

La baja latencia y la tolerancia a caídas breves del plano de control favorecen la evaluación local a partir de una instantánea distribuida de reglas. La evaluación remota centraliza la lógica compleja, pero añade dependencia de red y disponibilidad a cada llamada. Un enfoque híbrido puede mantener la evaluación simple en el SDK y recurrir a un proveedor para reglas complejas, devolviendo valores tipados, motivos, versiones y metadatos.

Paso 4: Establecer objetivos de caché y consistencia

Indexa las cachés de instantáneas por entorno, conjunto de flags y versión, protegiéndolas con sumas de verificación (checksums) y caducidad. El sondeo compensa las notificaciones de actualización perdidas. Una instancia inicia desde su última instantánea confiable y se pone al día de forma asíncrona. Define como SLOs las reglas de “nunca retroceder”, segundos máximos de obsolescencia y tiempo de propagación de rollbacks.

Paso 5: Gestionar fallos y valores predeterminados seguros

Ante errores de evaluación, devuelve un valor predeterminado compatible con el tipo o el último valor válido conocido junto con el motivo, código de error y origen. Las flags de pagos, autorización y eliminación no deben adoptar silenciosamente un valor predeterminado peligroso; pueden bloquearse o utilizar una política aprobada de fallo cerrado (fail-closed). Protégete contra flags desconocidas, conversiones de tipos no seguras y tiempos de espera (timeouts) de reglas que se propaguen a los llamadores.

Paso 6: Diseñar telemetría de auditoría y exposición

El plano de control registra quién publicó, aprobó, ejecutó canaries o hizo rollback, y en qué momento. El plano de datos registra la clave de la flag, versión, resultado, rama de regla, versión del SDK y un hash anónimo del sujeto, nunca correos electrónicos en bruto, IP o el contexto completo. Aísla el muestreo, la retención y el acceso por inquilino, y vincula los resultados a métricas para detectar el impacto del despliegue canary.

Paso 7: Verificar rollbacks y migraciones

Reproduce contextos fijos contra cada versión de reglas y compara los resultados entre SDKs de distintos lenguajes. Pon a prueba escenarios de notificaciones perdidas, cachés corruptas, caídas del plano de control, desfase de reloj, rollbacks parciales y actualizaciones de proveedores. Un rollback crea una nueva versión en lugar de reescribir el historial; compara la distribución de versiones de instancias y las métricas de negocio tras completarlo.

Ejemplo de respuesta de alta calidad

El plano de control gestiona comprobaciones de tipos, compilación, aprobaciones, versiones y despliegues canary; los SDKs evalúan instantáneas locales con suma de verificación para ofrecer baja latencia y operación sin conexión. El contexto fusiona los ámbitos global, de transacción y de invocación con un orden de sobrescritura fijo y una lista de permitidos para campos sensibles. Las instancias utilizan notificaciones combinadas con sondeo, con un límite máximo de obsolescencia y una regla de versión monótona. Los errores devuelven valores predeterminados tipados o los últimos válidos conocidos, con opciones de fallo cerrado para flags críticas. Las auditorías preservan la cadena de publicaciones y rollbacks, los registros de exposición solo contienen versiones, resultados y claves anónimas, y el rollback es una nueva versión verificada mediante repeticiones en SDKs y simulacros de fallos.

Errores comunes

  • Llamar al plano de control sincrónicamente para cada evaluación, acoplando la disponibilidad del negocio a este.
  • Almacenar valores en caché sin versión, impidiendo explicar rollbacks y datos desactualizados.
  • Dejar el orden de fusión del contexto al comportamiento del SDK de cada lenguaje, generando resultados discrepantes entre servicios.
  • Registrar atributos completos de usuario o correos electrónicos.
  • Sobrescribir configuraciones antiguas durante un rollback, perdiendo el historial de auditoría y reproducción.

Preguntas de seguimiento y respuestas

Pregunta de seguimiento 1: ¿Puede continuar la evaluación si el servicio de configuración está caído?

Usa la última instantánea confiable y expón su versión, antigüedad y origen. Más allá del umbral máximo de obsolescencia, elige un valor predeterminado basado en riesgo, bloquea la operación o requiere intervención humana en lugar de operar silenciosamente de forma indefinida.

Pregunta de seguimiento 2: ¿Cómo mantienes la consistencia entre SDKs de diferentes lenguajes?

Especifica la normalización, tipos, fusión de contexto y motivos de error, y proporciona vectores versionados de entrada/salida entre lenguajes. Un proveedor puede ejecutar reglas complejas centralmente mientras los SDKs comparten el mismo protocolo y ciclo de vida.

Pregunta de seguimiento 3: ¿Cómo mantienes estable el porcentaje de un canary?

Asigna a cubos (buckets) una clave de sujeto anónima y estable mediante un algoritmo de hash explícito. Una versión de regla fija asigna al mismo sujeto la misma variante en cada instancia. Modificar el algoritmo o la sal (salt) crea una nueva versión con un impacto de migración documentado.

Pregunta de seguimiento 4: ¿Por qué utilizar hooks?

Los hooks pueden añadir contexto antes de la evaluación, validar un valor después de ella o emitir telemetría, pero requieren un orden explícito, tiempos de espera y gestión de errores. No deben modificar silenciosamente los tipos de flag ni omitir la auditoría.

Pregunta de seguimiento 5: ¿Cómo se elimina una flag de forma segura?

Identifica referencias en el código, tráfico de evaluación y ramas predeterminadas, publica una versión con valor fijo, obsérvala y luego elimina las reglas y los metadatos del SDK. Conserva las versiones históricas y los registros de migración para que las instancias antiguas no reciban un tipo desconocido.

Fuentes públicas

Preguntas relacionadas

Recursos

Comparación de productos

Cada comparativa se basa en fuentes oficiales e incluye una fecha de revisión.

Abrir la comparativa completa

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