Новости и публикации
1 октября 2017
Новости
«Тотальный диктант»: объединить 23 тысячи человек в виртуальной аудитории
«Тотальный диктант» – образовательный проект, который помогает проверить ваши знания по русскому языку. За 14 лет это событие превратилось из студенческой акции регионального университета в мероприятие всероссийского масштаба.
Каждый год тысячи людей со всего мира добровольно «садятся за парты» в один и тот же день и в одно и то же время. С поправкой на часовые пояса. Впервые «Тотальный диктант» как масштабную акцию провели в 2011 году. В ней принимало участие около 5 тысяч человек. В 2017 году «Тотальный диктант» написало уже порядка 200 тысяч человек. На суше и в воздухе: на 10 рейсах авиакомпании S7, на Иркутской ГЭС, на трех антарктических станциях и даже в горах Крыма.

Изначально диктант проходил только оффлайн. Сотни площадок по всей России и в других странах принимали людей, которые хотели проверить свою грамотность. Они одновременно писали один и тот же диктант – достаточно сложный и одинаковый для всех участников. Для тех, кто не мог прийти в точки проведения «Тотального диктанта», организовывали онлайн-трансляцию.

Как вовлечь в акцию людей из всех уголков мира? Сделать онлайн-версию «Тотального диктанта».

Впервые в онлайн-формате диктант прошел в 2014 году. Его написало около 6,5 тысяч участников. Уже в 2015 году «Тотальный диктант» писали в онлайне 15 тысяч человек – порядка 15% от всех участников. Мы предположили, что доля онлайн-аудитории продолжит стремительно расти. Значит сайт должен выдерживать экстремальные нагрузки.

Во время «Тотального диктанта» тысячи пользователей одновременно заходят на сайт акции и выполняют там множество однотипных действий. С подобными пиковыми нагрузками сталкиваются интернет-магазины во время массовых распродаж вроде «Чёрной пятницы». Или сайты по продаже электронных билетов перед выходными и крупными праздниками.

Другая опасность – хакерские атаки. 

Что нужно для нормальной работы сайта в течение всей акции?

К нам на помощь пришла целая команда IT-партнеров:

  • Наша CMS «1С-Битрикс» была в ответе за функциональность и интерфейс;
  • «Битриксоид», золотой партнер «1С-Битрикс», оказывал техническую поддержку;
  • Облачный хостинг на платформе MakeCloud мы получили от компании «Сервионика» (ГК «Ай-Теко»);
  • Научно-технический центр «Атлас» помог нам с защитой от ботов и DDoS-атак;
  • ITSumma обеспечила подготовку IT-инфраструктуры и серверов;
  • Сервис Stepik предоставил свою образовательную платформу для онлайн-диктанта.
Облачный хостинг 

В обычные дни хостинг сайта прекрасно справлялся с ежедневными нагрузками. Поэтому мы решили, что инвестировать в усиление «железной» инфраструктуры и серверов ради нескольких пиковых дней в году — слишком расточительно. 

Именно в этой ситуации нам подошел облачный хостинг. Виртуальную инфраструктуру можно быстро адаптировать к изменяющимся нагрузкам.

Cherevkov4.png«Использование облачной платформы MakeCloud позволило обеспечить доступ к ресурсам диктанта из любой точки мира. Мы гордимся своим вкладом в эту акцию», — подчеркнул директор центра компетенций, руководитель направления IaaS компании «Сервионика» Алексей Черевков.

Нагрузочное тестирование

В ходе самого диктанта «Сервионика» и другой наш партнер, ITSumma, осуществляли мониторинг нагрузки на «облака». Чтобы при необходимости оперативно увеличить резерв их вычислительной мощности. 

Изначально проект был размещен на простом виртуальном сервере с такими характеристиками: 2 ядра CPU, 4 Гб оперативной памяти, HDD.

 В прошлом году во время диктанта на сервера обрушилась ДДОС-атака, из-за которой какие-то время сайт был недоступен. В этом году было решено заранее подготовиться к подобным проблемам.

Изначально от команды проекта Тотального диктанта было предположение, что во время проведения диктанта на сервер будет поступать 120 RPS, и каждую минуту на сайт будет заходить 1000 посетителей. Чтобы выяснить, сколько RPS сервер сможет выдержать сейчас, и какая конфигурация серверов потребуется для пиковой нагрузки, было проведено нагрузочное тестирование сервера Яндекс.Танком. Итоговая конфигурация основного и резервного серверов выглядела так: 48 ядер CPU, 128 Гб оперативной памяти, 250 Гб SSD.

Сначала, на период подготовки проекта к пиковой нагрузке, был сделан апгрейд виртуального сервера с сайтом — чтобы можно было провести все нужные оптимизации как по части настроек, так и по части кода.

Параллельно с проведением нагрузочного тестирования шел процесс подключения антиддос-провайдера к сайту. Как он выглядел:

1)    Все А-записи сайта были переключены на IP антиддоса.

2)    Настройки почтового сервера были изменены таким образом, чтобы в заголовках исходящих писем нигде не фигурировали реальные IP проекта.

3)    На стороне антиддос были настроены фильтрация всех поступающих на сайт запросов и их последующее проксирование на сервера проекта.

Изначально новые сервера планировалось разделить, и один сервер сделать как основной, а другой — как резервный, на случай падения основного. Но в ходе проведения нагрузочных тестов для увеличения общей ёмкости системы было решено задействовать резервный сервер для обработки запросов на backend (в нашем случае — php-fpm). Балансировка запросов на backend между основным и резервным серверами осуществлялась с помощью nginx на основном сервере. В качестве общего хранилища сессий был настроен MySQL — 1C-Битрикс позволяет это сделать без необходимости модификации настроек сервера.

За полторы недели до дня проведения диктанта проект был переключен на новые сервера. Для этого на них сначала была создана полная копия старого сервера — включая все настройки ПО, файлы сайта, базы данных. Сам процесс переключения выглядел так:

1)    Была настроена репликация БД и синхронизация файлов проекта со старого сервера на новый.

2)    В момент переключения было включено проксирование всех запросов со старого сервера на новый с помощью nginx.

3)    Репликация БД была отключена.

4)    На стороне антиддос-провайдера были изменены адреса целевых серверов, чтобы весь трафик поступал на новые сервера.

После переноса сайта было проведено итоговое нагрузочное тестирование — эмулировалась нагрузка в 500 RPS, т.к. организаторы предположили, что посетителей будет больше, чем они думали изначально. В результате тестов обнаружилось, что из-за использования MySQL для хранения сессий нагрузка на диски оказалась достаточно велика, и в пиках это может привести к проблемам. Поэтому было решено перенастроить сессии на хранение в memcache — проведенное после этого нагрузочное тестирование показало, что при ожидаемой нагрузке на текущем железе «узких» мест объявиться не должно.

evgenijpotapov.jpgЕвгений Потапов, генеральный директор ITSumma:

«Изначально новые серверы мы планировали разделить. Один сервер сделать основным, а другой – резервным. Но в итоге для увеличения общей емкости системы мы решили задействовать резервный сервер для обработки запросов на back-end. После оптимизации нагрузочное тестирование показало — по нашему прогнозу, на текущем железе «узких» мест быть не должно».

Во время «Тотального диктанта» не наблюдалось ни нехватки ресурсов, ни других проблем, онлайн-диктант прошел без сбоев.


Хакерские атаки

Еще одной важной задачей стало противодействие хакерским атакам.

Популярность проекта «Тотальный диктант» ежегодно растет, но как оказалось не только среди доброжелателей. Так в 2016-м году официальный портал проекта, на котором пишет диктант бОльшая часть аудитории, подвергся массовой DDoS-атаке, что привело к определенным техническим накладкам.

В 2017-м году партнером «Тотального диктанта» по защите от DDoS-атак и ботов, выступил ФГУП «НТЦ «Атлас» с сервисом «Заслон», работающим на основе технологии ActiveBotProtection от компании Variti (https://variti.com). Организаторы  проекта не прогадали – во время проведения мероприятия портал totaldict.ru был многократно атакован. Временами частота и количество запросов, организованных злоумышленниками, превышали трафик реальных пользователей более чем в 8 раз.

totaldict.jpg

ro.png

Ольга Ребковец, руководитель проекта «Тотальный диктант»:

«Почтовый сервер акции и файловый сервер для загрузки больших объемов материалов были вынесены на отдельный ресурс, а его IP-адрес скрыт. Настройки почтового сервера мы изменили таким образом, чтобы в заголовках исходящих писем нигде не фигурировали реальные IP проекта. Также мы настроили фильтр всех поступающих на сайт запросов и их последующее «проксирование» на сервера проекта».


Данила Чежин.png

Данил Чежин, представитель группы технической поддержки Variti, технологического партнера ФГУП НТЦ «Атлас»:

«Первые попытки атаковать ресурс мы зафиксировали еще 7 апреля – это была, можно сказать, своего рода,«артподготовка». Основной рост активности злоумышленников начался 8 апреля с 4-х утра по московскому времени, а в период с 7 до 11 утра мы фиксировали ряд комбинированных и многовекторных атак, которые были успешно отражены. После этого попытки атаковать ресурс уже были менее организованным и пошли на спад. Всего за время «Тотального диктанта» мы зафиксировали четыре всплеска активности, как будто после каждой неудачной попытки «противник» производил перегруппировку. Несмотря на то, что мощность атак в сравнении с мировыми рекордами была невелика, нужно понимать, что они достаточно сложны для распознавания средствами защиты, работающими на уровне каналов связи. Злоумышленники, как и в боевых действиях, зачастую применяют отвлекающие маневры. Они «маскируют» основной вектор атаки на уровне приложения проведением атак на уровне сетевой инфраструктуры. Применяя стандартные методы будет тяжело распознать и противостоять низкочастотной атаке, которая идет параллельно пусть и с простой, но мощной высокочатотной атакой на канальном уровне. Именно такие методы сейчас набирают популярность, и, в основном именно они представляют серьезную угрозу для интернет-проектов, которым важно сохранить аудиторию даже во время атаки. Сервис «Заслон»на основе технологии ActiveBotProtection от Variti позволяет это реализовать в полной мере, поскольку детектирование и фильтрация источников атаки производится не по ip-адресам, заблокировав которые можно потерять и реальных пользователей, а по конкретным нелегитимным сессиям.»

Что касается общей статистики по реальным пользователям, то более 96% - это трафик из России. На Украину приходится около 2,6%, на США менее 1%. В основном, это запросы русскоязычных пользователей из данных стран, которые приняли участие в проекте в этом году. О «геополитическом заговоре» против Тотального диктанта говорить не приходится, скорее всегоорганизаторами атак была некая «хакерская организация», которая пыталась использовать акцию в качестве пиара и «демонстрации своих возможностей». 

Проверка онлайн-диктанта

Непосредственная проверка текстов, написанных пользователями во время онлайн-этапа Тотального диктанта, проводилась платформой Stepik (образовательной платформой и конструктором онлайн-курсов и уроков). 

На Stepik был создан урок, в котором участнику нужно было написать текст диктанта, после его проверки выводился результат с указанием количества ошибок и места в тексте, где была сделана ошибка. Для того чтобы пользователям было удобно и им не нужно было уходить с сайта https://totaldict.ru, урок с диктантом со Stepik был встроен в страницу сайта Тотального Диктанта с помощью iframe. 

Например, вот такое окно от Stepik видели участники акции на третьем этапе:

stepik.jpg

Для автоматической проверки онлайн-диктанта использовался размеченный филологами образец — правильное написание диктанта, в котором были указаны орфограммы и пунктограммы с вариантами написания.

Например, предложение “Актерами управляет лучший на свете режиссер – ветер” выглядело вот так после разметки филологами

[А/1]ктер[а/2]м[и/3] упр[а/4]вля[е/5][т/6] лу[чш/7][и/8]й н[а/9] свет[е/10] р[е/11]ж[и/12][сс/13]ер{ –/,/–/1}{ / //1}вет[е/14]р. 

А затем дополнялось уточнениями по каждой указанной орфограмме и пунктограмме. 

Чтобы сопоставить размеченный образец и введенный пользователем ответ, применялся алгоритм для выравнивания последовательностей (sequence alignment https://ru.wikipedia.org/wiki/Выравнивание_последовательностей), который часто используется в исследованиях по биоинформатике. Этот алгоритм был нужен из-за того, что при написании онлайн-диктанта пользователь мог пропустить некоторые слова, например, из-за плохой связи, помех в видеотрансляции или нераслышанного предложения. После сопоставления ответа и образца считалось количество орфографических и пунктуационных ошибок, и согласно стандартам "Тотального диктанта" выставлялась итоговая оценка. 

Для обеспечения возможности не только проверить текст, но и сохранить результат каждого участника в его личном кабинете, между https://totaldict.ru и https://stepik.org была настроена интеграция через протокол LTI (https://www.imsglobal.org/activity/learning-tools-interoperability). Для участника автоматически создавался аккаунт на Stepik, и написанный диктант и результаты проверки сохранялись на платформе.

Максимальная нагрузка на сайт Stepik ожидалась в моменты начала трансляций, когда большая часть пользователей должна была загрузить страницу с диктантом. Перед Тотальным диктантом командой Stepik было проведено нагрузочное тестирование API, фронтенда и SockJS платформы, моделируя сценарий открытия страницы диктанта новыми пользователями, а также осуществлена оптимизация инфраструктуры и развернуты новые сервера. Для защиты от DDoS-атак траффик был пропущен через Incapsula (https://www.incapsula.com/).

Во время самого диктанта использовались 2 сервера Standard F16s (16 cores, 32 GB memory) x 16 uwsgi воркеров на первом этапе и 3 сервера на втором и третьем этапах (нагрузка увеличилась). Нагрузка на первом этапе при старте трансляции составила 250–300 запросов в секунду (request per second), на втором этапе — 700, на третьем доходила до 800 rps.

Из-за увеличения нагрузки на втором этапе, а также из-за того, что при задержке с загрузкой страницы пользователи начали массово перезагружать её в надежде на улучшение, возросло время ответа сервера и пользователи временно перестали видеть страницу Stepik в окне iframe. Чтобы справиться с этой ситуацией, команда Stepik на время проведения диктанта частично отключила логирование и отсылку некоторых служебных метрик. В то же самое время команда Битриксоида на странице Тотального диктанта добавила специальную текстовую форму перед iframe, куда люди могли писать диктант. Все полученные в этом окне тексты также были переданы в Stepik и проверены. 

Всего за время онлайн-этапа через Stepik было проверено 40935 текстов. 

Во время акции была проблема в интеграции со сторонним сервисом проверки диктанта. Партнеры из «Битриксоида» решили ее оперативно — внедрили возможность сохранить текст диктанта на сервере, где его будут дальше обрабатывать.

битриксоид.png

Николай Цаценко, директор компании «Битриксоид»:

«Для увеличения производительности мы оптимизировали код сайта, внедрили и настроили кеширование компонентов».


В апреле 2017 года почти 23 тысячи человек написали «Тотальный диктант» онлайн. Помимо рекордного количества онлайн-участников, около 90 тысяч человек смотрели видеотрансляции с сайта.


«Мы столкнулись с большим количеством хакерских атак и беспрецедентной нагрузкой. Но благодаря мощной CMS, сильной IT-команде и помощи партнеров в режиме 24/7, сайт “Тотального диктанта” устоял, и акция состоялась», — резюмирует руководитель проекта «Тотальный диктант» Ольга Ребковец.