Трансформация проекта EdCrunch в мощный платформенный движок, написанный с нуля под высокие нагрузки и с переспективами дальнейшего масштабирования.
Предыстория или зачем нам создавать ещё один проект для той же конференции?
Платформа для конференции 2020 года создавалась в рекордно короткие сроки. Да, мы справились и провели большую онлайн-конференцию, но экстремальные сроки не позволили нам продумать архитектуру проекта и сделать решение, которое мы бы смогли масштабировать в ближайшие 5-7 лет.
В 2021 году мы начали создавать проект, который можно называть платформой с чистой совестью. На этой платформе можно запускать любое количество конференций и вебинаров ничего не изменяя в коде. Разве что делая новые лендинги. Мы ожидаем, что инвестиции в проект с лихвой окупятся в ближайшие 2-3 года.
Мы также оставили задел для многих интересных функциональных и технических решений и планируем активно развивать платформу и дальше.
Краудсорсинговая платформа
Первым этапом был разработан EdCrunch Box — отдельный сервис для сбора заявок и идей от потенциальных спикеров конференции и голосования за отдельные идеи.
За сбор идей отвечала большая и гибкая премодерируемая форма, из которой автоматически формировалась карточка идеи. Контент-менеджеру оставалось только поправить опечатки, если они были, и одобрить публикацию идеи.
Сама карточка идеи позволяла пользователям не только проголосовать за отдельные идеи, но и обсудить идею в комментариях.
По итогам голосования пользователей образовался шорт-лист, из которого экспертная комиссия выбрала окончательных спикеров конференции. Однако, механизм сервиса позволяет достаточно просто перестроить его полностью на пользовательское голосование.
Регистрация и личный кабинет
В текущей версии платформы мы пришли к более универсальному принципу: все, кто будет хоть как-то взаимодействовать с платформой конференции, становятся её пользователями.
Логика авторизации и регистрации стандартны для большинства веб-сервисов, но мы хорошо проработали все сценарии потенциальных проблем, которые могут возникнуть у пользователей при регистрации и авторизации.
В итоге за всё время работы платформы в этой части функционала не возникло ни одной ошибки, а самая частая проблема, ввод неправильного адреса электронной почты, легко решался техподдержкой пользователей.
После авторизации пользователь попадал в самую интересную часть — личный кабинет участника.
Пользователи заполняли свой профиль, чтобы во время общения на конференции было проще найти единомышленников и коллег. Профиль позволяет гибко настроить видимость той или иной информации о пользователе для всех в интернете, для всех участников конференции или только для избранных пользователей.
На главной странице личного кабинета, или дешборде, выводятся все будущие и прошедшие мероприятия, рекомендации мероприятий, видео из базы записей и прочая общая информация.
В отдельном интерфейсе собраны все билеты пользователя на все мероприятия и вебинары. Билет можно распечатать, посмотреть по нему подробную информацию, вернуть билет и т.д.
Система продажи билетов
Билет в нашей системе — это не просто «виртуальный талончик», а достаточно сложная сущность, которая определяет уровень доступа его владельца к тому или иному мероприятию. Причём, мы предусмотрели не только опции онлайн-доступа, но и контроль оффлайн-возможностей участников.
На текущем этапе оффлайн-возможности системы ограничены, но в архитектуре проекта заложены возможности для гибкой интеграции с оффлайн-системами учёта посетителей, видеоконтроля и т.д.
Для покупки билетов мы учли несклько основных сценариев, один из которых — учебное заведение оформляет несколько билетов своим сотрудникам. В этом случае плательщиком выступает один пользователь, а владельцами билетов и участниками — другие.
На втором шаге плательщик выбирал формат оплаты — картой как физлицо или оплату от юридического лица.
Оплату картой реализовали с помощью прямой интеграции с одним крупным банком и онлайн-кассой. У нас было много платежей из-за рубежа, поэтому в процессе работы пришлось оперативно реагировать и анализировать блокировки платежей банка, но за несколько дней мы отладили взаимодействие и впоследствии платежи проходили без проблем.
Конференция 2021 года предполагала максимум участников из России и Казахстана, поэтому для юрлиц этих стран мы сделали отдельные формы, максимально удобные для юридических лиц этих стран.
Ну, и в финале плательщик получал чек и информацию по покупке на почту, а участники — свои билеты и инструкции для входа.
Мы учли и многоязычность платформы — пользователи получали информацию и билеты на том языке, на котором они оформлялись.
Для поддержки отдела продаж мы разработали гибкий механизм промокодов. Такой промокод мог подстраиваться под любые условия отдела продаж — с ограничением по времени, типу билета, лимитам применений и количеству билетов в заказе.
Оформление билетов по льготам
Для учителей, работающих в бюджетных организациях, было предусмотрено бесплатное участие. Для этого нужно было заполнить анкету и отправить её на модерацию:
Все анкеты собираются в список на модерацию. Для одобренных анкет автоматически создаются билеты и аккаунты пользователей, если мы их не нашли по адресу электронной почты.
Количество билетов по квоте было ограничено, настройки билетов при их создании позволяли не только определить его тип, но и ограничить максимальное количество оформленных билетов, позволяли управлять их видимостью и активностью.
Это помогло в автоматическом режиме контролировать объём оформленных по квоте билетов и исключить человеческий фактор.
Проведение конференций
На этот раз была реализована гибкая система, которая позволяет заводить любое количество конференций без необходимости вносить какие-либо изменения в коде.
В рамках конкретной конференции создаются каналы, мероприятия и их расписание.
Канал — это страница, на которой происходит трансляция видеопотока, обновляются описания мероприятий, а пользователи общаются между собой и задают вопросы спикерам.
Как и в прошлом году, пользователи добавляли отдельные интересные мероприятия в свою личную программу.
Для пользовательского чата сделали постмодерацию, а вопросы спикерам — аналогичный чат, но с премодерацией. Вопросы спикерам автоматически привязывались к кокретному мероприятию, чтобы спикеры могли ответить на них и после окончания конференции.
Для реализации чатов и прочих “онлайн” активностей в режиме реального времени использовали swoole и redis в качестве хранилища. В целом swoole показал себя очень неплохо и после небольшого тюнинга в ночь на второй день конференции абсолютно перестал есть память и процессор.
Интерфейсы каналов сделали полностью адаптивными, так что и смотреть конференцию и общаться в чатах было удобно не только на большом экране, но и на смартфонах, чем пользовалось почти 30% аудитории.
Нетворкинг и геймификация
Традиционно, любая конференция — это повод пообщаться с коллегами. И на удобстве общения был сделан особый акцент.
Кроме чатов, пользователи могут находить себе единомышленников на платформе EdCrunch и общаться с ними в личных сообщениях. Гибкий фильтр позволяет найти наиболее интересных для общения коллег.
Тет-а-тет чат для личного общения также используется и для доставки уведомлений пользователям. В левой части мы собрали все чаты, а в правой — лента сообщений.
Медиатека
Платформа должна жить не только во время проведения конференций, но и в другие дни. Мы реализовали каталог видео с конференций и механизм подписки на эти видео.
Собственно, подписка также работает через покупку билета. Причём, для владельцев билетов на конференцию она активируется автоматически, но можно купить и только подписку на медиатеку.
Гибкие права доступа позволяют сделать доступ к видео или полностью бесплатным или по подписке.
На странице с видео можно не только посмотреть его или прочитать его описание, но и пообщаться с другими пользователями в комментариях. Это сделали чтобы пользователи продолжали общаться друг с другом и после окончания конференции.
А что с нагрузкой?
Кто помнит предыдущую версию эдкранча, там мы изрядно поседели, когда в первый день конференции сервер с 40 ядрами не справился с нагрузкой и решил прилечь на пол часа. Вот эта прекрасная картинка по нагрузке, которую мы теперь показываем всем, кто хочет “hiload” на битриксе:
На самописе же в этом году все оказалось намного лучше. При сравнимой аудитории и сложности логики мы увидели максимум 6% нагрузку на процессор и то в обеденное время, когда все перешли с разных каналов на один и начали активно что-то обсжудать в чате.
Конечно мы перестраховались и взяли 56 ядер и 128 гигов оперативки. Вот последняя нам очеь сильно помогла, тк swoole под нагрузкой изрядно “потек” и сьел почти всю свободную память. Но в ночь на второй день конференции мы нашли в чем была проблема в swoole и второй день конференции прошел гладко, забрав всего 10% выделенной на сервере памяти.
В целом, решение которое мы написали для конференции вполне выдержит 10ти кратный рост нагрузки, но тут мы уже упремся в канал сервера, а не в производительность железа.