Многчасовият срив на Cloudflare беше резултат от неправилна обработка на грешки.

Компанията Cloudflare публикува анализ на един от най-големите инциденти в своята инфраструктура, в резултат на което вчера голяма част от мрежата за доставка на съдържание беше неработоспособна в продължение на над 3 часа. Сривът се случи след промяна в структурата на БД, разположена в хранилището ClickHouse, след която файлът с параметри за системата за противодействие на ботове се увеличи два пъти по размер. В БД се образуваха дублиращи се таблици, като SQL заявката за формиране на файла просто извеждаше всички данни от всички таблици по ключа, без отсяване на дубликати. SELECT name, type FROM system.columns WHERE table = 'http_requests_features' order by name;

Многчасовият срив на Cloudflare беше резултат от неправилна обработка на грешки.

Създаденият файл се разпространи по всички възли на кластер, обработващ входящите заявки. В обработвача, който използва този файл за проверка на обаждания от ботове, посочените в файла параметри се запазваха в оперативната памет и за защита от прекомерна консумация на памет, в кода бе предвиден лимит за максимално допустим размер на файла. При нормални условия действителният размер на файла беше значително по-малък от зададения лимит, но след дублирането на таблиците той надвиши лимита.

Проблемът беше, че вместо правилно да обработи превишаването на лимита и да продължи да използва предишната версия на файла с информирания на системата за мониторинг за извънредна ситуация, в обработвача се задействаше аварийно приключване, което блокираше по-нататъшното прехвърляне на трафик. Грешката беше причинена от използването в кода на езика Rust на метода unwrap() с типа Result.

Многчасовият срив на Cloudflare беше резултат от неправилна обработка на грешки.

Когато стойността на Result има състояние «Ok», методът unwrap() връща свързания с това състояние обект, но ако резултатът не е успешен - повикването води до аварийно приключване (извиква се макроса «panic!»). Обикновено unwrap() се прилага в процеса на отстраняване на грешки или при писането на тестов код и не се препоръчва използването му в работни проекти.

Многчасовият срив на Cloudflare беше резултат от неправилна обработка на грешки.
Многчасовият срив на Cloudflare беше резултат от неправилна обработка на грешки.


Източник: opennet.ru
Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster