Разработка динамической сети доставки потокового видеоконтента (проект)
Ментор | Королев Денис |
Учебный семестр | Осень 2017 |
Учебный курс | 2-й курс |
Проект можно развивать на летней практике | |
Максимальное количество студентов, выбравших проект: 5-10 | |
Что это за проект?
Видеотрансляции в интернет стали совсем обычным делом с тех пор, как ими вплотную занялись Youtube и, позже, соцсети. До них раздача видеопотоков зрителям решалась или своими силами, или через сети доставки контента (CDN). Суть задачи в том, что, в отличие от телевидения, которое посылает один сигнал всем, а смотрят его те, кто хотят, в интернет работает только метод передачи данных от точки к точке (unicast), что для сервера трансляций оборачивается необходимостью каждому зрителю индивидуально отправить поток. Тот же самый, что другому зрителю, в то же время, но отправить персонально. В итоге нагрузка на канал связи растет пропорционально аудитории трансляции. И задерживать такой поток нельзя.
Решается это созданием сети серверов, между которыми распределяется нагрузка по трафику. Суть данного проекта заключается в создании такой сети серверов не в собственном датацентре, а на виртуальных машинах и в управлении созданием и отключением этих машин, в распределении потоков между ними.
Для эффективной работы CDN требуется диагностика и мониторинг каналов связи на серверах, ресурсов самих серверов -- это отдельная подтема в проекте.
Вторая часть проекта -- это frontend. Если при трансляции через Youtube зритель видит плеер Youtube, то при трансляции через собственный CDN зрителю надо показать какой-то свой плеер. А может быть и не только плеер. Есть множество "фич", которые становится возможным реализовать, если вести раздачу потоков через свои ресурсы: обратная связь, учет зрительской активности, взимание платы за трансляции, учет географии и других данных о пользователе, многопоточный звук для трансляции многоязычных конференций, субтитры (у нас есть распознавание голоса в текст). Можно организовать чат, голосования и даже принимать от зрителей видеопотоки, звук и файлы через WebRTC. Разумеется, здесь задачи будут выбираться исходя из состава и готовности проектной группы.
Чему вы научитесь?
Проект в первую очередь -- сетевой, в чистом виде -- облачный. Это разработка распределенной системы, динамически меняющейся в зависимости от нагрузки. Более того, практика показывает, что нельзя привязываться к одному провайдеру услуг: там тоже бывают перебои. В результате разработки CDN должна иметь REST API и хотя бы минимальную админ-панель, для зрителей должен предлагаться плеер (как минимум -- HLS) и страница для просмотра.
Какие начальные требования?
CDN -- это серверная разработка под Linux. Язык жестко не регламентирован, попытки что-то сделать уже предпринимались на Java. Веб-разработка -- основной проект написан на Ruby on Rails, желательно не вносить разнообразие языков, но это не блокирующее требование. Плеер -- если беретесь за плеер, то хорошо бы иметь хоть какой-то опыт общения с ними. Задача может оказаться сложнее, чем кажется на первый взгляд.
Какие будут использоваться технологии?
Облачные серверы запускаются с использованием API соответствующего провайдера. Некоторые провайдеры используют OpenStack, но это (на практике) не решает проблем унификации работы. Сетевой мониторинг -- само по себе важное направление в инфраструктуре ИТ. Конкретные инструменты предстоит выбрать. Плеер и фронтенд -- есть смелая идея раздавать поток через WebRTC (а это пиринговая технология, то есть, на стороне серверов будет о чем подумать), через него же собирать обратную связь. Но это отдельная часть проекта, для смелых веб-разработчиков, причем, ее можно реализовывать независимо от успехов в CDN (можем запустить в действующем проекте). Однозначно можно сказать, что Flash использовать нельзя, но при этом доставить на все платформы поток в едином виде можно лишь http-based протоколами (HLS, например), а у них есть свои недостатки -- большая задержка, от которой теряется смысл в обратной связи реального времени. Поэтому нужно предусматривать запасные протоколы: WebRTC - RTMP - HLS. Это в порядке увеличения задержки.
Темы вводных занятий
Не в порядке изложения:
1. Архитектура проекта. API, внешние связи и зависимости.
2. Специфические технологии и используемые инструменты.
3. Доступные ресурсы, организация доступа.
4. Разделение ролей
Направления развития
CDN для трансляций можно рассматривать как модуль для сервиса видеовещания, а можно и как самостоятельную платформу, работающую поверх облачных хостингов виртуальных машин. Но вывести такой продукт в самостоятельный статус, обеспечить необходимые функционал и стабильность -- это задача для настойчивых.
Критерии оценки
Про работу и оценки почитайте здесь: https://d.pr/143bq Обратите внимание, что проект составной и то, какие части пойдут в работу, мы поймём, когда сформируется состав рабочей группы. То есть, отсутствие в итоге какой-то из частей, не блокирующей работу (например, WebRTC не запустили, но HLS плеер есть -- его поставить недолго) никак не снижает оценки проделанной работы по тем частям проекта, которые выполнены. Участники проекта имеют свою область ответственности и оценки получают в соответствии с успехами в этих областях.
Постарайтесь отнестись к этому с пониманием. Очень часто бодрое начало длится 3-4 недели и потом наступает тишина. Очень хочется, чтобы проекты доводились до запуска, а вы получали опыт успешной разработки и, возможно, работу в этих проектах уже в другом статусе. Но пока это для вас учебная работа, поэтому будем придерживаться описанных по ссылке правил и критериев. Спасибо!
Как записаться?
В общем доступе есть порядка двадцати проектов, относящихся к области видеотехнологий (стриминг, доставка потоков и т.д.). Чтобы всем было проще, эти проекты объединим в четыре группы и при записи на проект выбирайте группу, а конкретный проект и вашу роль в нем мы обсудим уже в рабочем порядке.
Ориентировочное расписание занятий
Более точное расписание будет ясно после утверждения графика факультативов, пока ориентируемся на вторник, среду или пятницу во второй половине дня (после 15-16 часов).
На самом деле, для общения (как индивидуального, так и группового) удобно использовать средства видеосвязи -- это не заменяет очных встреч, но отлично дополняет их за счет возможности оперативно решать задачи "здесь и сейчас", сидя за удобным вам рабочим местом. Практически все темы проектов подразумевают работу в сети.
Денис Королев,
https://www.hse.ru/staff/dkorolev (там есть ссылки на соцсети)
+7 903 610 3290 (месенджеры по вкусу)
d.korolev@gmail.com