Der mehrstündige Ausfall von Cloudflare war das Ergebnis einer fehlerhaften Fehlerverarbeitung.

Die Firma Cloudflare hat eine Analyse eines der größten Vorfälle in ihrer Infrastruktur veröffentlicht, der dazu führte, dass gestern ein Großteil des Content Delivery Networks über mehr als 3 Stunden hinweg nicht funktionsfähig war. Der Ausfall trat nach einer Änderung in der Datenbankstruktur auf, die im ClickHouse-Speicher abgelegt ist, wodurch die Datei mit den Parametern für das Bot-Abwehrsystem doppelt so groß wurde. In der Datenbank wurden doppelte Tabellen gebildet, während die SQL-Abfrage zur Erstellung der Datei einfach alle Daten aus allen Tabellen nach dem Schlüssel ausgab, ohne Duplikate herauszufiltern. SELECT name, type FROM system.columns WHERE table = 'http_requests_features' order by name;

Der mehrstündige Ausfall von Cloudflare war das Ergebnis einer fehlerhaften Fehlerverarbeitung.

Die erstellte Datei wurde über alle Knoten des Clusters verteilt, die eingehende Anfragen bearbeiten. Im Handler, der diese Datei zur Überprüfung auf Bot-Anfragen verwendet, wurden die darin angegebenen Parameter im Arbeitsspeicher gespeichert, und um übermäßigen Speicherverbrauch zu vermeiden, wurde eine Begrenzung für die maximal zulässige Dateigröße im Code implementiert. Unter normalen Bedingungen war die tatsächliche Dateigröße erheblich kleiner als die festgelegte Begrenzung, überschritt jedoch nach der Duplizierung der Tabellen das Limit.

Das Problem lag darin, dass anstelle einer korrekten Verarbeitung der Limitüberschreitung und der Fortsetzung der Verwendung der vorherigen Version der Datei mit Benachrichtigung des Überwachungssystems über den Ausnahmezustand im Handler ein Notabschlusssignal ausgelöst wurde, das den weiteren Datenverkehr blockierte. Der Fehler wurde durch die Verwendung der Methode unwrap() im Rust-Code mit dem Typ Result verursacht.

Der mehrstündige Ausfall von Cloudflare war das Ergebnis einer fehlerhaften Fehlerverarbeitung.

Wenn der Wert von Result den Status „Ok“ hat, gibt die Methode unwrap() das mit diesem Status verbundene Objekt zurück. Wenn das Ergebnis jedoch kein Erfolg ist, führt der Aufruf zu einem abrupten Programmende (wird durch das Makro „panic!“ ausgelöst). Üblicherweise wird unwrap() während des Debuggings oder beim Schreiben von Testcode angewendet und wird für den Einsatz in produktiven Projekten nicht empfohlen.

Der mehrstündige Ausfall von Cloudflare war das Ergebnis einer fehlerhaften Fehlerverarbeitung.
Der mehrstündige Ausfall von Cloudflare war das Ergebnis einer fehlerhaften Fehlerverarbeitung.


Quelle: opennet.ru
Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster