Defecțiunea extinsă a Cloudflare a fost rezultatul unei gestionări incorecte a erorilor

Compania Cloudflare a publicat o analiză a uneia dintre cele mai mari incidente din infrastructura sa, din cauza căruia, ieri, cea mai mare parte a rețelei de livrare a conținutului a fost inoperabilă timp de peste 3 ore. Defecțiunea a avut loc după o modificare a structurii bazei de date, găzduite în ClickHouse, după care fișierul cu parametrii pentru sistemul de protecție împotriva boturilor s-a dublat în dimensiune. În baza de date au fost formate tabele duplicate, având în vedere că interogarea SQL pentru generarea fișierului returna pur și simplu toate datele din toate tabelele după cheie, fără a elimina duplicatele. SELECT name, type FROM system.columns WHERE table = ‘http_requests_features’ order by name;

Defecțiunea extinsă a Cloudflare a fost rezultatul unei gestionări incorecte a erorilor

Fișierul creat s-a propagat prin toate nodurile cluster-ului care procesează cererile de intrare. În handlerul care folosește acest fișier pentru a verifica solicitațiile de la boți, parametrii specificați în fișier erau salvați în memoria RAM, iar pentru a proteja împotriva consumului excesiv de memorie, în cod a fost prevăzut un limitator pentru dimensiunea maximă permisă a fișierului. În condiții normale, dimensiunea reală a fișierului era semnificativ mai mică decât limita impusă, dar după duplicarea tabelelor a depășit limita.

Problema a fost că, în loc să fie tratată corect depășirea limitei și să se continue utilizarea versiunii anterioare a fișierului, informând sistemul de monitorizare despre situația de urgență, în handler se activa închiderea forțată, care bloca continuarea traficului. Eroarea a fost cauzată de utilizarea în codul scris în Rust a metodei unwrap() cu tipul Result.

Defecțiunea extinsă a Cloudflare a fost rezultatul unei gestionări incorecte a erorilor

Când valoarea Result are starea „Ok”, metoda unwrap() returnează obiectul asociat cu această stare, dar dacă rezultatul nu este un succes — apelul duce la o închidere forțată (se apelează macro-ul „panic!”). De obicei, unwrap() este folosit în procesul de depanare sau în scrierea de cod de testare și nu este recomandat pentru utilizarea în proiecte de producție.

Defecțiunea extinsă a Cloudflare a fost rezultatul unei gestionări incorecte a erorilor
Defecțiunea extinsă a Cloudflare a fost rezultatul unei gestionări incorecte a erorilor


Sursa: opennet.ro
Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster