Wielogodzinny awaria Cloudflare okazała się wynikiem niewłaściwego przetwarzania błędów

Firma Cloudflare opublikowała analizę jednego z największych incydentów w swojej infrastrukturze, przez który wczoraj większość sieci dostarczania treści była nieczynna przez ponad 3 godziny. Awaria wystąpiła po zmianie w strukturze bazy danych przechowywanej w ClickHouse, po której plik z parametrami dla systemu przeciwdziałania botom podwoił swój rozmiar. W bazie danych utworzyły się zduplikowane tabele, a zapytanie SQL do wygenerowania pliku po prostu pobierało wszystkie dane ze wszystkich tabel według klucza, bez eliminacji duplikatów. SELECT name, type FROM system.columns WHERE table = ‘http_requests_features’ order by name;

Wielogodzinny awaria Cloudflare okazała się wynikiem niewłaściwego przetwarzania błędów

Utworzony plik rozprzestrzenił się po wszystkich węzłach klastra obsługującego przychodzące zapytania. W przetworniku, który używał tego pliku do sprawdzania zapytań od botów, wskazane w pliku parametry były przechowywane w pamięci operacyjnej, a w kodzie wprowadzono limit maksymalnego rozmiaru pliku, aby zapobiec nadmiernemu zużyciu pamięci. W normalnych warunkach faktyczny rozmiar pliku był znacznie mniejszy od ustalonego limitu, ale po zduplikowaniu tabel przekroczył ten limit.

Problem polegał na tym, że zamiast prawidłowego przetwarzania przekroczenia limitu i kontynuowania używania wcześniejszej wersji pliku z informowaniem systemu monitorującego o sytuacji awaryjnej, w przetworniku występowało awaryjne zakończenie, które blokowało dalsze przekazywanie ruchu. Błąd został spowodowany użyciem w kodzie w języku Rust metody unwrap() z typem Result.

Wielogodzinny awaria Cloudflare okazała się wynikiem niewłaściwego przetwarzania błędów

Gdy wartość Result ma stan „Ok”, metoda unwrap() zwraca związany z tym stanem obiekt, ale jeśli wynik nie jest pomyślny — wywołanie prowadzi do awaryjnego zakończenia (wywołany jest makro „panic!”). Zwykle unwrap() stosuje się w procesie debugowania lub przy pisaniu kodu testowego i nie jest zalecane do użytku w projektach produkcyjnych.

Wielogodzinny awaria Cloudflare okazała się wynikiem niewłaściwego przetwarzania błędów
Wielogodzinny awaria Cloudflare okazała się wynikiem niewłaściwego przetwarzania błędów


Źródło: opennet.ru
Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster