Один хук React уронил половину интернета — Cloudflare пала жертвой useEffect

leer en español

Один хук React уронил половину интернета — Cloudflare пала жертвой useEffect

Сбой в Cloudflare показал, насколько хрупкой может быть инфраструктура интернета.

image

12 сентября Cloudflare пережила более чем часовой сбой, вызванный ошибкой в коде панели управления. Нарушение затронуло не только сам интерфейс, но и множество API-сервисов компании. Проблема оказалась связана с некорректным использованием React-хука useEffect — механизма, который при неправильной настройке может приводить к неконтролируемым циклам и перегрузкам.

Как объяснили в компании, в коде дашборда была реализована функция, обращающаяся к Tenant Service API, отвечающему за логику авторизации запросов. Однако в массив зависимостей useEffect попал объект, пересоздававшийся при каждом изменении состояния или пропсов. В результате хук срабатывал не один раз, как предполагалось, а многократно в пределах одного рендера. Это вылилось в шквал обращений к Tenant Service, который оказался не рассчитан на такие пики нагрузки, что и вызвало каскадное падение сервисов.

Диагностика осложнялась тем, что внешне выглядело так, будто недоступен сам API, хотя истинной причиной была панель управления, перегружающая его изнутри. Дополнительную сложность внесло то, что система мониторинга не позволяла отличить повторные попытки выполнения от действительно новых запросов. Поэтому инженерам потребовалось время, чтобы связать массовые сбои именно с циклическими вызовами дашборда.

После инцидента в Tenant Service были выделены дополнительные ресурсы и внедрено более детальное наблюдение за нагрузкой. В вызовы с панели теперь добавляется информация, позволяющая различать повторные попытки и новые обращения, что должно помочь быстрее распознавать подобные аномалии. Также отмечается, что useEffect остается мощным инструментом React, но его чрезмерное или невнимательное применение часто приводит к критическим ошибкам, о чем неоднократно предупреждает официальная документация.

Случай спровоцировал обсуждение в сообществе. Одни разработчики утверждали, что вокруг useEffect слишком много негативных разговоров, хотя без него невозможно построить сложные интерфейсы. Другие, напротив, уверены, что большинство программистов злоупотребляют этим хуком, включая его практически в каждом компоненте без необходимости. Нашлись и те, кто обратил внимание на парадокс: компания, специализирующаяся на защите от DDoS-атак, допустила отказ собственного API именно из-за чрезмерного потока запросов.

Cloudflare признала ошибку и пообещала улучшить процессы тестирования, чтобы аналогичные ситуации больше не повторялись.