Як Cloudflare шість тижнів шукала баг у Rust, який брехав про '200 OK'
Уявіть сервіс, який радісно звітує, що все пройшло ідеально, поки ваші файли тихенько зникають у цифровому небутті. Інженери Cloudflare провели півтора місяця у цьому пеклі, намагаючись зрозуміти, куди діваються мегабайти даних.
Все почалося з того, що користувачі Cloudflare почали отримувати обрізані файли та зображення. При цьому внутрішні системи моніторингу не показували жодних аномалій, а сервери впевнено видавали клієнтам успішний статус HTTP 200 OK.
Спочатку підозра впала на власні сервіси стиснення зображень та бізнес-логіку авторизації. Після кількох тижнів безуспішного переписування власного коду інженерам довелося спуститися на рівень мережевих з'єднань, де і виявилася справжня аномалія: дані губилися безпосередньо під час передачі через сокет.
Винуватцем виявилася бібліотека hyper, популярний HTTP-інструмент для мови Rust, яка зазвичай позиціонується як еталон безпеки та надійності. Проблема полягала в тому, що бібліотека закривала мережеве з'єднання до того, як повністю виштовхувала тіло відповіді зі свого внутрішнього буфера.
Культ безпеки сучасних технологій, де компілятор нібито гарантує відсутність будь-яких помилок, знову зазнав кумедного фіаско. Як виявилося, навіть коли код фізично не може впасти через проблеми з пам'яттю, він усе одно здатний з абсолютним спокоєм згодовувати користувачам порожнечу замість реальних даних.
Коментарі
Допоможи покращити наступну версію: Додавай контекст або пропонуй виправлення. Після AI-перевірки коментарі можуть отримати бали для переписування. Перевірка й оновлення потребують часу; повна шкала не гарантує нової версії.