О чём эта история

Университет ИТМО специализируется в области информационных технологий, фотоники, робототехники и других технических и научных дисциплин. Чтобы повысить конкурентоспособность на рынке образовательных услуг, университет решил внедрить систему выбора персональных образовательных треков. Для этого студенты‑энтузиасты разработали сервис выборности, используя сервисы Yandex Cloud.

Сервис выборности изначально развернули на инфраструктуре университета, но затем команда проекта перенесла его в Yandex Cloud и доработала с использованием облачных сервисов и Yandex Cloud Functions. Команда сократила затраты на оборудование и его обслуживание, а также повысила отказоустойчивость и масштабируемость. Сейчас сервис использует 9000 студентов, выбирая дисциплины за 1,5 минуты. Система выдерживает 6000 запросов в секунду, а предварительная подготовка данных занимает всего около часа. При этом, по расчётам ИТМО, год использования облака в 11 раз дешевле, чем использование собственной физической инфраструктуры.

Задача компании

Университет ИТМО — это вуз в Санкт‑Петербурге, который обучает по направлениям: информационные технологии, фотоника, робототехника и другим техническим и научным дисциплинам. Заведение входит в топ‑100 лучших IT‑вузов планеты, а в его стенах обучается около 9000 студентов из 88 стран мира.

Сегодня классическое университетское образование конкурирует с онлайн‑курсами, которые обучают профессиям. Чтобы ответить на этот вызов, в ИТМО решили усовершенствовать образовательный процесс и ввести персонализацию учебного плана. Так, у студентов 2023/2024 учебного года для изучения в первом семестре на выбор было 70 дисциплин.

Сервис выборности, который создаёт расписание исходя из предпочтений обучающегося, создали студенты‑энтузиасты на инфраструктуре университета в 2020 году. Проект развивался и усложнялся, требовалось повысить его отказоустойчивость и масштабируемость. Аренда вычислительных мощностей в ЦОД потребовала бы больших затрат времени и усилий на администрирование серверов. Расширение собственной инфраструктуры было ограничено физическими размерами помещения, выделенного под серверную. Облачная инфраструктура могла стать подходящим решением, потому что она предоставляет гибкость в масштабировании ресурсов, а провайдер берёт на себя задачи по закупке оборудования и обслуживанию инфраструктуры.

Команда разработчиков ещё во время обучения в вузе создала мобильное приложение на базе сервисов Yandex Cloud. Для себя команда отметила высокий технический уровень поддержки облачной платформы и широкую линейку удобных инструментов. Поэтому при разработке сервиса выборности решили также использовать сервисы Yandex Cloud для фронтенда и бэкенда. Первая итерация показала удовлетворительный результат, но требовала доработки. При разработке сервиса необходимо было учесть следующие критерии:

  • гибкая инфраструктура, которую можно быстро масштабировать под нагрузку или при изменениях в бизнес‑процессах;

  • способность выдерживать до 6000 запросов в секунду и быстро обрабатывать данные;

  • отсутствие влияния на работу других сервисов вуза;

  • ограниченность ресурсов университета.

Команда приняла решение о полной миграции сервиса в облако и осуществила перенос для окончательной доработки системы выборности в Yandex Cloud.

Решение

Систему выборности разрабатывали с 2020 года командой из 8 человек. Основной стек сервиса — Go и Vue.js. В проекте участвовали несколько специалистов от университета для проверки учебных планов и составления расписания.

Первая версия архитектуры сервиса выборности 2020 года

Первая версия могла выдержать 95% нагрузки. Но так как сервис строили на инфраструктуре университета, то его работа влияла на функционирование других критических систем, что было недопустимо. Также физическая инфраструктура накладывала ограничение на количество пользователей, которые одновременно могут использовать сервис: 100 из 4000 человек. Поэтому продолжили разработку продукта уже в облаке.

В новой версии сервиса код для определения текущего семестра и учебного года попробовали развернуть в Cloud Functions. Оказалось, что такие функции удобно использовать для разовой обработки большого объёма данных. Они полностью решают отдельную бизнес‑задачу, что хорошо вписывается в концепцию микросервисной архитектуры, на которую решила перейти команда проекта. Cloud Functions удобно использовать для задач, которые выполняются по мере необходимости. При этом для масштабирования не нужно поднимать и обслуживать виртуальные машины — вместо этого автоматически создаются дополнительные экземпляры функции, которые выполняются параллельно. Это решение оказалось удобным для команды, так как не требует постоянного обслуживания сервиса, а нагрузка на него — разовая.

В процессе работы над проектом уточнялись бизнес‑требования, а архитектура менялась 6 раз, обрастая обвязками и микросервисами. В Yandex Cloud перенесли и систему авторизации ITMO.ID. В последнюю итерацию в 2023 году сервис переписывали с нуля, и это заняло один месяц.

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

Чтобы создать индивидуальное расписание для студента, нужно подготовить учебный план дисциплин, которые требуется освоить по выбранной специальности. Для ввода учебного плана предусмотрен отдельный микросервис. Другой микросервис определяет расписание: на основе учебного плана он рассчитывает, в каком семестре необходимо расписание для определённых дисциплин. В итоге данные проходят через каскад микросервисов и формируется набор дисциплин по заданным правилам. Далее код, размещённый в Cloud Functions, определяет, какой набор дисциплин может быть выбран в текущем семестре. Затем ещё одна функция проверяет пересечения в наборе, определяя доступность выбора.

Компоненты системы развернули в Managed Service for Kubernetes®. Использовать управляемый сервис оказалось удобно: команда постоянно вносит изменения и добавляет новые микросервисы, что можно сделать в Managed Kubernetes нажатием одной кнопки. Для обмена данными использовали Yandex Message Queue: сервис забирает подготовленные данные в виде структуры учебных планов и отправляет для пересчёта в Cloud Functions. Межсервисное взаимодействие с передачей результатов выбора в инфраструктуру университета производит Managed Service for Apache Kafka®. Aplication Load Balancer использовали для распределения входящего трафика и обеспечения равномерной нагрузки. Для хранения и доставки часто запрашиваемых статических файлов для системы авторизации подключили Yandex Cloud CDN. Подготовленные варианты хранятся в базе данных Managed Service for PostgreSQL. Причём выборность одного семестра может достигать 80 ГБ.

Финальная, шестая версия архитектуры сервиса выборности 2023 года

Из‑за большого количества дисциплин и вариативности система предлагает триллионы вариантов, что сказывается на скорости обработки и объёме хранения. Команда разработчиков намерена решить эту задачу в ближайшее время. А в текущий момент ограничили варианты для выбора. Благодаря сервисам Yandex Cloud и, в частности, бессерверным вычислениям, мы смогли в сжатые сроки, без привлечения инженеров, поддерживающих инфраструктуру, перенести в облако и развивать несколько наших критичных сервисов. Поскольку характер нагрузки на сервисы сезонный, поддерживать запас ресурсов нерационально. Бессерверные технологии Yandex Cloud позволяют не платить за простаивающие ресурсы — с эластичностью нагрузки сервисы успешно справляются без дополнительных затрат.

Семен Шабанин,
Директор центра проектирования корпоративных сервисов ИТМО

Результаты

В сентябре первые курсы университета использовали сервис выборности. Система выдерживает до 6000 запросов в секунду, и 9000 студентов выбирают дисциплины за 1,5 минуты.

По сравнению с собственной инфраструктурой, использовать облако эффективнее в 11 раз на дистанции в год и в 2 раза на дистанции в 5 лет.

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

Также в планах у разработчиков попробовать другие сервисы Yandex Cloud, например YDB.

Мнение

Андрей Суворов,
Директор центра разработки корпоративных сервисов ИТМО
Андрей Суворов,
Директор центра разработки корпоративных сервисов ИТМО

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