"Большой этнографический диктант": мы создали сайт, на котором прошли тест более 500 тысяч человек

Клиент

«Большой этнографический диктант» проводится с 2016 года. Это культурно-просветительское мероприятие, которое позволяет оценить уровень этнографических знаний людей, популяризировать науку о народах, привлечь внимание к проблемам сохранения национальной идентичности, традиций и культурного наследия.

Организаторы акции — Министерство национальной политики УР и Федеральное агентство по делам национальностей.

Идея проекта родилась в Удмуртии и была поддержана другими регионами. В 2017 году акция приобрела международный масштаб. Принять участие в диктанте может любой житель России и 42 стран на разных континентах — Австралии, США, Германии, Китая, ЮАР и других. Для этого достаточно владения русским языком и готовности проверить свои знания.

Диктант проходит в форме теста и включает в себя 30 вопросов о культуре, быте, обычаях, языках, верованиях и других особенностях разных народов. 20 из них — федеральные, одинаковые для всех территорий, а 10 — различаются для каждого региона. При регистрации участник получает идентификационный номер, по которому потом может посмотреть свой результат.

Существует два варианта участия в акции. Первый — пройти тест на одной из 5000 офлайн-площадок в России и за рубежом. Второй — ответить на вопросы на сайте проекта miretno.ru.

              d91d40e400bd6a2ae2e3d3a3d9d48c5e.jpg

Задачи

«Большой этнографический диктант» проводится ежегодно в течение 3–4 дней. В этот период сайт из обычного информационного ресурса превращается в высоконагруженный сервис с пиковой посещаемостью до 130 тыс. пользователей в день и 15 тысяч — единовременно. Участники акции из разных регионов и стран дружно проходят тест. Те, кто уже сдал его на одной из офлайн-площадок, ищут свои результаты и хотят получить pdf-сертификат. Из этого следует главная задача — ресурс должен выдерживать суперпиковую нагрузку.

Дополнительные требования:

  • Возможность размещения разных видов контента.
  • Настройка модуля онлайн-теста.
  • Прием и обработка данных диктанта с офлайновых площадок.
  • Создание формы авторизации для просмотра личных результатов.
  • Генерация сертификатов в pdf-формате с ФИО участников и числом набранных баллов.

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

  • До 130 тыс. пользователей в день и до 15 тыс. единовременно — пиковая посещаемость miretno.ru

a3a900b6ef0f0dedb3d3057a701a379b.jpg

Решение

В соответствии с пожеланиями клиента мы создали сайт на CMS 1С-Битрикс, разработали структуру — новости, медиагалерею, списки координаторов и площадок.  

На основе фирменного стиля проекта реализовали адаптивный веб-дизайн. Использовали этнические элементы — орнаменты и рисунки, разработанные дизайнером заказчика, также ориентировались на стилистику порталов «Тотального диктанта» и Международной акции «Тест по истории Великой Отечественной войны».

По-настоящему сложные технологические решения скрыты внутри. 

b0a59f3c22331523a2681f2c0daa1f2f.jpg

Тест на Laravel

1С-Битрикс удобна заказчику как инструмент администрирования сайта. Изначально на функционале этой CMS был создан модуль тестирования, который становится видимым для пользователей только на время акции. Однако он оказался не предназначен для высоких нагрузок. Если тысячи пользователей одновременно проходили тест, перемещались между вопросами, меняли варианты ответов, возникала длинная очередь запросов. База данных падала, а за ней становился недоступным и сайт. 

Поэтому после проведённого нагрузочного тестирования было принято решение переписать модуль теста на PHP-фреймворке Laravel и вынести в отдельный сервис. По сути, мы получили два ресурса, между которыми можно перераспределять нагрузку. Если она растет, в качестве экстренной меры настраиваем переадресацию с основного портала на платформу теста. В итоге нагрузка на базу данных снизилась, а производительность веб-приложения, наоборот, повысилась.

Внутрь модуля встроена система навигации по вопросам и счетчик времени. Каждый год организаторы акции составляют новые вопросы и присылают их нам за 3–4 дня до начала тестирования. Мы должны оперативно заменить вопросы и настроить систему начисления баллов за разные ответы. Часто за эти 3–4 дня необходимо решить дополнительные задачи по функционалу из-за появления новых типов вопросов — с медиафайлами или сопоставлением вариантов типа «соотнесите блюдо и национальную кухню». 

Парсеры для обработки данных

В 2016 году в «Большом этнографическом диктанте» участвовали 90 тыс. человек, в 2019-м — уже более 450 тысяч. Все результаты теста — и с онлайн-диктанта, и с офлайн-площадок — аккумулируются на сайте. Для их обработки и систематизации мы написали парсеры. С помощью этих скриптов информация поступает в базу данных, а затем структурируется для форм выдачи.

На сайте публикуется список площадок и координаторов с актуальными контактами. Данные вносятся в таблицы Excel и ежесуточно обновляются с помощью парсеров. Это облегчает работу контент-менеджеров, которым не нужно выкладывать информацию на сайт в ручном режиме.

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

Формирование сертификата

Каждый участник «Большого этнографического диктанта» может получить персональный сертификат с результатами теста. Для реализации этого функционала мы разработали отдельный html-шаблон для генерации файлов в pdf-формате. В сертификате автоматически проставляются ФИО, указанное при регистрации, и количество набранных баллов. Участник может скачать этот документ, а также поделиться результатами теста в соцсетях.

Общее количество участников акции офлайн и онлайн

  • 2016 год 90 тыс.чел. чел.
  • 2017 год 367 тыс. чел. 
  • 2018 год 392 тыс.чел.
  • 2019 год 454 тыс.чел.

44405548819367c7381bc1e8b9a78c86.jpg

Техподдержка

В дни проведения диктанта мы круглосуточно наблюдаем за стабильностью работы системы. Для команды это волнительный период: ощущения примерно, как от соседства с пороховой бочкой. Никогда не знаешь, как на этот раз распределится нагрузка. Обычно резкий скачок посещаемости идет после рекламных акций. Пару лет назад «Большой этнографический диктант» анонсировали на Первом канале в прайм-тайм. После эфира посещаемость сайта на порядок превысила самые смелые ожидания заказчика. Реальные параметры нагрузки оказались выше расчетных показателей, под которые мы проектировали сервер. Поэтому пришлось оперативно принимать меры по добавлению и изменению конфигурации серверных ресурсов.

Чтобы обеспечить отказоустойчивость системы, мы внедрили несколько методов:

  1. Оптимизация контента: изображения, которые показываются в тесте и на сайте, перенесены на CDN — облачное хранилище.
  2. Настройка редиректа на модуль теста. При росте посещаемости нагрузку можно распределять между двумя порталами. Часть пользователей сразу начинают проходить тест, не попадая на сайт акции.
  3. При необходимости — кеширование страницы на сервере, чтобы сократить количество одновременных http-запросов и увеличить скорость загрузки.

Кроме того, для заказчика мы арендуем сервер на облачном хостинге, где действует гибкая система ценообразования. На время акции можно выкупать максимальный объем оперативной памяти, а затем резко уменьшать виртуальное дисковое пространство. Это гораздо выгоднее, чем приобретать мощный сервер, который большую часть года будет простаивать.

 Команда проекта:

656ed26bcebfa2b5af3ec4578844e159.jpg

 Результаты

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

За 4 года проведения акции около 550 тыс. человек написали диктант онлайн. Для удобства участников мы разработали универсальный модуль тестирования и шаблон для генерации персональных сертификатов.

  • Около 550 тыс. чел. написали диктант за 4 года.
  • Это 42% от общего количества участников акции.

А клиенту мы помогли сэкономить значительные средства на содержании аппаратного обеспечения. Если бы организаторы акции приобрели физический сервер, это бы обошлось примерно в 1 млн рублей. Аренда виртуального сервера с аналогичными характеристиками стоит около 15 тыс. рублей в месяц. При этом на облачном хостинге действует посекундная тарификация, то есть по факту за время акции клиент платит меньше этой суммы.

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

Отзыв клиента

Анастасия Караваева, федеральный координатор акции «Большой этнографический диктант» по работе с регионами:  «Мы сотрудничаем с компанией «Пиком» с 2016 года. Благодаря работе IT-специалистов пользователи со всего мира могут писать диктант онлайн. Аудитория акции с каждым годом растет. За это время возникали разные ситуации. Иногда мы были не готовы к наплыву большого числа участников. Команда техподдержки всегда работала оперативно, даже в праздники и выходные. Проблемы быстро и эффективно решались, доступность сайта восстанавливалась. Компания «Пиком» внесла большой вклад в реализацию важного просветительского проекта, который помогает людям вспомнить о своих корнях и больше узнать о тех, кто живет рядом». 

Перейти на сайт

Полный текст статьи читайте на CMS Magazine