Технически грамотно: «Тотальный диктант» как ИТ-проект

Технически грамотно: «Тотальный диктант» как ИТ-проект

В 2021 году свою грамотность с помощью «Тотального диктанта» решили проверить 675 тысяч человек. 585 тысяч из них сделали это онлайн. В нашей статье рассказываем, как подготовили сайт ТД к высоким нагрузкам и обеспечили его бесперебойную работу — чтобы все желающие смогли на часочек вернуться за парту, не выходя из дома.

"Тотальный диктант" — это добровольный бесплатный диктант для всех желающих проходит в один день по всему миру. Но, как это всегда бывает, подготовительная работа начинается сильно заранее. Мы точно не знаем, когда начинается работа над текстом диктанта или поиск площадок для очного участия. Зато знаем, что целый месяц перед мероприятием мы в отделе эксплуатации ITSumma вместе с разработчиками 2UP активно готовили платформу и инфраструктуру для онлайн-участия. И теперь можем поделиться закулисьем этого процесса.

Дисклэймер: "Тотальный диктант" — проект, который во многом реализуется силами активистов и волонтеров. Здесь нет возможности использовать сотню геораспредленных серверов или потратить год команды разработки на создание сложного полностью кастомного приложения. Нужно максимально эффективно утилизировать имеющиеся ресурсы и найти недорогие решения с точки зрения разработки.

Мы в ITSumma специализируемся на технической поддержке сайтов, наша задача — заметить проблему, до того как она скажется на пользователях, и решить её. Именно это мы и делаем для проекта "Тотальный диктант" вот уже 5 лет: заранее ищем узкие места, которые потенциально помешают выдержать нагрузки, помогаем их устранить, а в день Икс дежурим и при необходимости быстро исправляем последствия нештатных ситуаций — этакий МЧС в мире админов.

Работа сообща

При этом, конечно, успех мероприятия и эффективность подготовки зависит от всех участников процесса и того, будем ли мы работать над общей целью и договариваться или будем перекидывать ответственность. Это актуальный вопрос и для проектов, которые разрабатываются внутри одной компании (привет, DevOps). Но в данном случае все еще немного сложнее: админы, программисты, хостинг — все из разных компаний, а у заказчика нет достаточных компетенций в IT-проектном менеджменте.

К счастью, координирующую функцию взяли на себя коллеги из 2UP. Это как раз их специализация — IT-консалтинг с внедрением проектного менеджера внутрь компании-заказчика и заказная разработка. Операционки в IT-проектах всегда хватает: искать подрядчиков и ставить им задачи, согласовывать решения и макеты, тестировать, размещать и т.д. Это сложная, но достаточно понятная и стандартная менеджерская работа.

Как программисты готовили сайт

"Тотальный диктант" проводился онлайн и раньше. И в принципе уже существовала информационная система, но нынче она стала нуждаться в существенном обновлении. Прошлый год показал: чтобы принять всех желающих участвовать в диктанте, нужно что-то менять — и малыми доработками тут не обойтись. IT развивается быстро, и то, что хорошо работало 5 лет назад, сейчас неактуально.

2UP, начав сотрудничество с "Тотальным диктантом", увидели слабое место в авторизации пользователей — сайт попросту не справлялся, когда много людей одновременно хотели ввести свои логин и пароль и начать писать диктант. Бюджет у проекта ограничен, а всё переделывать слишком дорого и долго… Поэтому коллеги предложили оптимальный вариант: вынести сервис авторизации за контур и переделать именно его.

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

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

Минутка технических деталей для любопытных: сам сайт тотального диктанта написан на CMS Битрикс (для быстрого старта это хороший вариант). Микросервис написания диктанта сделан на PHP + Laravel — это очень распространённая связка, часто идущая в комплекте к CMS, поэтому заказчику будет легко найти исполнителей на поддержку. Для заказной разработки лучше не использовать экзотические инструменты, которые пусть даже будут очень хороши в отдельном решении, но в случае чего окажутся мертвым грузом, который никто не готов дорабатывать.

Когда переезд на микросервис состоялся, стало можно тестировать его на нагрузку — и к подготовке подключилась ITSumma.

Как админы готовили серверы

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

  • проводим нагрузочное тестирование основного сервера ТД, который работает круглый год;
  • по результатам тестирования добавляем второй временный сервер, который поможет справиться с пиковой нагрузкой в день диктанта;
  • конфигурируем, снова тестируем, ищем слабые места в системе, итеративно вместе с программистами улучшаем и увеличиваем предел;
  • вместе с хостингом выбираем оптимальное количество разных ресурсов: оперативной памяти, сети, CPU.

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

Это отработанное решение, которое, тем не менее, нужно повторять каждый год заново, ведь из года в год меняется механизм тотального диктанта, меняется нагрузка и пр. Так что необходимо заново выполнить все шаги, а не просто выкрутить настройки "как в прошлом году".

Центральное место в подготовке с нашей стороны занимает нагрузочное тестирование: с помощью Яндекс.Танк мы имитируем поведение пользователей и смотрим, сколько посетителей может одновременно принять наш сервис и как он будет при этом работать.

Технически грамотно: «Тотальный диктант» как ИТ-проект

На картинке выше один из этапов тестирования на нагрузку в 500 rps, который показал, что 50% запросов получат ответ не дольше, чем за 2,5 секунды, а для 98% всех запросов время отклика уложится в 10 секунд. Не лучший результат, но он и нужен для того, чтобы найти слабые стороны.

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

Например, видно, что все 32 ядра CPU нагружены работой с базой данных. Выяснили, что в базе данных хранятся пользовательские сессии. Пообщались с программистами и предложили варианты, как их оттуда вынести и разгрузить сервер.

Совместными усилиями решили одну проблему — тестируем заново. Увидели другое слабое место: та же база данных, но уже другие запросы. Тогда мы проанализировали запросы, чтобы понять, можем ли мы со своей стороны оптимизировать работу запросов, либо опять нужно писать разработчикам, чтобы они по возможности переформатировали запросы в базу данных.

Когда все подобные моменты решены, все работает корректно, мы делаем вывод, что сервер может выдержать столько-то корректных запросов. Если это значение устраивает заказчика и соответствует ожидаемому числу участников диктанта, то считаем подготовительную работу сделанной. Если нет, то вместе с хостинг-провайдером добавляем больше мощности на сервер. Хостер тоже все время на связи и тоже оперативно решает то, что от него зависит.

По нагрузочному тестированию два сервера тотального диктанта были готовы выдержать до 5000 rps (request per second — запросов в секунду). Грубо говоря, 5000 человек могли в одну и ту же секунду подключиться к тотальному диктанту, а в следующую — новые 5000 человек и так далее.

План на случай нештатной ситуации

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

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

День Икс. Тотальный диктант

Итак, всё готово, все в боевой готовности, внимательно следим за показателями нагрузок.

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

В этом же году в день тотального диктанта всё прошло просто замечательно, не было вообще ни одного инцидента! Все общение технических специалистов сводились к вопросам, как там нагрузка, и ответам, что всё отлично.

Технически грамотно: «Тотальный диктант» как ИТ-проект
Главный график нагрузки
Главный график нагрузки

В пике нагрузка достигала 900 rps. 900 обращений пользователей в секунду = 54000 в минуту, то есть больше 3 млн людей могли бы без проблем подключиться к тотальному диктанту в течение одного часа. И даже гораздо больше, потому что серверы были загружены не более, чем на 20%, в течение всего времени.

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

В 2021 году диктант писали онлайн в два раза больше людей, чем в 2020. И те же самые серверы не просто выдержали двукратное увеличение посещаемости, а практически вообще не были нагружены — потенциал по посещаемости был гораздо больше. Поэтому мы будем рады, если в следующий раз ещё в два (а лучше в 10!) раз больше людей присоединятся к акции.

Ключ к успеху

Основной результат тотального диктанта с нашей точки зрения в том, что всё прошло абсолютно гладко. Во время самого посещаемого этапа, когда к диктанту подключилась центральная Россия, у сайта не было проблем с нагрузкой, всё работало стабильно и не тормозило.

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

Вывод? — Грамотный подход нужен не только в русском языке ;-)

1717
1 комментарий

Круто!
Недавно по ТВ показывали.

1
Ответить