Tema representativo de entrevista

¿Cómo diseñarías la elección de líder basada en concesiones (leases)?

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

Pregunta

Varias réplicas deben garantizar que solo una instancia ejecute un trabajo de liquidación programado a la vez. Diseña una elección de líder basada en concesiones (leases) y explica la seguridad (safety) y la disponibilidad durante fallas, particiones y recuperación.

Planteamiento y contexto

Varias réplicas comparten el almacenamiento de coordinación y deben garantizar que solo una instancia ejecute un trabajo de liquidación programado a la vez. Diseña el registro de la concesión (lease), la postulación (campaign), la renovación, el traspaso y la observabilidad. Cubre particiones, pausas de procesos, desfase de reloj y fallas de almacenamiento. Una concesión controla quién puede iniciar el trabajo; las escrituras de negocio aún requieren idempotencia y verificaciones condicionales.

Qué está evaluando el entrevistador

  • Si separas la seguridad de la concesión de los efectos secundarios del negocio.
  • Si comprendes compare-and-set atómico, tokens de aislamiento por término (term fencing tokens) y quórums.
  • Si puedes explicar por qué las pausas, particiones y un líder antiguo reactivado no generan escritores duales válidos.
  • Si defines señales medibles, inyección de fallas y comportamiento de recuperación.

Preguntas aclaratorias antes de responder

Confirma la ventana de pausa permitida, la tolerancia a ejecuciones duplicadas, la consistencia del almacenamiento de coordinación, la latencia entre regiones, la cantidad de réplicas y la calidad de sincronización del reloj. Si se requiere consistencia fuerte entre regiones, explicita el balance entre disponibilidad y latencia de elección.

Estructura de respuesta en 30 segundos

Utiliza un almacenamiento de coordinación que ofrezca lecturas linealizables y escrituras condicionales. Cada candidato compite con una identidad única y un término monótonamente creciente; solo la creación o actualización atómica exitosa se convierte en líder. El líder renueva antes de la expiración. Cada escritura de negocio lleva el token del término, y los sistemas posteriores rechazan tokens más antiguos. Un candidato toma el control solo después de confirmar el nuevo estado. Durante una partición o pausa prolongada, la instancia detiene los efectos secundarios; una breve interrupción es más segura que tener escritores duales.

Análisis detallado paso a paso

1. Modelo de datos y operaciones atómicas

El registro de la concesión contiene la identidad del titular, la expiración, el token del término, la versión y la última hora de renovación. La competencia utiliza compare-and-set: crear cuando no existe, o actualizar solo cuando la versión no ha cambiado y la concesión ha expirado. Kubernetes representa las concesiones como objetos de coordinación que contienen información del titular y de renovación; la implementación debe verificar el modelo de consistencia del almacenamiento en lugar de confiar en una caché de consistencia eventual.

2. Renovación y autodescenso

Renueva con suficiente anticipación dentro de la duración de la concesión, dejando margen para la fluctuación de red (jitter) y las pausas del planificador. Si la renovación falla, no se puede leer la confirmación o el proceso se pausa más allá de la ventana de seguridad, detén los efectos secundarios de inmediato y vuelve a postularte tras la recuperación. No decidas la expiración de otro titular basándote únicamente en el reloj local.

3. Fencing e idempotencia del negocio

Cada postulación exitosa genera un token monótono. Los workers, las actualizaciones condicionales de bases de datos o los servicios posteriores rechazan las solicitudes que portan un token más antiguo. Así, un líder antiguo que despierte tras una pausa no podrá sobrescribir las escrituras del nuevo líder. La liquidación aún requiere claves de idempotencia, límites transaccionales y manejo de reintentos.

Respuesta de ejemplo de alta calidad

Defino la seguridad como evitar que dos líderes válidos escriban en el mismo recurso a la vez; la disponibilidad permite una breve pausa tras la expiración de la concesión. El almacenamiento de coordinación proporciona CAS linealizable. Un candidato registra su identidad y un término creciente, y el líder renueva mediante latidos. Cada efecto secundario lleva el token del término, el cual es comparado por las escrituras condicionales posteriores. Si ocurre una partición, una pausa por GC o una pérdida de confirmación de renovación, la instancia se detiene y solo vuelve a postularse tras reconfirmar el estado; esperar unos segundos no es una prueba de seguridad. Raft utiliza términos y votación por mayoría para el liderazgo del registro, mientras que un Kubernetes Lease es un registro de coordinación más ligero. Ambos requieren un modelo de consistencia explícito, un presupuesto de tiempo límite y un plan de recuperación. Yo inyectaría caídas del líder, particiones, desfases de reloj, pausas prolongadas e indisponibilidad del almacenamiento, para luego verificar que no existan escrituras duales, escrituras con tokens obsoletos ni violaciones del tiempo de recuperación.

Errores comunes

  • Mantener un bloqueo solo en la memoria del proceso o depender de lecturas de Redis con consistencia eventual mientras se afirma que no es posible tener un líder dual.
  • Comparar marcas de tiempo sin términos monótonos ni tokens de aislamiento (fencing).
  • Continuar con el lote actual tras un fallo de renovación, dejando una ventana de escritura a un líder antiguo.
  • Equiparar un líder a la vez con la ausencia total de ejecuciones duplicadas en cualquier circunstancia.
  • Probar únicamente elecciones normales y no pausas, particiones, latencia de almacenamiento o fallas de almacenamiento.

Preguntas de seguimiento y respuestas

¿La expiración de la concesión garantiza que el líder antiguo se ha detenido?

No. Un proceso puede pausarse o permanecer aislado mientras sigue ejecutándose. Valida el token de aislamiento en el límite del negocio; la expiración solo significa que la capa de coordinación ya no reconoce a ese titular.

¿Cómo eliges los intervalos de concesión y renovación?

Derívalos del objetivo de detección de fallas, la latencia p99 entre regiones, el presupuesto para pausas del planificador y la fluctuación del almacenamiento, con un margen de varios ciclos de renovación. Monitorea los fallos de renovación y la inestabilidad de la elección (churn) en lugar de copiar un valor fijo en milisegundos.

¿Qué sucede si el almacenamiento de coordinación no está disponible?

Detén los nuevos efectos secundarios y mantén solo resultados de solo lectura o confirmados de forma segura. Tras la recuperación, vuelve a leer el término y postúlate. Si la operación continua es obligatoria, degrada explícitamente a particionamiento (sharding), propiedad multiactiva o intervención humana, y replantea la prueba de seguridad.

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