В SO отмечают, что отказ вызвала серия неполадок, проявившихся одновременно. Система не справилась с растущим числом подключений. Сейчас сайт работает в штатном режиме.
Под катом расскажем о причинах, вызывавших сбой.
/ фото Hamza Butt CC
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, который интерпретировал как «успех». Поэтому попыток отключить серверы не предпринимал.
Ник Кравер отмечает, что у них уже есть решение для этой проблемы. Команда сделает так, что HAProxy будет ожидать лишь определенные статус-коды и перестанет перенаправлять пользователей с домашней страницы. Ник реализовал эту функцию уже довольно давно, однако она не была добавлена в продакшн. Теперь её внедрение назначено на следующую неделю.
Ник отмечает, что команда до сих пор не смогла точно установить причину, которая привела к росту числа SQL-запросов (в треде на SO он опубликовал график — на нем видны большие всплески активности). SO работают над этим и планируют держать резидентов платформы в курсе.
Прошлые отключения
Отметим, что «падения» Stack Overflow случались и в прошлом — было отключение в 2014 году. Однако тогда проблему вызвала массированная DDoS-атака на провайдера сетевых услуг, с которым сотрудничает платформа. В тот раз проблему удалось решить за час.
Disclaimer: по мере появления новой информации относительно «падения» SO — аналитики, решений по части ИТ-инфраструктуры или ИБ — мы будем дополнять этот материал.
P.S. О чем мы пишем в Первом блоге о корпоративном IaaS:
- Организация блокчейн на VMware vSphere: от теории к практике
- Как IaaS помогает сервисам доставки: опыт российских и зарубежных компаний
- IaaS в автомобильной отрасли: кейсы использования
- Первые шаги после аренды облачной инфраструктуры
- Построение аттестуемых и защищенных инфраструктур на базе решений VMware
Комментарии (22)
firk
24.02.2018 19:04+1Я и не думал что у них сервера на винде.
samizdam
24.02.2018 19:39Основатели обладают хорошей экспертизой в продуктах Microsoft:
Джефф Этвуд эксперт по Asp.Net
Джоэл Спольски участвовал в разработке excel.
Так что, думаю, выбор платформы для них был очевиден)
Yarosl
25.02.2018 21:15Joel Spolsky ненавидит Майкрософт, хоть и признает, что туда заманивают очень умных ребят. Можно почитать в его блоге или книгах
SaturnTeam
25.02.2018 04:27Меня это тоже удивляет, но факт. Особенно после того как я почитал блог Джоэла Спольски где он критикует Microsoft, и разработчиков под продукты этой компании.
andreylartsev
25.02.2018 08:25Хмм… нельзя ли ссылочку где от критикует разработчиков и Microsoft?
Что-то я таких статей не припоминаю ( может с памятью моей что-то стало?
Boyd_Rice
25.02.2018 16:32А что плохого в сервере на винде? Я вот, с огромным удовольствием пользовался IIS на небольшом сервере, где у меня было посажено много субдоменов. Очень простая настройка, никаких проблем. Если есть лицензия, то конфигурация и обслуживание доставят куда меньше хлопот, чем конфигурация Apache или Nginx, если вы не являетесь умудрённым опытом админом.
roodz
25.02.2018 02:10У Full Stack Overflow Copypaster'ов по всему миру случился вынужденный простой.
easty
25.02.2018 06:59Кто говорит, что не копипастит со стека, делает это в два раза больше.
SamsonovAnton
25.02.2018 14:24Ограничение трафика в теории решило бы проблему, однако этого не произошло из-за ошибки в работе балансировщика нагрузки. ASP.NET в Stack Overflow выполнял редирект с домашней страницы на /error, а HAProxy получал обратно код ответа 302, который интерпретировал как «успех».
То есть сервер приложений выдаёт сообщение о нештатной ситуации в виде обычной страницы (пусть и через перенаправление), а «ошибка в работе», значит, у балансировщика нагрузки? Такая логика — прямой путь к немного предсказуемому концу.
yefrem
25.02.2018 21:15Вспомнилась шуточка: если SO упадет, то откуда разработчики узнают, как его поднять?
questor
Действительно попадали не все сервера: в то время как на en so не зайти — so на русском продолжал работать без сбоев.