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

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 655
Зарегистрирован: 20.08.2022

#

Многочасовой сбой Cloudflare оказался результатом некорректной обработки ошибок
Дата публикации:Wed, 19 Nov 2025 07:34:43 +0300

Компания Cloudflare опубликовала разбор одного из крупнейших инцидентов в своей инфраструктуре, из-за которого вчера большая часть сети доставки контента оказалась неработоспособной на протяжении более 3 часов. Сбой произошёл после изменения в структуре БД, размещённой в хранилище ClickHouse, после которого файл с параметрами для системы противодействия ботам в два раза увеличился в размере. В БД были образованы дублирующиеся таблицы, при том, что SQL-запрос для формирования файла просто выводил все данные из всех таблиц по ключу, без отсеивания дубликатов.
SELECT name, type FROM system.columns WHERE table = 'http_requests_features' order by name;
Изображение
Созданный файл распространился по всем узлам кластера, обрабатывающего входные запросы. В обработчике, использующем данный файл для проверки на обращение от ботов, указанные в файле параметры сохранялись в оперативной памяти и для защиты от излишнего расхода памяти в коде был предусмотрен лимит на максимально допустимый размер файла. В обычных условиях фактический размер файла был значительно меньше выставленного лимита, но после дублирования таблиц превысил выставленный лимит.
Проблема оказалась в том, что вместо корректной обработки превышения лимита и продолжения использования прошлой версии файла с информированием системы мониторинга о внештатной ситуации, в обработчике срабатывало аварийное завершение работы, которое блокировало проброс трафика. Ошибка была вызвана использованием в коде на языке Rust метода unwrap() с типом Result.
Изображение
Когда значение Result имеет состояние "Ok", метод unwrap() возвращает связанный с этим состоянием объект, но если результат не является успешным его вызов приводит к аварийному завершению (вызывает макрос "panic!"), . Обычно unwrap() применяется в процессе отладки или при написании тестового кода и не рекомендован для применения в рабочих проектах.
Изображение
Изображение
Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=64282

Жизнь за Нер'зула!

Ответить