Verlass dich nicht darauf, dass jede Instanz einen lokalen Cron fährt. Nutz ein Leader Lock, etwa eine Zeile oder einen Key, der mit Lease und Time-to-live erworben wird, sodass nur der Halter den Job fährt, oder gib das Scheduling an einen Cron auf Plattformebene ab, der einen Job für einen Worker einreiht. So oder so: mach den Job idempotent und beobachtbar, denn ein Lease kann mitten im Lauf ablaufen und eine Überlappung verursachen.
Warum Interviewer das fragen
Es ist ein kleines Problem verteilter Systeme mit vielen subtilen Fehlermodi. Der Interviewer will sehen, dass du nicht annimmst, In-Process-Scheduler auf identischen Instanzen feuerten nur einmal, dass du weißt, dass Locks ein Ablaufdatum brauchen, um einen Crash zu überleben, und dass Idempotenz das eigentliche Sicherheitsnetz bleibt. Das Monitoring für einen Job, der still nicht mehr läuft, ist das Detail, das die meisten Kandidaten weglassen.
So baust du deine Antwort auf
- Benenn das Problem: identische Instanzen feuern jeweils ihren eigenen Timer.
- Nenn die zwei tragfähigen Ansätze, lockbasiert und plattformgesteuert.
- Geh auf Lease-Ablauf, Überlappung und Crash-Recovery ein.
- Ergänz Monitoring für den Job, der nie gelaufen ist.
Beispielantwort
Die naive Variante läuft sechsmal, und die Variante mit einer eigens bestimmten Instanz hört an dem Tag auf zu funktionieren, an dem diese Instanz ungesund ist. Ich nutze also entweder ein Lock oder hole das Scheduling ganz aus der Anwendung raus. Beim Lock versucht jede Instanz zur geplanten Zeit ein Lease zu erwerben, typischerweise ein Insert oder ein bedingtes Update auf einer Jobs-Tabelle mit Ablaufzeit, und nur der Gewinner läuft und erneuert das Lease während der Arbeit. Der Haken ist, dass ein Lease bei einem langen Lauf ablaufen kann, dann startet eine zweite Instanz, der Job muss also trotzdem zweimal sicher laufen können. Ab einer gewissen Größe bevorzuge ich den zweiten Ansatz: Scheduling auf Plattformebene, das eine einzelne Message einreiht, und ganz normale Worker konsumieren sie. Das liefert Retries, Sichtbarkeit und Historie gratis, und der Anwendungscode wird zum Handler. Wie auch immer, ich erfasse Start- und Endzeiten und alarmiere, wenn ein Job nicht in seinem erwarteten Fenster fertig wurde, denn ein Job, der leise aufhört zu laufen, ist der Ausfall, den Leute Wochen später bemerken.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Was passiert, wenn der Job länger dauert als das Intervall zwischen den Läufen?
- Wie machst du einen nächtlichen Report-Job idempotent?
- Wie handhabst du einen Job, der pro Mandant über tausende Mandanten einmal laufen muss?
Weitere Fragen für Backend-Entwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen