GitHub объявил причину своего масштабного глобального сбоя, который произошёл два дня назад.
17 августа GitHub пережил продолжительный сбой длительностью 7 часов 47 минут, который затронул Issues, PR, API, Actions, Copilot и другие сервисы.
В пиковые моменты доля ошибок в веб-версии и API составляла около 20%, а при скачивании архивов репозиториев и raw-файлов доходила до 50%.
Изначальная ошибка на самом деле была довольно небольшой.
В дата-центре GitHub Central US один из sidecar-подов Istio достиг лимита одновременных соединений, но политика автомасштабирования была настроена неправильно. Она отслеживала только нагрузку основного сервиса и не учитывала собственные ограничения sidecar.
В результате sidecar перестал справляться с нагрузкой, после чего сбой начал распространяться дальше по системе.
В итоге лимиты потоков на всех четырёх узлах HAProxy были исчерпаны. Это затронуло путь аутентификации через шлюз GitHub и вызвало массовые тайм-ауты при аутентификации сервисов.
А дальше началась уже действительно абсурдная часть.
Механизм повторных запросов, который изначально должен был повышать надёжность системы, фактически начал атаковать её сам.
Неудачные запросы постоянно повторялись, создавая ещё большую нагрузку на внутренний балансировщик и только усугубляя ситуацию.
В итоге GitHub обнаружил, что если просто остановить проблемный HAProxy, система практически сразу начинает восстанавливаться целиком.
Вечная тема в истории инженерии снова сработала: код, написанный для повышения надёжности системы, в итоге сам становится причиной её падения.
А Copilot устроил второй раунд проблем.
Один из внутренних эндпоинтов GitHub начал отвечать медленнее, что активировало скрытую ошибку в механизме повторных запросов VS Code и увеличило объём запросов примерно в 10 раз.
Обычная нагрузка Copilot Token Service составляет всего:
7 000–9 000 запросов в секунду.
Во время сбоя она взлетела до:
70 000–100 000 запросов в секунду.
Даже один неудачный запрос токена мог породить огромное количество дополнительных запросов и попасть в цикл повторных попыток.
Поэтому даже после того, как основные сервисы GitHub постепенно восстановились, аутентификация Copilot продолжала сбоить ещё несколько часов.
Меры, которые GitHub в итоге принял, были довольно прямолинейными.
Они сократили количество повторных запросов на шлюзе и даже начали возвращать ошибку 403 для части запросов Copilot Token Service прямо на балансировщике, чтобы клиенты перестали бесконечно повторять запросы.
После этого трафик начали постепенно восстанавливать небольшими порциями.
И ещё небольшая деталь: GitHub отдельно упомянул, что во время восстановления также происходили атаки со скрейпингом на эндпоинт codeload, что дополнительно усложнило ситуацию.
Ну и вот.
✈️ Python Ninja
17 августа GitHub пережил продолжительный сбой длительностью 7 часов 47 минут, который затронул Issues, PR, API, Actions, Copilot и другие сервисы.
В пиковые моменты доля ошибок в веб-версии и API составляла около 20%, а при скачивании архивов репозиториев и raw-файлов доходила до 50%.
Изначальная ошибка на самом деле была довольно небольшой.
В дата-центре GitHub Central US один из sidecar-подов Istio достиг лимита одновременных соединений, но политика автомасштабирования была настроена неправильно. Она отслеживала только нагрузку основного сервиса и не учитывала собственные ограничения sidecar.
В результате sidecar перестал справляться с нагрузкой, после чего сбой начал распространяться дальше по системе.
В итоге лимиты потоков на всех четырёх узлах HAProxy были исчерпаны. Это затронуло путь аутентификации через шлюз GitHub и вызвало массовые тайм-ауты при аутентификации сервисов.
А дальше началась уже действительно абсурдная часть.
Механизм повторных запросов, который изначально должен был повышать надёжность системы, фактически начал атаковать её сам.
Неудачные запросы постоянно повторялись, создавая ещё большую нагрузку на внутренний балансировщик и только усугубляя ситуацию.
В итоге GitHub обнаружил, что если просто остановить проблемный HAProxy, система практически сразу начинает восстанавливаться целиком.
Вечная тема в истории инженерии снова сработала: код, написанный для повышения надёжности системы, в итоге сам становится причиной её падения.
А Copilot устроил второй раунд проблем.
Один из внутренних эндпоинтов GitHub начал отвечать медленнее, что активировало скрытую ошибку в механизме повторных запросов VS Code и увеличило объём запросов примерно в 10 раз.
Обычная нагрузка Copilot Token Service составляет всего:
7 000–9 000 запросов в секунду.
Во время сбоя она взлетела до:
70 000–100 000 запросов в секунду.
Даже один неудачный запрос токена мог породить огромное количество дополнительных запросов и попасть в цикл повторных попыток.
Поэтому даже после того, как основные сервисы GitHub постепенно восстановились, аутентификация Copilot продолжала сбоить ещё несколько часов.
Меры, которые GitHub в итоге принял, были довольно прямолинейными.
Они сократили количество повторных запросов на шлюзе и даже начали возвращать ошибку 403 для части запросов Copilot Token Service прямо на балансировщике, чтобы клиенты перестали бесконечно повторять запросы.
После этого трафик начали постепенно восстанавливать небольшими порциями.
И ещё небольшая деталь: GitHub отдельно упомянул, что во время восстановления также происходили атаки со скрейпингом на эндпоинт codeload, что дополнительно усложнило ситуацию.
Ну и вот.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
⚡️Группа хакеров взломала сервера Skillbox, Geekbrains, Skillfactory и ещё 12 онлайн-школ, чтобы выгрузить их курсы в Telegram
Юристы пытаются удалить каналы за Авторские Права🤡 – потому вот актуальные ссылки на архивы:
По школам:
├ Skillbox (1.12 ТБ)
├ Нетология (846 ГБ)
├ SkillFactory (720 ГБ)
├ GeekBrains (934 ГБ)
└ Другие (3.21 ТБ)
По ЯП:
├ Python (1.48 ТБ)
├ SQL (982 ГБ)
├ C++ (590 ГБ)
├ С (318 ГБ)
├ GoLang (290 ГБ)
└ Другие (3.17 ТБ)
Ссылка на общий архив: @schools_hack_arc
Юристы пытаются удалить каналы за Авторские Права🤡 – потому вот актуальные ссылки на архивы:
По школам:
├ Skillbox (1.12 ТБ)
├ Нетология (846 ГБ)
├ SkillFactory (720 ГБ)
├ GeekBrains (934 ГБ)
└ Другие (3.21 ТБ)
По ЯП:
├ Python (1.48 ТБ)
├ SQL (982 ГБ)
├ C++ (590 ГБ)
├ С (318 ГБ)
├ GoLang (290 ГБ)
└ Другие (3.17 ТБ)
Ссылка на общий архив: @schools_hack_arc
👻1🙈1