GitHub объяснил причину сбоев в марте

GitHub объяснил перебои с работой 16, 17, 22 и 23 марта. Как заявили представители платформы, сбои были вызваны проблемами «конфликта ресурсов» с их основным кластером MySQL под названием «MySQL1». Проблема повлияла на производительность большого количества сервисов и функций GitHub.

45240e7a7d39474370234ea8fd08a156.jpg

Конкуренция за ресурсы — это когда несколько процессов/запросов конкурируют за одни и те же ресурсы, будь то память, ЦП, использование диска или даже доступ к таблице базы данных. Когда доступных ресурсов недостаточно, БД не сможет выполнять запросы быстро, что приводит к блокировке таблиц и быстрому накоплению подключений, которые ожидают завершения запросов. В итоге достигается максимальное количество подключений, и все дальнейшие запросы отклоняются. Это приводит к сбою любых служб, которым требуется доступ к базе данных.

16 марта на GitHub наблюдалась повышенная нагрузка в часы пик, и не работали все операции записи, в том числе операции git, запросы API, пакеты GitHub, GitHub Codespaces, GitHub Actions, службы GitHub Pages и т.д.

Следующий сбой произошел 17 марта. После обнаружения проблемы и переключения на другие серверы платформе удалось наладить работу.

22 марта в GitHub применили меры по снижению производительности запросов и включили профилирование памяти на прокси-сервере своей базы данных. 

23 марта повышенная нагрузка снова привела к сбою клиентских подключений. Чтобы решить эти проблемы, GitHub решил ограничить трафик веб-перехватчиков, чтобы снизить нагрузку на свои серверы.

Чтобы предотвратить такие сбои в будущем, платформа проверяет свои системы в часы пик и будет создавать исправления производительности на основе результатов проверки. Одновременно трафик перенаправляется на другую базу данных, чтобы снизить нагрузку, а также нарастить инфраструктуру и сегментировать ее для повышения производительности.

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

GitHub обещает в следующем отчете поделиться более подробной информацией о работе по предотвращению сбоев.

© Habrahabr.ru