Как нам удалось построить видеохостинг за 1¢/ГБ

Почему видеохостинг такой дорогой


Из всех видов статических файлов, используемых на веб-сайтах, с видеороликами связаны наиболее жёсткие требования к хостингу:

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


Аренда серверов для видеохостинга в США значительно дешевле (за исходящий гигабайт), чем во многих других странах. Однако доставка видео с американских серверов на другие континенты редко бывает достаточно быстрой, чтобы фильм можно было смотреть без перерывов на буферизацию, и чтобы время ожидания перед началом воспроизведения было приемлемым. Поэтому хозяевам сайтов с видеороликами, выходящих на международную аудиторию, приходится арендовать местные сервера в разных частях света поближе к своим пользователям. Показ ролика пользователю из России, например, обходится типичному видеосайту в несколько раз дороже, чем показ того же ролика американцу. Приходится или дороже платить, или снижать качество видео для зарубежных зрителей. Вот и выходи после этого на международный рынок.

Чтобы решить эту проблему, нам пришлось сделать софт умнее.

da336f2f6155404bae46e8209963ce40.png
Что представляет собой типичный сервер статических файлов? Открыть запрашиваемый файл на нужном месте и слать его в канал. Типичный видеоплеер, работающий в браузере? Запросить файл с нужного места, ждать некоторого минимального наполнения буфера, показывать видео, при этом продолжая его загружать. Если буфер опустеет, ждать наполнения.

Пять серверов вместо одного


Технология Hola CDN вносит улучшения и в клиентский, и в серверный софт. Плеер, работающий в браузере, загружает видео не с одного, а с пяти различных серверов. Один из них — это тот самый надёжный, близкий к пользователю, но дорогой сервер, о котором я писал выше. Он принадлежит к CDN, которой наш заказчик пользовался до нас. Остальные четыре выбираются из пула серверов, которые Hola арендует у различных провайдеров виртуальных серверов там, где это дешевле, — в США, Франции, Нидерландах.

2ba4118efee194c558a9377c2fec03cc.gif563396faeea963fd832c955b51e26f22.gif

Пользователю важно, чтобы воспроизведение видео началось как можно раньше. Поэтому первый фрагмент в начале видео или после прыжка вперёд загружается с дорогого и быстрого сервера. Зато остальные фрагменты загружаются «впрок» с серверов Hola CDN. Из-за географического расположения пользователя эти фрагменты могут загружаться дольше времени их воспроизведения, а какой-нибудь один из вторичных серверов и вовсе может быть недоступен. Но умный клиентский софт умеет загружать фрагменты с разных серверов параллельно, а также исключать использование недоступных серверов. В результате большая часть видеофайла загружается по частям с дешёвых серверов, а затем незаметно для зрителя склеивается в непрерывный видеопоток. Клиентский код непрерывно измеряет показатели загрузки с разных серверов и принимает решения о том, откуда загружать каждый следующий фрагмент и сколько фрагментов нужно держать «впрок».

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

Что касается серверов Hola CDN, то они представляют собой умные зеркала. Они загружают с первичного CDN и хранят у себя копии популярных видеофайлов, причём пофрагментно.

Другие меры по экономии трафика


Ещё одна важная мера, направленная на снижение хостинговых издержек, — не загружать слишком много видео «впрок». Очень часто пользователь не досматривает видеоролик до конца. При этом большинство веб-плееров загружают столько, сколько могут загрузить, и если у пользователя быстрое соединение, вполне могут успеть скачать ролик целиком за то время, пока пользователь посмотрит четверть и решит дальше не смотреть. Наш плеер загружает только ограниченную длину видео, достаточную для бесперебойного воспроизведения. Последние две функции доступны бесплатно и экономят трафик даже тем, кто не пользуется серверами Hola CDN.

Hola CDN умеет работать как в браузерах с поддержкой HTML5 video, так и в тех, где для воспроизведения видео по-прежнему приходится использовать Flash. Мы рекомендуем заказчикам собственный Hola Player, построенный на основе video.js, но можем работать и с JW Player, а также с любым плеером, основанным на HTML5. Мы используем технологию Media Source Extensions для того, чтобы поставлять HTML5-видеоплееру загруженные по отдельности фрагменты.

Поиграться


Для читателей Хабра мы впервые публикуем ссылку на наш внутренний инструмент для тестирования клиентского кода на различных комбинациях плееров, форматов и сценариев использования. Добро пожаловать, можно поиграться! Естественно, мы не гарантируем, что всё это работает, что оно не изменится в будущем, и что мы вообще эту страницу не решим когда-нибудь убрать. Многие комбинации там совершенно точно не работают, а некоторые вообще невозможны даже теоретически.

Приходите к нам


У нас уже появляются первые довольные заказчики, в то время как множество других потенциальных клиентов находятся в стадии наладки и тестирования. Нам ещё много предстоит сделать: добавить поддержку живых видеопотоков, различных форматов видео, плееров… Поэтому нам нужны хорошие программисты. Работа удалённая (либо в офисе, если Вы живёте в Израиле), график гибче не бывает, высокий заработок. Наш отбор от тестового задания до успешного прохождения испытательного срока проходит в среднем один из 250 кандидатов. Вы должны отлично знать JS, который мы применяем как на клиенте, так и на сервере.

Если Вас интересует работа в Hola, или Вы знаете кого-то, кто может нам подойти, пишите мне на alexey@hola.org. Если Вы приведёте кого-то, кто пройдёт отбор и проработает у нас первые три месяца, мы заплатим Вам 7000 USD.

© Habrahabr.ru