Разработали облачный бэкенд стримингового сервиса
Команда Evrone приняла участие в разработке решения для видеосервиса Viasat: мы отвечали за масштабирование видеоплатфомы и развертывание в облачной инфраструктуре.
Группа компаний Viasat занимает лидирующее место среди коммерческих (негосударственных) холдингов платного ТВ по доле аудитории (Источник: Mediascope, TV Index+, Россия 100K+, Total day; Total Ind., Декабрь - Январь 2021, Share%). Мажоритарным владельцем совместного предприятия, осуществляющего распространение и развитие вещания телеканалов Viasat в России, является Национальная Медиа Группа, которой принадлежит 80% совместного предприятия, 20% – принадлежат фонду Baring Vostok.
В России и странах СНГ Viasat владеет 13 популярными каналами платного телевидения, в числе которых — TV1000, TV1000 Русское Кино, TV1000 Action, пакет телеканалов ViP (ViP Premiere, ViP Serial, ViP Megahit, ViP Comedy и другие), а также стриминговым сервисом viju.
Стриминговый сервис viju (запущен в 2022 году) предоставляет пользователям доступ к большому количеству фильмов и сериалов зарубежного и отечественного производства, а также всем телеканалам группы компаний Viasat. Немалое количество эксклюзивных кинопремьер вызывает широкий интерес у зрителей, но это в свою очередь увеличивает нагрузку на видеосервис. В связи с этим появилась необходимость разработать облачный бэкенд этой стриминговой платформы, чтобы она могла работать стабильно даже в условиях высокого спроса.
Задача: сервис с изюминкой
У Viasat было несколько основных требований к бэкенду сервиса:
- готовность к большим нагрузкам;
- стабильная работа со стримингами-партнёрами;
- понятная админка для редакторов сайта.
Особенностью проекта станут киномы — короткие фрагменты фильмов и сериалов. Они помогут зрителю быстрее составить более полное представление о фильме и его настроении, чем трейлер или описание. Из киномов редакторы сайта составляют подборки на разные темы.
Evrone присоединился к команде разработки на старте проекта. Мы ориентировались на проверенные системы управления видео-контентом, облачные решения для видеосервисов, и постарались максимально автоматизировать текущее администрирование, чтобы минимизировать человеческий фактор при поддержке проекта. Также нам предстояло решить вопрос создания киномов.
Облачное решение для видеостриминга
viju — это cloud-native приложение на Kubernetes. Для управления кластером мы применяем GitOps, то есть декларируем его желательное состояние через Git-репозиторий. Это позволяет автоматизировать и упростить его эксплуатацию. Для управления окружением выбрали платформу Yandex.Cloud с готовым сервисом для кластеров Kubernetes. Их продукт оказался самым удобным, поскольку он «из коробки» предоставляет API c Terraform. Это позволяет не тратить усилия на написание отдельного кода для управления инфраструктурой, а сразу применить подход Infrastructure as Code.
Чтобы облегчить дальнейшую работу, мы перевели дистрибуцию проекта в образы Docker. Это позволило быстро разворачивать и масштабировать его в любой среде и на любом устройстве.
Нарезка киномов
Чтобы киномы работали правильно, нам пришлось совместно с командой разработки Viasat Tech придумать ряд решений:
- настроили кеширование на стороне СDN, чтобы ускорить загрузку страниц со встроенным видео;
- расширили функционал админки;
- вынесли в бэкенд управление вотермарками и транскодирование;
Планируется, что вскоре сервис перейдёт на CDN API. Это позволит не нарезать множество видео из исходника и хранить их все, а получать по временному диапазону через API только нужный кусочек видео из исходного файла в виде чанклиста.
Порядок в базе и чистый код
Это крупный и долгоиграющий проект, нам необходимо думать о том, как IT-инфраструктура для стримингового сервиса будет работать и поддерживаться в будущем. Поэтому мы регулярно чистим бэклог и проводим рефакторинг кода. Порядок мы поддерживаем с помощью стека dry-rb. И, конечно, много тестируем. Сейчас тестами покрыто более 60% кода.
База максимально структурирована. В ней сделали единую модель, которая разделена по типу данных. Мы точно знаем, где лежит нужный фильм и весь дополнительный контент к нему: трейлеры, постеры, фото и т.п. Весь контент, созданный пользователями, тоже сортируется автоматически.
Партнёрское API для стримингового сервиса
Viasat владеет правами на громкие и кассовые проекты, например, сериалы «Карточный домик», «Рассказ служанки» и «Чаки», но, помимо реализации на собственной платформе, их дают в аренду сервисам-партнёрам.
Чтобы повысить безопасность и увеличить контроль доступа к контенту, мы реализовали отдельное API. Теперь партнёры могут не только получать контент, но и создавать пользователей с доступом к viju через свои платформы. Также через API мы получаем зашифрованные данные о пользователях сервисов-партнёров, так viju узнает пользователя, который смотрел его контент на партнёрском сервисе, и сможет предлагать кино и телепрограммы более таргетированно.
Авторизация пользователей
Авторизация и регистрация разделены на отдельные запросы. Авторизация через соцсети на web-версии работает на стороне сервера, так фронтенд обрабатывает меньше логики.
Кроме того, мы настроили аутентификацию и авторизацию пользователей веб-приложения с помощью JSON Web Token. Он помогает сервису узнавать пользователя, когда время действия основного access token заканчивается. При этом, время жизни refresh token значительно дольше, поэтому авторизовываться пользователю приходится реже. Парные токены также повышают безопасность проекта.
Платёжные системы
Мы немного поработали над отладкой платёжных сервисов. Например, сделали возможность оплачивать подписку с нескольких карт. Ещё провели рефакторинг подписок с IOS и Android. Мы распределили данные с AppStore и PlayMarket и упорядочили обновление подписок в каждом случае.
Вывод
После нашей работы сервис стал более удобным и инновационным, и без помех может конкурировать с другими игроками рынка.
Ищете команду, которая будет разработать и поддерживать стриминговый сервис? Нужны разработчики, которые сумеют настроить работу под ваши задачи? Напишите нам через форму внизу, и мы поможем сделать ваш проект лучше.