Interviewfrage für Backend-Entwickler

Ein beliebter Cache-Key läuft ab, und hunderte Requests treffen gleichzeitig die Datenbank. Wie verhinderst du das?

Worauf der Interviewer abzielt, wie du deine Antwort aufbaust und ein gesprochenes Beispiel zum Anpassen.

Kurzantwort

Verhinder die Stampede mit Single Flight: der erste Request, der danebengreift, nimmt ein kurzes Lock und rechnet neu, während die anderen kurz warten oder den veralteten Wert bekommen. Kombinier das mit Stale-while-revalidate, sodass ein abgelaufener Eintrag weiter ausgeliefert wird, während im Hintergrund ein Refresh läuft, und pack Jitter auf die Time-to-live-Werte, damit gemeinsam erzeugte Keys nicht gemeinsam ablaufen. Bei bekannten Hot Keys aktualisierst du proaktiv vor dem Ablauf.

Warum Interviewer das fragen

Caching-Fragen trennen Leute, die einen Cache eingebaut haben, von Leuten, die einen betrieben haben. Der Interviewer will den konkreten Fehlermodus hören, eine Thundering Herd beim Ablauf, und die üblichen Gegenmaßnahmen. Es öffnet außerdem die härtere Diskussion über Invalidierung, Toleranz gegenüber veralteten Daten und was passiert, wenn der Cache selbst ausfällt, woran eine unterdimensionierte Datenbank meistens zerbricht.

So baust du deine Antwort auf

  • Benenn den Mechanismus: viele gleichzeitige Misses auf einem Hot Key.
  • Nenn das Single-Flight-Lock und was die Wartenden tun.
  • Ergänz Stale-while-revalidate und Jitter auf dem Ablauf.
  • Erwähn das Cold-Cache-Szenario und die Kapazitätsplanung.

Beispielantwort

Gesprochenes Beispiel, erste Person

Das Muster ist eine Thundering Herd: ein Hot Key läuft ab, und jeder gleichzeitige Request greift im selben Moment daneben, sie fahren also alle dieselbe teure Query. Der Kernfix ist Single Flight, wo der erste Miss ein kurzlebiges Lock auf dem Key nimmt und die Arbeit macht, und alle anderen entweder auf das Ergebnis warten oder kurz den veralteten Wert bekommen. Das kombiniere ich mit weichem Ablauf: ich speichere eine logische Refresh-Zeit im Wert und halte die harte Time-to-live länger, ein Eintrag jenseits seiner Refresh-Zeit wird also weiter ausgeliefert, während ein Worker ihn im Hintergrund neu berechnet. Nutzer sehen die Latenz überhaupt nicht. Dann Jitter, denn wenn ein Deploy tausend Keys mit derselben Time-to-live von fünf Minuten warmläuft, laufen sie gemeinsam ab, und ich bekomme die Stampede über den ganzen Cache auf einmal. Die größere Frage danach ist, was passiert, wenn der Cache komplett leer ist, nach einem Neustart oder einem Failover. Ich will, dass die Datenbank das übersteht, also lasttest ich mindestens einmal mit deaktiviertem Cache.

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 es

Nachfragen, mit denen du rechnen solltest

  • Wie würdest du das Single-Flight-Lock über viele Instanzen hinweg sicher umsetzen?
  • Wie invalidierst du einen gecachten Wert, wenn sich die zugrunde liegenden Daten ändern?
  • Was passiert mit deinem Service, wenn das Cache-Cluster komplett ausfällt?

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

Üb die harten Fragen, bevor sie gestellt werden

Trainier mit einem Live-Copiloten und geh dann vorbereitet rein. Ein $29 Session Pass bringt dich durch das Vorstellungsgespräch, ohne Abo und ohne Bindung.

GhostPilot holen