No confíes en que cada instancia tenga un cron local. Usa un bloqueo de líder, como una fila o una clave adquirida con un arrendamiento y un tiempo de vida, de modo que solo lo ejecute quien lo tiene, o delega la planificación en un cron de plataforma que encole un único trabajo para que lo recoja un worker. En cualquier caso, haz el proceso idempotente y observable, porque un arrendamiento puede caducar a mitad de ejecución y provocar solapamiento.
Por qué lo preguntan los entrevistadores
Es un problema pequeño de sistemas distribuidos con muchos modos de fallo sutiles. El entrevistador quiere ver que no asumirías que unos planificadores en proceso sobre instancias idénticas se disparan una sola vez, que sabes que los bloqueos necesitan caducidad para sobrevivir a una caída, y que la idempotencia sigue siendo la red de seguridad real. Monitorizar un proceso que deja de ejecutarse en silencio es el detalle que más candidatos se dejan.
Cómo estructurar tu respuesta
- Enuncia el problema: instancias idénticas disparan cada una su propio temporizador.
- Da los dos enfoques viables, con bloqueo y con planificación de plataforma.
- Cubre caducidad del arrendamiento, solapamiento y recuperación tras caída.
- Añade monitorización para el proceso que nunca llegó a ejecutarse.
Ejemplo de respuesta
La versión ingenua corre seis veces, y la versión donde se designa una instancia especial deja de funcionar el día que esa instancia no está sana. Así que o uso un bloqueo o saco la planificación de la aplicación por completo. Con bloqueo, cada instancia intenta adquirir un arrendamiento a la hora prevista, normalmente un insert o un update condicional sobre una tabla de trabajos con caducidad, y solo corre el ganador, renovando el arrendamiento mientras trabaja. La sutileza es que un arrendamiento puede caducar durante una ejecución larga y entonces arranca una segunda instancia, así que el proceso sigue teniendo que ser seguro de ejecutar dos veces. Mi preferencia a cualquier escala es el segundo enfoque: planificación a nivel de plataforma que encola un único mensaje, y workers normales que lo consumen. Eso da reintentos, visibilidad e historial gratis, y el código de aplicación se queda en un simple manejador. Sea como sea, registro las horas de inicio y fin y aviso cuando un proceso no ha terminado dentro de su ventana esperada, porque un proceso que deja de correr sin ruido es el fallo del que la gente se entera semanas después.
¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.
Mira cómo funcionaPreguntas de seguimiento que puedes esperar
- ¿Qué pasa si el proceso tarda más que el intervalo entre ejecuciones?
- ¿Cómo harías idempotente un informe nocturno?
- ¿Cómo gestionas un proceso que debe correr una vez por inquilino sobre miles de inquilinos?
Más preguntas para Desarrollador backend
Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.
Predecir mis preguntas