Dieser Problemtyp triff auf, wenn eine fehlerhafte Abfrage wiederholt ausgeführt wird und dabei Ressourcen verbraucht oder sogar die Anwendung zum Absturz bringt. Um das Problem zu lösen, kann die Abfrage blockiert oder umgeleitet werden, bevor sie das System erreicht. Auch Rate Limiting oder Circuit Breaker helfen, solche Vorfälle zu verhindern. Dieses Problem, bekannt als „Query of Death“, zeigt, wie wichtig es ist, schädliche Abfragen frühzeitig zu stoppen, um die Stabilität des Systems zu gewährleisten.
Eine verlorene Nacht
Stell dir vor, du bist spät in der Nacht im Bereitschaftsdienst, und plötzlich reagiert deine Anwendung nicht mehr. Die Monitoring-Tools zeigen einen extremen Anstieg der Ressourcennutzung. Nach einer genaueren Analyse der Logs stößt du auf den Übeltäter: Eine einzelne Datenbankabfrage wird ununterbrochen ausgeführt – wie ein schlechter Horrorfilm in Endlosschleife. Ob aufgrund eines Bugs, einer schlecht geschriebenen Anfrage oder schlicht aus Pech– diese eine Abfrage beansprucht die gesamte CPU und den Arbeitsspeicher und bringt das System zum Erliegen. Das Schlimmste daran? Jedes Mal, wenn sie erneut ausgeführt wird, stürzt die Anwendung wieder ab, wodurch eine endlose Kette von Ausfällen entsteht. Man könnte sagen: Deine Nacht ist runiert.
Auswirkungen begrenzen
Die schnellste Lösung besteht darin, die Abfrage daran zu hindern, überhaupt das System zu erreichen. Eine Möglichkeit ist, den Ingress-Controller oder das API-Gateway so zu konfigurieren, dass diese spezifische Abfrage erkannt und mit einem 404-Fehler oder einer Umleitung beantwortet wird, anstatt sie zum Backend durchzulassen. Dies kann durch eine Regel umgesetzt werden, die die Merkmale der Abfrage identifiziert und sie abfängt, bevor sie Schaden anrichtet. Zusätzlich lassen sich Rate Limiting oder Circuit Breaker konfigurieren, die automatisch eingreifen, sobald eine Abfrage Probleme verursacht.
Das Muster verstehen & zukünftige Vorfälle verhindern
Die „Query of Death“ ist ein häufiges Muster, bei dem eine bestimmte Datenbank- oder API-Anfrage dazu führt, dass eine Anwendung abstürzt, einfriert oder übermäßig viele Ressourcen verbraucht. Oft liegt die Ursache in einer schlecht optimierten Abfrage, einem logischen Fehler oder einer unbeabsichtigten Wiederholung.
Die beste Strategie in solchen Fällen ist, die problematische Abfrage zu blockieren oder umzuleiten, bevor sie das System erreicht. Dies kann durch verschiedene Mechanismen erfolgen, wie z. B. die Konfiguration des API-Gateways, des Ingress-Controllers oder der Firewall, um die Abfrage zu erkennen und entsprechend zu behandeln. Indem verhindert wird, dass die Abfrage ausgeführt wird, bleibt die Anwendung stabil, und das eigentliche Problem kann in Ruhe untersucht und behoben werden – ohne den Druck eines akuten Ausfalls.
Stay tuned!
Ist deine Anwendung darauf vorbereitet, plötzliche Lastspitzen zu verkraften, ohne abzustürzen? Im nächsten Beitrag sprechen wir darüber was passiert wenn deine Applikation unerwartet viele Ressourcen verbraucht und wie du bis zu nächsten Morgen durchhalten kannst.
Weitere Infos & Kontakt
Verhindere, dass die „Query of Death“ deine System lahmlegt – unsere Experten helfen dir, die ideale Lösung zu finden! Schreibe uns dein Anliegen an hello@qualityminds.de oder rufe uns unter +49 911 660732011 an!
Dieser Blog Post ist Teil unserer mehrteiligen Serie in der wir typische Software Outages beschreiben und euch dabei helfen sie schnell zu beheben. Alle weiteren Posts findet ihr unter Vorwort: Wie Du das Chaos managest – Der richtige Umgang mit Software-Incidents | QualityMinds.
0 Kommentare