В SO отмечают, что отказ вызвала серия неполадок, проявившихся одновременно. Система не справилась с растущим числом подключений. Сейчас сайт работает в штатном режиме.
Под катом расскажем о причинах, вызывавших сбой.
/ Скриншот страницы с ошибкой StackOverflow
Stack Overflow работает на 9 веб-серверах, каждый из которых обрабатывает от 200 до 500 запросов в секунду. Как отмечает Architecture Lead платформы Stack Overflow Ник Кравер (Nick Craver), в пятницу проблема затронула два сервера: ny-web01 и ny-web04, которые начали «бомбардировать» базу данных Stack Overflow огромным количеством запросов. Это привело к истощению пула потоков IIS и увеличению времени ожидания обработки запросов от БД.
Получилось так, что новые запросы ждали ответ от пула потоков, при этом не давая завершиться старым. Произошел deadlock. По словам Ника, ограничение трафика в теории решило бы проблему, однако этого не произошло из-за ошибки в работе балансировщика нагрузки.
Проблема с балансировщиком нагрузки
В идеале HAProxy должен был отключить два «проблемных» сервера автоматически и до того, как потребовалось вмешательство администратора. Но ASP.NET в Stack Overflow выполнял редирект с домашней страницы на /error, а HAProxy получал обратно код ответа 302, который интерпретировал как «успех». Поэтому попыток отключить серверы не предпринимал.
/ фото Hamza ButtCC
Ник Кравер отмечает, что у них уже есть решение для этой проблемы. Команда сделает так, что HAProxy будет ожидать лишь определенные статус-коды и перестанет перенаправлять пользователей с домашней страницы. Ник реализовал эту функцию уже довольно давно, однако она не была добавлена в продакшн. Теперь её внедрение назначено на следующую неделю.
Ник отмечает, что команда до сих пор не смогла точно установить причину, которая привела к росту числа SQL-запросов (в треде на SO он опубликовал график — на нем видны большие всплески активности). SO работают над этим и планируют держать резидентов платформы в курсе.
Прошлые отключения
Отметим, что «падения» Stack Overflow случались и в прошлом — было отключение в 2014 году. Однако тогда проблему вызвала массированная DDoS-атака на провайдера сетевых услуг, с которым сотрудничает платформа. В тот раз проблему удалось решить за час.
P.S. О чем мы пишем в Первом блоге о корпоративном IaaS:
Комментариев нет:
Отправить комментарий