23000 человек написали онлайн-диктант 8 апреля 2017. Как это получилось?
В этом году 200 тысяч человек из 858 городов мира приняли участие в образовательной акции «Тотальный диктант». Пишут диктант уже семь лет в основном на офлайн-площадках, возможность сделать это онлайн есть с 2014 года. Испытав все горести экстремальных нагрузок на сайт, в этом году организаторы акции привлекли целую команду ИТ-компаний. Сегодня мы рассказываем о своей части работы.
фото: Валерий Мельников, РИА Новости
Фонд «Тотальный диктант» начал продвижение акции в феврале — тогда стартовали онлайн-занятия по подготовке и пошли первые публикации в СМИ. Каждый урок смотрели в среднем 13990 человек — конечно, в день диктанта предполагалась еще более значительная нагрузка на сайт. В прошлом году во время диктанта на сервера обрушилась DDoS-атака, из-за которой какое-то время сайт был недоступен. За работоспособность сайта отвечали:
- CMS »1С-Битрикс» (функциональность и интерфейс);
- «Битриксоид» (техническая поддержка);
- «Сервионика» (облачный хостинг);
- научно-технический центр «Атлас» (защита от ботов и DDoS-атак);
- ITSumma (подготовка ИТ-инфраструктуры и серверов);
- Stepik (платформа для онлайн-диктанта).
Подготовка сайта к нагрузке
До старта наших работ проект был размещен на простом виртуальном сервере с такими характеристиками: 2 ядра CPU, 4 Гб оперативной памяти, HDD.
Изначально от команды проекта было предположение, что в день акции на сервер будет поступать 120 RPS, и каждую минуту на сайт будет заходить 1000 посетителей. Чтобы выяснить, сколько RPS сервер сможет выдержать сейчас, и какая конфигурация серверов потребуется для пиковой нагрузки, было проведено нагрузочное тестирование сервера Яндекс.Танком. Итоговая конфигурация основного и резервного серверов выглядела так: 48 ядер CPU, 128 Гб оперативной памяти, 250 Гб SSD.
На период подготовки проекта к пиковой нагрузке мы сделали апгрейд виртуального сервера с сайтом — чтобы можно было провести все нужные оптимизации как по части настроек, так и по части кода.
Параллельно с проведением нагрузочного тестирования шел процесс подключения антиддос-провайдера к сайту. Как он выглядел:
- Все А-записи сайта были переключены на IP антиддоса.
- Настройки почтового сервера были изменены таким образом, чтобы в заголовках исходящих писем нигде не фигурировали реальные IP проекта.
- На стороне антиддос были настроены фильтрация всех поступающих на сайт запросов и их последующее проксирование на сервера проекта.
Изначально новые сервера планировалось разделить, и один сервер сделать как основной, а другой — как резервный, на случай падения основного. Но в ходе проведения нагрузочных тестов для увеличения общей ёмкости системы было решено задействовать резервный сервер для обработки запросов на backend (в нашем случае — php-fpm). Балансировка запросов на backend между основным и резервным серверами осуществлялась с помощью nginx на основном сервере. В качестве общего хранилища сессий был настроен MySQL — »1C-Битрикс» позволяет это сделать без необходимости модификации настроек сервера.
За полторы недели до дня диктанта проект был переключен на новые сервера. Для этого на них сначала была создана полная копия старого сервера — включая все настройки ПО, файлы сайта, базы данных. Сам процесс переключения выглядел так:
- Настроили репликацию БД и синхронизацию файлов проекта со старого сервера на новый.
- В момент переключения включили проксирование всех запросов со старого сервера на новый с помощью nginx.
- Отключили репликацию БД.
На стороне антиддос-провайдера были изменены адреса целевых серверов, чтобы весь трафик поступал на новые сервера.
После переноса сайта провели итоговое нагрузочное тестирование — эмулировалась нагрузка в 500 RPS, т.к. организаторы предположили, что посетителей будет больше, чем они думали. В результате тестов обнаружилось, что из-за использования MySQL для хранения сессий нагрузка на диски оказалась достаточно велика, и в пиках это может привести к проблемам. Поэтому было решено перенастроить сессии на хранение в memcache — проведенное после этого нагрузочное тестирование показало, что при ожидаемой нагрузке на текущем железе «узких» мест объявиться не должно.
Нагрузка в день акции
Вообще, проект, в котором участвуют сразу несколько независимых сторон — это всегда сложности, всегда риски. Поэтому перед стартом, несмотря на все подготовительные работы, нагрузочные тестирования, аудиты кода и прочее, все равно оставались некоторая напряженность и мандраж.
Стартовал диктант 8 апреля 2017 года в 15:00 по Владивостоку (GMT +10). На старте нагрузка была минимальной — порядка 20 запросов в секунду на динамику. Но расслабляться, конечно же, не стоило. К самой крупной трансляции, последней, в 14:00 Мск мы выделили больше памяти под кеширование в Memcache, вынесли туда же сессии, чтобы меньше была нагрузка на диски. Трансляция прошла без каких-либо зафиксированных проблем, нагрузка была контролируемой, работало всё быстро, корректно.
Вот как выглядела картина нагрузок в тот день (время на графиках иркутское, GMT +8).
Общий итог
Все старались! Данные по мониторингам нагрузок мы передали коллегам из «Тотального диктанта» для составления плана на будущий год.
8 апреля в интернете следили за акцией 90000 зрителей, написали диктант онлайн 23000 человек. С 9 по 18 апреля сайт посетили 454798 уникальных пользователей, которые просмотрели четыре миллиона страниц — участники узнавали свои оценки и смотрели вебинары с разбором ошибок. Подготовку к диктанту 14 апреля 2018 года организаторы уже начали — подтягивайтесь тоже (повторяйте правила русского языка на онлайн-курсах), всем диктант!
P.S. 13 октября мы проводим в Москве бесплатную конференцию Uptime day об авариях в ИТ-инфраструктуре: подробности во вчерашнем посте, регистрация на сайте.