The Website is down!

Дек 3rd, 2008

Всем привет. Сегодня случилась очень забавная паника, рассказываю.
Некоторое время назад, во время выборов мера Киева, решили мы потестировать kmv.gov.ua на высокую нагрузку, на случай резкого наплыва посетителей на страницу избирательной комиссии.
Велосипед изобретать я не стал, поставил <img src=”эта же страница”>на все страницы – посетитель загружает страницу, а она загружается дважды. Я в это время наблюдал за загрузкой процессора и думал что сейчас график подскочет в 2 раза. Но ничего не произошло. Абсолютно… Поставил два iimg, три, четыре, десять – что-то начало появляться. Решив что больше двадцати раз увеличения посещаемости никто не ожидает, на этом эксперимент прекратил.

Пару слов о железе – 1 (один!) двухкоровый пенек с гигом мозгов, сказевым рейдом, на винде (!), ASP и MS SQL. Это информация не секретная – любой кто в состоянии сделать что-то имея эти сведения, и так может их получить, так что тайны большой я тут не открыл.

Обычная посещаемость – 4-5К хостов 40-50К хитов, которые приходятся на период 9-19 часов по Киеву. Путем несложных расчетов получаем (для простоты приймем что 9-19 это период работы сервера, тоесть 10 часов в день) – 4000/10 = 400 посетителей в час, или 6 в минуту, совершающие Каждуюминуту по 60 загрузок страниц – тоесть каждую секунду сервер отдает по странице. Смешная нагрузка, согласитесь, даже при увеличении ее в 10 раз, сервер нормально жил.

Сегодня мне сообщили что портал не работает. Коннекчусь, смотрю – проц на 100% уже довольно долго, не задумываясь делаю iisreset. проходит 10 Секунд IIS рестартует, проц буквально моментально уходит опять в 100%. Иду на hit.ua в статистику, логинюсь и вхожу в ступор. Количество посетителей перевалило за среднесуточную норму, а на часах – 13 с копейками… Перехожу в почасовую статистику и впадаю в ступор снова – это все только начинается!

Как только мне стала ясна причина, в голове моментально пронеслись статьи с хабра про «Вконтакте» и ДДоС на премию рунета. Да, все оказалось просто.
В этот день опубликовали новые тарифы на комунальные услуги для киевлян. Опубликовал это дело korrespondent.net, откуда эта новость моментально сграбилась еще на десяток сайтов, вместе с двумя активными ссылками – www.kmv.gov.ua и www.municipal.kiev.ua, при чем kmv.gov.ua стояла первой.

Это привело вот к чему (лучше один раз увидеть):

Что произошло дальше – 14:00 – офисный планктон возвращается с обеда и читает новости, читает о тарифах, переходит по первой же ссылке – на главную страницу портала. На гравную страницу за 20 минут с 14 по 14:20 вываливается около 3 тысяч человек, которые рассыпаются по сайту и просматривают около 8 тысяц страниц. Как видим – hit.ua показывает одновременное нахождение на сайте 1148 человек. Критики спросят знаю ли я как определяется этот показатель. Да, знаю, и во избежания таких толков – эта цифра там висела более 40 минут!

Проблема как раз в том, что заходили они через главную страницу, которая довольно увесистая, и заходили очень резко и волнообразно.  Первое что было сделано – я ограничил число коннектов к IIS до 1000, пробую загрузить – получаю Service unavailable – 1000 коннектов открыто, я лишний. Ок, значит теоретически это должно отрубить часть коннектов, в то время как все еще работало, т.е. должно стать полегче. В это время, переделываю несколько запросов на главной, деплою, проверяю – работает, нагрузка падает, убираю ограничение в 1000 коннектов – все еще работает и довольно шустро. Попускает….

Через пару минут решаю что это хорошая возможность выяснить сколько же выдержит тазик и искуственно увеличиваю нагрузку вдвое. Через минут 10 утилизация ядер поднимается до 70%, все еще работает. Далее в течение 10 минут происходит скачкообразное повышение нагрузки и приходится убрать профайлер, а еще через несколько минут сделать iisreset :(

Только потом я понял почему. Как делают умные люди – ставят <img src=»http://жертва»>, я же поставил iframe и получил рекурсивную загрузку главной страницы, так что, честно говоря, не представляю во сколько раз в действительности поднял нагрузку… Не удивлюсь если на порядок. Всему вина раш который преобладал над здравой мыслью и трясущиеся руки :)

Затем решил посмотреть что там со второй жертвой. Захожу www.municipal.kiev.ua – время загрузки – около 5 секунд, учитывая что грузится форма логина!

Вот такой веселый день. Какие можно сделать выводы?

1. Такие экстремальные ситуации дают намного больше опыта чем прочтенные книги и прослушанные семинары.

2. Винда сцуко живучая!!! Все это время вишу на удаленном коннекте, ни разу не случилось так чтоб умер коннект – тормозил(и то это наверное мой ADSL), но не умер!

3. Регулярно делайте стресс-тесты вашим проектам, на порядки которых не ожидаете, даже в самом страшном сне.