Mnohahodinový výpadek Cloudflare se ukázal být výsledkem nesprávného zpracování chyb

Společnost Cloudflare zveřejnila analýzu jednoho z největších incidentů ve své infrastruktuře, kvůli kterému byla včera většina sítě pro doručování obsahu nefunkční po více než 3 hodiny. K selhání došlo po změně struktury databáze umístěné ve skladu ClickHouse, po níž se soubor s parametry pro systém ochrany proti botům zvětšil dvojnásobně. V databázi byly vytvořeny duplicitní tabulky, přičemž SQL dotaz pro generování souboru jednoduše vybíral všechna data ze všech tabulek podle klíče, bez filtrování duplicit. SELECT name, type FROM system.columns WHERE table = 'http_requests_features' order by name;

Mnohahodinový výpadek Cloudflare se ukázal být výsledkem nesprávného zpracování chyb

Vytvořený soubor se rozšířil po všech uzlech clusteru, který zpracovává příchozí žádosti. V programu pro zpracování, který používá tento soubor pro ověřování, zda je dotaz od botů, se parametry uvedené v souboru ukládaly do operační paměti a pro ochranu před nadměrnou spotřebou paměti byl v kódu stanoven limit na maximální povolenou velikost souboru. V běžných podmínkách byla skutečná velikost souboru podstatně menší než stanovený limit, ale po duplicaci tabulek ho překročila.

Problém spočíval v tom, že místo správného zpracování překročení limitu a pokračování v používání předchozí verze souboru s informováním monitorovacího systému o mimořádné situaci došlo v programu k havarijnímu ukončení, které zablokovalo další přenos provozu. Chyba byla způsobena použitím v kódu napsaném v jazyce Rust metody unwrap() s typem Result.

Mnohahodinový výpadek Cloudflare se ukázal být výsledkem nesprávného zpracování chyb

Když má hodnota Result stav „Ok“, metoda unwrap() vrací objekt spojený s tímto stavem, ale pokud výsledek není úspěšný - volání vede k havarijnímu ukončení (spouští se makro „panic!“). Obvykle se unwrap() používá při ladění nebo při psaní testovacího kódu a není doporučeno pro použití v produkčních projektech.

Mnohahodinový výpadek Cloudflare se ukázal být výsledkem nesprávného zpracování chyb
Mnohahodinový výpadek Cloudflare se ukázal být výsledkem nesprávného zpracování chyb


Zdroj: opennet.ru
Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster