OrbitSoft починил: как мы переписали медицинский видеопортал с нуля

OrbitSoft починил: как мы переписали медицинский видеопортал с нуля

Коротко

  • 01
    Инструмент

    Видеопортал для обучения пластических хирургов методам нитевого омоложения кожи

  • 02
    Бизнес-задачи
    • Научить клиентов эффективно пользоваться продукцией
    • Поддержать имидж экспертов в своей области
    • Построить комьюнити для повторных продаж
  • 03
    Проблема
    • Портал морально устарел, тормозит: главная страница с видео открывается 10 секунд
    • Тяжелые видео не всегда загружаются, система не выдерживает большой аудитории при онлайн-трансляциях
    • Имидж заказчика страдает, пока портал не работает
  • 04
    Результаты
    • Оптимизировали сайт: страницы открываются мгновенно, большие файлы загружаются полностью, независимо от размера и скорости интернета, портал выдерживает более 10 тысяч зрителей во время прямых трансляций
    • Настроили интеграцию с единой системой авторизации и сервисом прямых трансляций, которыми пользуется заказчик
    • Добавили посты, интеграцию с Zoom, расширенный поиск, рекламные врезки
    • Уложились в бюджет заказчика

Компания занимается пластической хирургией

Компания проводит операции в сфере эстетической и пластической хирургии в 11 клиниках в России, Грузии и Китае. Под собственным брендом выпускает нити для омолаживающих процедур: подтяжка и укрепление кожи. Продукцию компании используют хирурги и косметологи в 50 странах мира.

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

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

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

Ролики на видеопортале
Видеопортал с учебными материалами для пластических хирургов

Проблема: видеопортал тормозит, компания теряет имидж

В OrbitSoft компания пришла с проблемой: портал морально устарел, часто падал, потреблял много ресурсов, работал медленно. Например, страницы с видео загружались по 10 секунд первый раз и по 2 секунды из кеша. Пользователь открывал главную страницу и ждал, когда на ней просто появятся видео.

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

Компания решила поручить обновление портала команде разработчиков на аутсорсе.

Задача: обновить портал, убрать тормоза и ошибки

Видеопортал был написан на Ruby on Rails, но связь с изначальными разработчиками потеряли. Компания пришла к выводу, что поддерживать его на Ruby нет смысла: язык громоздкий и сейчас почти не используется.

Компания обсудила с OrbitSoft новый технологический стек и сформулировала техническое задание:

  • Переписать серверную часть портала на PHP с использованием фреймворка Symfony.
  • Реализовать интеграцию с системой авторизации Passport и стриминг-сервисом Wowza, которыми пользуется заказчик.
  • Добавить интеграцию с Zoom, расширенный поиск по всем разделам портала, текстовые посты, рекламные врезки в видео.
  • Вместе с бэкендом переделать фронтенд на Angular и мобильные приложения.

Разработка портала заняла 9 месяцев чистого времени. Проектом занималась команда из 6 человек: бэкенд, верстальщик, фулстек, 2 мобильных разработчика и проджект-менеджер.

Оптимизировали портал

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

База данных была спроектирована неоптимально. Мы переделали структуру таблиц. Это позволило нам ускорить отдачу контента, теперь видео появляются на странице мгновенно.

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

Мы разложили компоненты портала на 4 сервера и систему хранения данных (СХД) на 10 терабайт:

  • 1-й сервер: фронтенд и часть бэкенда — логика на PHP;
  • 2-й сервер: база данных MySQL;
  • 3-й сервер: стриминг-сервис Wowza;
  • 4-й сервер: модуль транскодирования;
  • СХД: загруженные видео, транскодированные трансляции, рекламные ролики, картинки к постам.
Схема хранения данных по проекту
Теперь компоненты работают независимо и не замедляют работу друг друга

Со сложностями мы столкнулись, когда понадобилось загружать на портал большие видео — по 5—7 гигабайт. Изначально мы собирались принимать файлы целиком через стандартный HTTP. Но он не рассчитан на такие объемы и не предполагает докачки в случае обрыва связи. Как мы нашли решение этой технической задачи, рассказали в другой статье.

Настроили старые интеграции

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

Система авторизации Passport — это единая форма входа во все сервисы заказчика: интернет-магазин, приложение, школу с обучающими курсами, порталы для врачей и пациентов. Она работает как авторизация через Google или Mail.ru: создав аккаунт, можно использовать данные для входа в другие онлайн-сервисы. Мы связали новый портал с Passport. Теперь ранее зарегистрированные пользователи могут на него зайти используя свои логин и пароль.Wowza Streaming Engine — это система для передачи и записи потокового видео. Заказчик использует ее для онлайн-трансляций уроков: хирург выполняет операцию, камеры его снимают, Wowza записывает видео с камер и подготавливает его к просмотру, а пользователи смотрят прямую трансляцию на видеопортале.

Схема организации прямых трансляций
Wowza помогает организовать прямые трансляции на портале

Предыдущая интеграция с Wowza была написана на Java. Этот сервис отслеживал начало и окончание трансляции, создавал обложку и транскодировал видео под разные разрешения и форматы. Но сервис работал с ошибками: например, при удалении видео часто не чистил место.

Мы переписали сервис на Golang: он быстрее, чем Java, и покрывает все задачи проекта. Однако при интеграции сервиса с Wowza всплыла проблема. У системы есть SDK, но только на Java. И есть REST API, но он не позволяет подписываться на события. Как связать сервис на Go с Wowza, сохранив весь объем задач?

В другой статье рассказали, как обошли проблему и настроили интеграцию.

Добавили интеграцию с Zoom

Заказчик решил, что кроме трансляций в Wowza ему нужно собирать коллективные встречи в Zoom. Мы настроили интеграцию — теперь администраторы портала и пользователи могут созваниваться в Zoom не открывая саму программу. Вот как это работает:

  • Администратор из своей части портала создает встречу, описывает ее, назначает дату, нажимает кнопку «Создать». Бэкенд портала создает встречу в Zoom.
  • Пользователи видят анонс, нажимают кнопку «Подписаться».
  • Когда администратор начинает встречу, бэк рассылает пользователям ссылки на нее, пользователи могут подключиться.
  • Когда встреча заканчивается, Zoom конвертирует ее в видеофайл и уведомляет об этом бэк.
  • Бэкенд забирает видео, передает его сервису транскодирования, после чего публикует на портале.
Схема создания встречи в Zoom через портал
Администраторы могут создавать коллективные встречи в Zoom прямо в административной части портала

Расширили функции портала

Посты. На старом портале основным контентом было видео. Содержание видео не индексируется поисковиками, что затрудняет SEO-продвижение. Мы добавили раздел «Публикации» со статьями, в которые можно включать поисковые запросы. В этом разделе заказчик публикует анонсы событий, новости о компании и продукции.

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

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

Благодаря категориям портал предлагает похожие видео и продукты компании, необходимые для выполнения методики, со ссылками на интернет-магазин

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

Обновили фронтенд на Angular

Библиотека Angular Material. Чтобы ускорить работу, мы использовали Angular Material от Google. Это библиотека готовых компонентов интерфейса: кнопок, элементов меню, форм регистрации, всплывающих окон. Библиотека разработана по принципам Material Design — концепции Google, объясняющей, как создавать интерфейсы мобильных и веб-приложений так, чтобы все помещалось в маленькие экраны смартфонов и было удобно управлять приложением с помощью пальцев.

С Angular Material разработка идет быстрее:

  • Дизайнер экономит время: не придумывает и не отрисовывает заново дизайн стандартных компонентов, а вставляет в макет готовые и настраивает их цветовую гамму по брендбуку заказчика.
  • Фронтенд-разработчик экономит время: не описывает функции компонентов в коде, а добавляет в проект набор компонентов Angular Material и подключает на каждой из страниц нужные.

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

Уведомления. Чтобы заинтересованные пользователи сразу узнавали о новых видео и запуске трансляций на портале, мы настроили уведомления. Когда администратор публикует видео, он может поставить флажок «Оповестить всех пользователей». Тогда те, кто разрешил нотификацию в настройках аккаунта, получают уведомление: всплывающее, системное или пуш.

Переписали мобильное приложение

Для разработки нового мобильного приложения мы выбрали фреймворк Qt. Вот почему:

  • Кросс-платформенный фреймворк. Qt подходит для разработки на iOS и Android. На нем написаны участки кода с общей логикой приложения, одинаковой для каждой операционной системы. Это позволило сэкономить бюджет на разработку: понадобилась одна команда аутсорс-разработчиков вместо двух.
  • Построен на вызовах нативных функций. Это упрощает программирование: если разработчик сталкивается с задачей, которую Qt не может решить, он просто вставляет участок нативного кода.

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

Результаты

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

Оптимизировали портал, исправили недоработки:

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

Настроили интеграцию с другими сервисами заказчика: единой системой авторизации и сервисом для прямых трансляций.

Добавили новые функции: текстовые посты, интеграцию с Zoom, расширенный поиск на сайте, рекламу в видеороликах.

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

Заказчик доволен результатами проекта и планирует поручить OrbitSoft доработку других своих сервисов. Например, системы единой авторизации.

В чем бы вы ни нуждались, мы можем помочь!

Расскажите нам, с какими проблемами вы сталкиваетесь в своем бизнесе. Мы с нетерпением ждем вашего ответа.

Получите ответ по смс

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