В ночь с четверга на пятницу ресурс Stack Overflow был недоступен. Через какое-то время работа была восстановлена, однако, в пятницу утром сайт снова «упал».

В 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:

Комментарии (22)


  1. questor
    24.02.2018 18:25

    Действительно попадали не все сервера: в то время как на en so не зайти — so на русском продолжал работать без сбоев.


  1. firk
    24.02.2018 19:04
    +1

    Я и не думал что у них сервера на винде.


    1. samizdam
      24.02.2018 19:39

      Основатели обладают хорошей экспертизой в продуктах Microsoft:
      Джефф Этвуд эксперт по Asp.Net
      Джоэл Спольски участвовал в разработке excel.


      Так что, думаю, выбор платформы для них был очевиден)


      1. Yarosl
        25.02.2018 21:15

        Joel Spolsky ненавидит Майкрософт, хоть и признает, что туда заманивают очень умных ребят. Можно почитать в его блоге или книгах


    1. Marwin
      24.02.2018 20:40

      Более того они еще пилят отличный открытый Redis клиент для .Net


    1. SaturnTeam
      25.02.2018 04:27

      Меня это тоже удивляет, но факт. Особенно после того как я почитал блог Джоэла Спольски где он критикует Microsoft, и разработчиков под продукты этой компании.


      1. andreylartsev
        25.02.2018 08:25

        Хмм… нельзя ли ссылочку где от критикует разработчиков и Microsoft?
        Что-то я таких статей не припоминаю ( может с памятью моей что-то стало?



    1. BOM
      25.02.2018 16:10

      А что не так с серверами на винде?


    1. Boyd_Rice
      25.02.2018 16:32

      А что плохого в сервере на винде? Я вот, с огромным удовольствием пользовался IIS на небольшом сервере, где у меня было посажено много субдоменов. Очень простая настройка, никаких проблем. Если есть лицензия, то конфигурация и обслуживание доставят куда меньше хлопот, чем конфигурация Apache или Nginx, если вы не являетесь умудрённым опытом админом.


  1. Alter2
    24.02.2018 19:35
    +5

    Падение Stack Overflow: что случилось

    Стек переполнился?


  1. lolipop
    24.02.2018 19:54
    +2

    сколько кода было не скопипащено…


    1. nerudo
      24.02.2018 20:20

      Может с гитхаба можно статистику взять?


      1. samizdam
        24.02.2018 20:57

        Не вполне репрезентативно.
        Вот если они Ctrl+C отслеживают))


      1. alexoron
        25.02.2018 12:21

        Тссс…
        А то еще Гитхаб упадет.


  1. roodz
    25.02.2018 02:10

    У Full Stack Overflow Copypaster'ов по всему миру случился вынужденный простой.


    1. easty
      25.02.2018 06:59

      Кто говорит, что не копипастит со стека, делает это в два раза больше.


      1. beeruser
        25.02.2018 08:28

        Латентные копипастеры


        1. mickvav
          25.02.2018 11:53

          Да ладно, ну надо в выдаче гугла не в первую ссылку ткнуть, а просмотреть ещё 2-3. Ужас, но не ужас-ужас.


      1. vesper-bot
        26.02.2018 09:07

        Я не копипащу.


        Заголовок спойлера

        Я перепечатываю ;)


  1. SamsonovAnton
    25.02.2018 14:24

    Ограничение трафика в теории решило бы проблему, однако этого не произошло из-за ошибки в работе балансировщика нагрузки. ASP.NET в Stack Overflow выполнял редирект с домашней страницы на /error, а HAProxy получал обратно код ответа 302, который интерпретировал как «успех».
    То есть сервер приложений выдаёт сообщение о нештатной ситуации в виде обычной страницы (пусть и через перенаправление), а «ошибка в работе», значит, у балансировщика нагрузки? Такая логика — прямой путь к немного предсказуемому концу.


  1. yefrem
    25.02.2018 21:15

    Вспомнилась шуточка: если SO упадет, то откуда разработчики узнают, как его поднять?