TGViewer
Test Engineering Notes Test Engineering Notes @testengineering · 4.01K subscribers
Post #765 3.26K
🪲 Чому впав Cloudflare?

#bugs #sql #rust

Минулого тижня пів інтернету лежало через те, що сервіс Cloudflare впав та був недоступний якийсь час.

Але чому це сталося? Чи винні в цьому тестувальники? Чи справа в … коді на Rust?

Відповідь не така проста, як здається.

🎓 Як обробляються запити в Cloudflare

Усі запити на Cloudflare проходять через основний проксі сервер. На цьому сервері є багато модулів, що виконують перевірки безпеки для захисту від DDoS атак. Зокрема, такий модуль як Bot Management.

Bot Management - це модель машинного навчання для оцінки того, чи даний запит прийшов від бота чи від реального користувача. Модель приймає на вхід ряд параметрів (features) на основі яких будується статистика та оцінки. Так як боти змінюються дуже швидко - то й даний набір параметрів оновлюється раз у пʼять хвилин.

Чисто технічно, набір параметрів - це файл із переліком фічей, який розповсюджується по всім серверам Cloudflare.

🏫 В чому виникла помилка?

За замовчуванням, фічі отримують розподіленим запитом у базу даних “default” у кластері ClickHouse. У користувача був доступ тільки до цієї бази.

Але для покращень безпеки, розробники зробили зміну, що дає можливість працювати ще й з системними таблицями.

Зміну в налаштуваннях зробили, але … не перевірили сам SQL запит.


SELECT
name,
type
FROM system.columns
WHERE
table = 'http_requests_features'
order by name;


А цей запит не мав … фільтру по базі даних. Як результат, цей запит повертав фічі як з таблиці “default”, так і з системної таблиці.

То ж файл з фічами для Bot Management мав купу зайвих дублікатів фічей.

🕶 Ну то й що?

Виявляється, що для обробки фічей попередньо резервується оперативна памʼять. Зазвичай, у файлі було десь 60 фічей при максимумі в 200.

Але коли сталася помилка - у файлі фічей було більше ніж 200!

То ж серверу не вистачало памʼяті, щоб обробити ці фічі. Окей, не вистачило памʼяті, це погано - але чому так довго шукали проблему?

А код на Rust, який обробляє ці фічі … не обробляв таку помилку - а просто кидав базовий Error за допомогою unwrap();


pub fn fetch_features(&mut self, input: &dyn BotsInput, features: &mut Features) -> Result<(), (ErrorFlags, i32)> {
features.checksum &= 0xFFF_FFF_000_000;
features.checksum |= u64::from(self.config.checksum);
let (feature_values, _) = features
.append_with_names(&self.config.feature_names)
.unwrap();
//
}


То ж код почав видавати дуже загальну помилку.

Плюс файл із фічами швидко розлетівся по серверам - й вони також збоїли по тій же самій причині.

💡 Що можна було б зробити?

👉Більш ретельно обробляти помилки. Rust як мова програмування в цьому випадку не винен.
👉Тестувати запити на тестових серверах (включно з лімітами по памʼяті). Можна було б досліджувати як система обробляє дані великих розмірів.

❗️Більш докладно про збій можна почитати в офіційному блозі компанії.
Cloudflare Blog Cloudflare outage on November 18, 2025 Cloudflare suffered a service outage on November 18, 2025. The outage was triggered by a bug in generation logic for a Bot Management feature file causing many Cloudflare services to be affected.
  • 🔥 30
  • 👍 5
  • ❤ 4
More from @testengineering
  1. Oct 6, 2026Вже жовтень - саме час готуватися до ISTQB CT-GenAI "До Нового Року є ще цілий квартал щоб…
  2. Oct 5, 2026Ministry of Testing - англомовні івенти на всі смаки #testing #ai Всім привіт. Хочу розпов…
  3. Sep 30, 2026Скіл, щоб прибрати зайве #ai Цікавий скіл, щоб не продиратись через купу згенерованого тек…
  4. Sep 29, 2026Що таке агент? #ai Зрозумій, на небесах в тестуванні тільки й говорять, що про море агенті…
  5. Sep 28, 2026Navigating the AI Shift #testing@testengineering #ai@testengineering Трохи старе, але не м…
  6. Sep 25, 2026Сувора QA Конференція - AI в тестуванні Вже наступного тижня пройде найцікавіша онлайн-кон…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →