Эта статья — глава из моей новой книги "Объяснить облако десятилетнему". Первый вариант был написан специально для тех, кому нужно введение в облака. Потом я сделал несколько обновлений и добавил пару глав — «Netflix: что происходит, когда вы нажимаете „старт“?» и «Что такое облачные вычисления?» — которые уже немного выходят за рамки знаний начинающего. Я думаю, что они смогут заинтересовать даже достаточно опытных людей.
Так что если вам нужно хорошее введение в облака или вы знаете кого-то, кому оно необходимо, пожалуйста, присмотритесь. Думаю, вам понравится. Я горжусь тем, что у меня получилось.
Эту главу я написал на основе десятка источников, местами противоречащих друг другу. Основные факты со временем меняются и зависят от того, кто рассказывает историю и какой аудитории. Я постарался по возможности сделать связный рассказ. Учтите, что это не техническое руководство — это статья с большими картинками. К примеру, я даже ни разу не упомянул микросервисы.
Netflix кажется таким простым. Нажмите «воспроизвести» и волшебным образом появится видео. Просто, не правда ли? Да не особенно.
После наших обсуждений в главе «Что такое облачные вычисления?» вы могли ожидать, что Netflix работает с видео при помощи AWS. Нажимаете «воспроизвести» в приложении Netflix, и видео, хранящееся на S3, в потоковом режиме через интернет отправится прямо вам на устройство.
Совершенно разумный подход — для сервиса размерами сильно поменьше.
Но Netflix работает совершенно не так. Всё гораздо более сложно и интересно, чем вы могли себе представить.
Чтобы понять, почему, давайте посмотрим на статистику Netflix за 2017-й год:
- Более 110 млн подписчиков.
- Работа в более чем 200 странах.
- Доход в $3 млрд за квартал.
- Добавляет по 5 млн подписчиков в квартал.
- Воспроизводит более миллиарда часов видео еженедельно. По сравнению, YouTube воспроизводит 1 млрд часов видео каждый день, а Facebook — 110 млн часов видео каждый день.
- В один день 2017 года было воспроизведено 250 млн часов видео.
- Отвечает за 37% пикового интернет-трафика в США.
- Планирует потратить $7 млрд на новый контент в 2018-м.
Что мы узнали?
Netflix огромна. Она глобальная, у неё множество подписчиков, она воспроизводит огромное количество видео и у неё много денег.
Ещё один относящийся к делу факт — Netflix работает по подписке. Подписчики платят Netflix ежемесячно, и могут в любой момент отказаться от подписки. Когда вы жмёте «воспроизвести», чтобы расслабиться под Netflix, лучше бы этому сервису нормально работать. Недовольные подписчики отписываются.
Заглянем глубже
Netflix — прекрасный пример тех идей, что мы обсуждали, поэтому в этой главе будет гораздо больше деталей, чем при описании других облачных сервисов. Одна из причин глубокого изучения Netflix состоит в том, что они выдают гораздо больше информации, чем остальные компании. Коммуникации в Netflix считаются главной культурной ценностью, и компания более чем успешно поддерживает свои стандарты.
Я даже хотел бы поблагодарить Netflix за их открытость по поводу своей архитектуры. С годами компания прочла сотни лекций и написала сотни статей по поводу подробностей их внутренних схем работы. Это помогает улучшать всю индустрию.
Ещё одна причина такой подробной детализации в том, что сервис Netflix просто удивительный. Большинство из нас использовали его — и кому не будет интересно заглянуть за кулисы и узнать, как он работает?
Netflix работает в двух облаках — AWS и Open Connect
Как компания удовлетворяет клиентов? При помощи облаков. На самом деле, двух разных облаков — AWS и Open Connect. Оба они должны работать вместе без проблем, чтобы выдавать многие часы видеоконтента, удовлетворяющего пользователей.
Три части Netflix: клиент, бэкенд, сеть доставки контента
Можно мысленно разделить Netflix на три части: клиент, бэкенд, сеть доставки контента (content delivery network, CDN).
Клиент — пользовательский интерфейс, работающий на любом устройстве, используемом для просмотра списков видео и их воспроизведения. Это может быть мобильное приложение на смартфоне, веб-сайт на настольном компьютере или даже приложение на «умном» телевизоре. Netflix контролирует каждого клиента на каждом устройстве.
Всё, что происходит перед тем, как вы нажимаете на кнопку «воспроизвести», происходит в бэкенде, работающем на AWS. Сюда входят такие вещи, как подготовка всех новых поступающих видео и обработка запросов от всех приложений, веб-сайтов, телевизоров и других устройств.
Всё, что происходит после нажатия «воспроизведения», обрабатывается на Open Connect. Это собственная сеть доставки контента Netflix. Она хранит видео в различных местах по всему миру. Когда вы нажимаете «воспроизвести», видеопоток идёт от Open Connect в ваше устройство, и его демонстрирует клиент. Не волнуйтесь — про CDN мы поговорим позже. Что интересно, в самой компании процесс запуска видео называют не «нажать „воспроизведение“, а „щёлкнуть “пуск» на названии". У каждой индустрии свой жаргон.
Контролируя все три области — клиент, бэкенд, CDN — Netflix достигла полной вертикальной интеграции. Компания контролирует ваш опыт просмотра видео от начала до конца. Поэтому она просто работает, когда вы щёлкаете «воспроизвести», находясь в любой точке мира. Вы гарантированно получаете нужный вам контент, тот, который вы хотите смотреть, и когда вы его хотите.
Посмотрим, как же именно это получается.
В 2008 году Netflix начала переезд на AWS
Netflix работает с 1998. Сначала она занимались сдачей DVD в аренду по почте. Но компания увидела будущее в потоковом видео по запросу. В 2007 Netflix представила свой сервис по выдаче видео по запросу, позволявший подписчикам просматривать в потоковом режиме телесериалы и фильмы через веб-сайт компании на персональных компьютерах, или через специальное ПО компании на разных поддерживаемых ею платформах, включая смартфоны и планшеты, цифровые проигрыватели, игровые приставки и «умные» ТВ.
То, что за потоковым видео по запросу было будущее, может показаться очевидным. В принципе, так оно и было. Лично я работал в парочке стартапов, пытавшихся выдавать видео по запросу. Они провалились. А Netflix ждал успех. Компания определённо хорошо сработала, но пришла на рынок поздно, что ей помогло. К 2007 году интернет был достаточно быстрым и дешёвым, чтобы поддерживать сервисы потокового видео. До этого такого не было. Появление быстрого, не очень дорогого мобильного трафика и ввод мощных мобильных устройств, вроде смартфонов и планшетов, упростил и удешевил просмотр потоковых видео в любое время в любом месте. Правильный момент — залог успеха.
Netflix начинала со своих собственных дата-центров
В 2007 EC2 только начинался, примерно тогда же, когда начинала Netflix. Поэтому Netflix никак не могла бы запуститься с использованием EC2. Компания построила два дата-центра, расположенных рядом. И они испытали на себе все проблемы, которые мы с вами обсуждали в предыдущих главах.
Постройка дата-центров — дело очень затратное. Время уходит на заказ оборудования, его установку и запуск. Сразу после запуска у них заканчивались мощности, и всё приходилось начинать заново. Временные затраты на оборудование заставили компанию принять стратегию вертикального масштабирования.
Netflix писала большие программы, работавшие на больших компьютерах. Такой подход называется построением монолита. Одна программа делала всё. Проблема в том, что если расти так быстро, как Netflix, очень сложно сделать надёжный монолит. Он и не был надёжным.
Отказ сервиса заставил Netflix переехать на AWS
В августе 2008 Netflix три дня подряд не могла отправлять DVD из-за сбоя в их базе данных. Это было неприемлемо. Нужно было что-то решать. Опыт постройки дата-центров научил компанию важной вещи: у неё не получалось хорошо строить дата-центры. У неё хорошо получалось доставлять видео своим клиентам. Ей надо было сосредоточиться на улучшениях в доставке видео, а не на улучшениях в постройке дата-центров. Постройка дата-центров не была конкурентным преимуществом компании — их преимуществом была доставка видео.
В то время Netflix решила переехать на AWS. AWS только начинался, поэтому это было смелое решение. Компания переехала на AWS, поскольку ей нужна была более надёжная инфраструктура. Netflix хотела устранить все слабые места системы. AWS предлагала очень надёжные базы данных, хранение и дата-центры с избыточным резервированием. Netflix требовались облачные сервисы, чтобы больше не строить ненадёжные монолиты. Netflix хотела стать глобальным сервисом, не строя свои дата-центры. Таких возможностей в её старых дата-центрах не было и быть не могло.
Netflix выбрала AWS, поскольку не хотела заниматься недифференцированным тяжёлым трудом. Недифференцированный тяжёлый труд — это то, что необходимо делать, но что не даёт никакого преимущества для основного бизнеса, заключающегося в предоставлении качественного просмотра видео. AWS занимается всем этим тяжёлым трудом для Netflix. А это даёт нетфликсовцам возможность сконцентрироваться на предоставлении ценных для бизнеса услуг.
Переезд компании со своих дата-центров на AWS занял у компании более восьми лет. В это время Netflix увеличила количество клиентов в восемь раз. Теперь Netflix работает на нескольких сотнях тысяч экземпляров EC2.
На AWS Netflix более надёжна
Не то, чтобы Netflix никогда не испытывала проблем с AWS, но в целом её сервис стал гораздо более надёжным, чем раньше. Подобных этим жалоб вы уже больше не увидите:
Компания стала такой надёжной, поскольку предприняла чрезвычайные шаги для этого. Она работает в трёх регионах AWS: в Северной Виргинии, в Портленде, Орегон и в Дублине, Ирландия. В каждом из них Netflix работает в трёх разных зонах доступа.
У компании нет планов увеличивать количество регионов работы. Добавлять новые регионы очень сложно и дорого. Большая часть компаний работает только в одном регионе, не говоря уже о двух или трёх.
Преимущество работы в трёх регионах состоит в том, что один из них может упасть, а два других встанут на его место и будут обслуживать клиентов из пострадавшего региона. Падение региона Netflix называет эвакуацией.
Рассмотрим один пример. Допустим, вы смотрите новый эпизод «Карточного домика» в Лондоне, Англия. Скорее всего, ваше устройство подключено к Дублинскому региону, поскольку он ближе всего находится. Что произойдёт при падении Дублинского региона? Перестанет ли Netflix работать у вас? Нет. После обнаружения проблемы Netflix переадресует вас в Виргинию. Ваше устройство будет общаться с Виргинским регионом вместо Дублинского. Вы даже можете не заметить отказов.
Как часто отказывает регион у AWS? Раз в месяц. Ну, на самом деле регион не отказывает каждый месяц. Netflix выполняет ежемесячные тесты. Каждый месяц Netflix специально роняет весь регион, просто чтобы убедиться, что их система справляется с региональными отказами. Эвакуировать регион можно за шесть минут.
Netflix называет это моделью глобального сервиса. Каждого клиента можно обслужить из любого региона. Это удивительно. И это не происходит автоматически. У AWS нет волшебного соуса для обработки отказа регионов или обслуживания клиентов из разных регионов. Netflix сама проделала эту работу. Компания является пионером в создании надёжных систем с использованием нескольких регионов. Мне неизвестно других компаний, которые пошли бы на такие меры для обеспечения такой надёжности сервиса.
Ещё одно преимущество работы из трёх этих регионов состоит в том, что Netflix может покрывать весь мир. Netflix проводила проверки и выяснила, что, запуская приложение в любой точке мира, вы в любом случае получите быстрое обслуживание из какого-то из этих регионов.
Netflix экономит, используя AWS
Это может удивить многих, но AWS для Netflix выходит дешевле. Стоимость облака в пересчёте на просмотр видео выходит в разы меньше, чем при использовании старых дата-центров. Почему? Из-за эластичности облака.
Netflix может добавлять сервера по необходимости и возвращать их, когда они не нужны. Вместо того, чтобы куча дополнительных компьютеров ничего не делала, просто ожидая пиковой нагрузки, компания использует ровно столько компьютеров, сколько ей надо, и когда надо.
Что происходит на AWS до того, как вы нажали «воспроизвести»?
Всё, что не связано с подачей видео, обрабатывается на AWS. Сюда входят масштабируемые вычислительные мощности, масштабируемое хранение, бизнес-логика, масштабируемые распределённые базы данных, обработка и аналитика больших данных, рекомендации, транскодирование и сотни других функций. Вам не нужно разбираться в них всех, но поскольку вам это может показаться интересным, я объясню их кратко.
Масштабируемые вычислительные мощности и хранение
Масштабируемые вычислительные мощности — это EC2, а хранение — S3. Тут для нас нет ничего нового. Ваше устройство — iPhone, TV, Xbox, смартфон на Android, планшет и т.п. — общается с сервисом, работающим в EC2. Список потенциальных фильмов для просмотра ваше устройство получает, связавшись с компьютером, работающим в EC2. Детальную информацию о видео ваше устройство получает там же. Всё работает так же, как в других облачных сервисах.
Масштабируемые распределённые базы данных
В качестве распределённых баз Netflix использует DynamoDB и Cassandra. Эти имена не должны для вас что-то значить — это просто высококачественные базы данных. Данные хранятся в базе. Информация по вашему профилю, по счетам, по всем просмотренным фильмам — всё это хранится в базе. Распределённые базы данных работают не на одном большом компьютере, а на множестве компьютеров. Ваши данные копируются на многие компьютеры так, чтобы даже если одни или два компьютера, хранящие ваши данные, выйдут из строя, ваши данные будут в безопасности. В реальности все данные копируются по всем трём регионам. Благодаря этому при отказе региона ваши данные будут доступны в другом регионе, на который вас переключат. А масштабирование означает, что база данных сможет хранить столько данных, сколько вы в неё внесёте. Это одно из главных преимуществ распределённых баз данных. Если поступает больше данных, можно добавить больше компьютеров.
Обработка и аналитика больших данных
Большие данные — это просто большое количество данных. Netflix собирает очень много информации. Компания знает, что кто смотрел, когда и где они это смотрели. Компания знает, какие видео её клиенты рассматривали, но не стали заказывать. Она знает, сколько раз смотрели каждое видео — и ещё очень много всего.
Сбор и приведение всех данных к стандартному формату называется обработкой. А извлечение из них смысла — анализом. Данные анализируют, чтобы получить ответы на конкретные вопросы.
Netflix персонализирует картинки специально для вас
Вот вам отличный пример того, как Netflix заманивает вас на просмотр большего количества фильмов с использованием возможностей по аналитике данных. Когда вы просматриваете списки, выбирая, что посмотреть — обращали ли вы вниманеие на то, что для каждого фильма выдаётся какая-нибудь картинка? Это заглавное изображение.
Заглавное изображение должно вас заинтриговать, привлечь ваше внимание и заставить выбрать это видео. Идея в том, что чем более интригующей будет изображение, тем больше вероятность того, что вы просмотрите видео. А чем больше видео вы смотрите, тем меньше вероятность, что вы отпишетесь от Netflix.
Вот пример различных заглавных изображений для сериала Stranger Things:
Вас может удивить, что каждое изображение для каждого видео выбирается специально для вас. Не все видят одни и те же изображения.
Раньше все видели одинаковые заглавные картинки. Вот, как это работало. Клиентам показывали одно изображение, выбранное случайным образом из набора, такого, как представлен на иллюстрации выше. Netflix подсчитывала все просмотры видео, и записывала, какое изображение показывалось пользователю при выборе видео. Допустим, для нашего примера с сериалом, что при показе центральной картинки из коллажа видео посмотрели 1000 раз. А при показе остальных картинок — только по разу.
Поскольку групповое изображение лучше других привлекало пользователей к просмотру, Netflix должна была сделать его заглавным изображением сериала навсегда. Это называется выбор на основе данных. Netflix работает на основе анализа данных. Данные собираются — в этом случае, это количество просмотров, связанное с каждой картинкой — и используется, чтобы принимать наилучшие возможные решения — в этом случае, для выбора заглавной картинки.
Хитро, но можно ли сделать это ещё лучше? Да, используя ещё больше данных. За этой темой будущее — за решением задач через обучение по данным. Мы с вами люди разные. Считаете ли вы, что нас могут мотивировать одни и те же изображения? Вероятно, нет. У нас разные вкусы, разные предпочтений. И Netflix это знает — поэтому теперь она персонализирует все изображения, которые вам показывает. Она пытается выбрать картинку, подчёркивающую самый важный из аспектов видео для вас. Как она это делает?
Помните, что Netflix записывает и подсчитывает всё, что вы делаете на её сайте. Она знает, какие фильмы вам нравится, какие актёры вам нравятся, и так далее. Допустим, что среди ваших рекомендаций оказался фильм «Умница Уилл Хантинг». Netflix должна выбрать подходящую заглавную картинку. Цель — показать картинку, которая сообщит вам о том, что этот фильм вам, возможно, будет интересен. Какую картинку вам нужнео показать?
Если вам нравятся комедии, Netflix покажет вам изображение с Робином Уильямсом. Если вы предпочитаете мелодрамы, Netflix покажет вам изображение Мэтта Дэймона и Минни Драйвер, собирающихся поцеловаться.
Показывая Робина Уильямса, сервис сообщает вам, что в фильме, скорее всего, будет юмор, и поскольку Netflix знает, что вам нравятся комедии, это видео вам подходит. Изображение Мэтта Дэймона и Минни Драйвер передаёт совершенно другое сообщение. Если вы любите комедии, и увидите эту картинку, вы, скорее всего, пропустите её. Поэтому выбор правильного изображения так важен. Оно посылает сильный персонализированный сигнал, рассказывающий о теме фильма.
Вот ещё один пример — «Криминальное чтиво»:
Если вы посмотрели много фильмов с Умой Турман, тогда вы, скорее всего, увидите заглавное изображение с Умой. Если вы смотрели много фильмов с Траволтой, то вы, вероятно, увидите заглавное изображение с Джоном. Видите, как выбор наилучшего возможного персонализированного изображения может увеличить вероятность просмотра определённого видео?
Netflix обращается к вашему интересу, выбирая изображения, однако сервис не хочет вам врать. Он не хочет показывать вам просто некое притягательное изображение, чтобы заставить вас смотреть видео, которое вам не понравится. В этом нет стимула. Сервис не берёт плату за количество просмотров. Сервис пытается минимизировать сожаление и хочет, чтобы вам нравилось то, что вы смотрите, поэтому он подбирает для вас лучшее заглавное изображение из возможных. И это только один небольшой пример анализа данных. Netflix использует подобные стратегии повсеместно.
Рекомендации
Обычно Netflix показывает вам 40-50 вариантов выбора видео, но у сервиса есть предложения из тысяч видео. Как Netflix решает, что показать? При помощи машинного обучения.
Это часть той обработки больших данных и аналитики, о которой мы только что говорили. Сервис изучает данные и предсказывает, что вам может понравиться. Вообще всё, что вы видите на экране Netflix, было подобрано специально для вас при помощи машинного обучения.
Транскодирование из исходного файла в нужный вам формат
И вот мы подбираемся к тому, как в Netflix обрабатывают видео. Перед тем, как вы можете начать просмотр на вашем любимом устройстве, Netflix должен преобразовать видео в формат, наилучшим образом подходящий для вашего устройства. Этот процесс называется транскодированием. Он преобразует файл с видео из одного формата в другой, так, чтобы видео можно было смотреть на разных платформах и устройствах. Netflix кодирует все свои видео на AWS на 300 000 процессорах одновременно. Это больше, чем у почти любого суперкомпьютера!
Источник исходных данных
Кто отправляет видео в Netflix? Студии и производственные объединения. Netflix называет это исходными данными. Новое видео поступает на обработку в команду по работе с контентом. Оно приходит в формате высокого разрешения, объёмом во много терабайт. Чтобы представить себе терабайт информации, представьте себе 60 столбов из бумаги, каждый из которых по высоте равен Эйфелевой башне.
Перед тем, как вы сможете просмотреть видео, Netflix подвергает его суровому многоступенчатому процессу.
Проверка качества
Сначала Netflix проводит много времени за проверкой качества видео. Она ищет цифровые артефакты, изменения цвета, пропущенные кадры, которые могли появиться из-за предыдущих попыток транскодирования или проблем с передачей данных. В случае обнаружения любых проблем видео отвергают.
Конвейер обработки
После подтверждения качества видео отправляют на конвейер обработки. Это последовательность шагов, которые проходят данные перед тем, как их можно будет использовать — что-то похожее на конвейер на фабрике. Для создания каждого видео применяется более 70 различных программ обработки.
Один файл размером в несколько терабайт обрабатывать непрактично, поэтому первым шагом конвейера будет разделение видео на много небольших кусочков. Кусочки проходят по конвейеру так, чтобы их можно было кодировать параллельно — то есть, они обрабатываются одновременно.
Покажем параллелизацию на примере.
Допустим, у вас есть сотня грязных собак, которых надо помыть. Как будет быстрее это сделать — если один человек будет мыть одну собаку за другой, или если нанять сотню мойщиков собак, и помыть их всех одновременно?
Очевидно, процесс пройдёт быстрее, если одновременно будут работать сто мойщиков. Это и есть параллелизм. Именно поэтому Netflix использует так много серверов EC2. Им нужно много серверов, чтобы обрабатывать эти гигантские видеофайлы параллельно. И это работает — компания заявляет, что исходный файл можно закодировать и отправить в CDN всего за 30 минут.
Когда кусочки закодированы, их проверяют, чтобы убедиться, что у них не появилось никаких новых проблем. Затем их снова собирают в один файл и снова проверяют.
Результат — куча файлов
Процесс кодирования создаёт много файлов. Почему? Конечная цель Netflix — поддерживать каждое устройство, подключенное к интернету. Компания начала работать в 2007 году на платформе Microsoft Windows. Со временем было добавлено много других устройств — Roku, LG, Samsung Blu-ray, Apple Mac, Xbox 360, LG DTV, Sony PS3, Nintendo Wii, Apple iPad, Apple iPhone, Apple TV, Android, Kindle Fire и Comcast X1.
В целом Netflix поддерживает 2200 различных устройств. Для каждого из них есть формат видео, который выглядит на нём наилучшим образом. Если вы смотрите Netflix на iPhone, вы увидите видео, которое наилучшим образом выглядит на iPhone. Компания называет все различные форматы видео кодировочным профилем. Также Netflix создаёт файлы, оптимизированные для разных скоростей сети. Если вы смотрите файл по скоростной сети, вы увидите видео лучшего качестве, чем если бы вы смотрели его по более медленной сети.
Также есть файлы для различных аудиоформатов. Аудио кодируется по разным уровням качества и разным языкам. Кроме того, есть файлы с субтитрами. У видео может быть несколько субтитров на разных языках. Для каждого видео есть несколько различных вариантов просмотра. То, что вы увидите, зависит от вашего устройства, качества соединения, тарифа сервиса и выбора языка.
Так сколько же там всего файлов?
Для сериала The Crown Netflix хранит порядка 1200 файлов. У второго сезона Stranger Things файлов ещё больше. Его снимали в разрешении 8К и у него девять эпизодов. Исходные файлы занимают множество терабайт данных. На кодирование только одного сезона ушло 190 000 процессорных часов. В результате получилось 9570 различных видео, аудио и текстовых файлов.
Посмотрим теперь, как Netflix воспроизводит все эти файлы.
Три различных стратегии для воспроизведения потокового видео
У Netflix есть три различных стратегии для воспроизведения потокового видео — его собственная небольшая CDN, сторонние CDN и Open Connect. Начнём с определения CDN. CDN — это сеть распределения контента (content distribution network). Для Netflix контент — это, конечно, видеофайлы, которые мы обсуждали в предыдущем разделе. Распределение означает, что файлы копируются из центрального места хранения по сети и хранятся на компьютерах, распределённых по всему миру. У Netflix центральное место хранения файлов — это S3.
Зачем создавать CDN?
Идея простая: нужно разместить видео как можно ближе к пользователям, распределяя компьютеры по всему миру. Когда пользователь хочет посмотреть видео, найдите ближайший к нему компьютер и организуйте оттуда поток на его устройство. Наибольшими преимуществами CDN являются скорость и надёжность.
Представьте, что вы смотрите видео в Лондоне, а его передают вам из Портленда, Орегон. Видеопотоку необходимо пройти через множество сетей, включая подводный кабель, поэтому соединение может быть медленным и ненадёжным. Передвинув видео поближе к смотрящим его людям, можно сделать ощущения от просмотра видео наиболее быстрысми и надёжными.
Каждое местоположение компьютера, хранящего видео, называется точкой присутствия (PoP, point of presence). Каждая PoP — это физическое местоположение с доступом в интернет. Там находятся сервера, роутеры и другое телекоммуникационное оборудование. Про PoP мы поговорим позже.
Первая CDN была слишком маленькой
В 2007 году, когда Netflix впервые представила свой потоковый сервис, у неё было 36 млн подписчиков в 50 странах, которые смотрели более миллиарда часов видео каждый месяц, и к которым передавалось по несколько терабитов данных в секунду. Для поддержки сервиса Netflix построила свою собственную простую CDN в пяти различных местах США. Видеокаталог компании было достаточно небольшим, и во всех местах хранились все файлы.
Вторая CDN была слишком большой
В 2009 Netflix решила использовать сторонние CDN. В то время стоимость CDN начала падать. Использование сторонних сетей было для Netflix разумным шагом. Зачем тратить время и усилия на построение своих сетей, если можно сразу же достичь любого места на планете при помощи существующих CDN?
Netflix работала над обеспечением CDN сервиса с такими компаниями, как Akamai, Limelight и Level 3. Нет ничего плохого в том, чтобы использовать сторонние CDN. На самом деле так делают почти все компании. К примеру, NFL использовала услуги Akamai, чтобы показывать соревнования по американскому футболу вживую. Не создавая собственные CDN, Netflix освободила время на работу над другими приоритетными проектами.
Компания потратила много времени и усилий на разработку более умных клиентов. Netflix создавала алгоритмы, адаптирующиеся к изменяющимся условиям сети. Даже в случае ошибок, перегрузки сетей или серверов, компания хочет, чтобы у пользователей была наилучшая из возможных картинок. Одна из разработанных компанией технологий — переключение на другой источник видео — допустим, на другую CDN или на другой сервер — для достижения наилучшего результата.
В то же время Netflix тратит много усилий на поддержку всех AWS-сервисов, о которых мы упоминали ранее. Netflix называет сервисы в AWS контрольной плоскостью. Контрольная плоскость — сетевой термин, обозначающий часть системы, контролирующей всё остальное. В вашем теле контрольной плоскостью служит ваш мозг — он контролирует всё остальное.
А затем Netflix решили, что могут улучшить сервис, разработав собственную CDN.
Open Connect оказался идеальным
В 2011 году Netflix поняла, что на их масштабе им нужно выделенное CDN-решение для максимизации эффективности сети. Распределение видео — ключевая компетенция компании, и может стать огромным конкурентным преимуществром. Поэтому Netflix стала разрабатывать Open Connect, собственную специальную CDN. Она запустилась в 2012 году. У Open Connect есть множество преимуществ:
- Она не такая дорогая. Сторонние CDN дороже. Сделать самому — значит, сэкономить много денег.
- Лучше качество. Netflix рассудила, что контролируя весь путь видео — транскодирование, CDN, клиенты, устройства — сможет обеспечить отличное качество сервиса.
- Лучше масштабируется. У компании была цель обеспечить услуги по всему миру. Чтобы сделать это быстро и обеспечить всем хорошее качество видео, необходимо было создать собственную систему.
Сторонние CDN должны поддерживать пользователей, которым нужен доступ к любому контенту из любой точки мира. Задача Netflix была намного проще.
Netflix точно знает своих пользователей, поскольку они оформляют подписку. Она знает, какие видео нужно передавать. Просто потому, что передавать нужно только крупные видеопотоки, можно провести множество действий для разумной оптимизации сетей, которые не могут сделать другие CDN. Netflix также много чего знает о своих клиентах. Компания знает, какие видео им нравятся и когда они любят их смотреть.
С такими знаниями Netflix построила высокоскоростную CDN. Давайте рассмотрим в деталях, как работает Open Connect.
Устройства Open Connect
Помните, как мы обсуждали, что у CDN компьютеры распределены по всему миру? Netflix разработала собственную компьютерную систему для хранения видео. Netflix называет её устройствами Open Connect (Open Connect Appliances, OCA). Вот, как выглядела одна из ранних установок OCA:
На фото — несколько OCA сразу. OCA группируются в кластеры из нескольких серверов. Каждый OCA — это быстрый сервер, оптимизированный на выдачу крупных файлов, со множеством жёстких дисков или флэш-накопителей, хранящих видео. Вот, как выглядит один из серверов OCA:
Для разных целей есть несколько разных видов ОСА. Есть крупные ОСА, способные хранить весь видеокаталог компании. Есть мелкие ОСА, способные хранить только часть видеокаталога. Небольшие ОСА заполняются видеофайлами ежедневно во время пиковых часов в процессе проактивного кэширования.
С точки зрения оборудования у ОСА нет ничего выдающегося. Они основаны на обычных PC-компонентах и различные поставщики собирают их в различных корпусах. Вы можете купить себе такие же компьютеры, если захотите. Обратите внимание, что все компьютеры Netflix красные. Компания специально заказывает их такими, чтобы они совпадали с цветом логотипа.
С точки зрения ПО, ОСА используют FreeBSD ОС и nginx в качестве веб-сервера. Да, каждый ОСА — это веб-сервер. Видеопотоки используют nginx. Если эти названия вам ничего не говорят — не расстраивайтесь, я включаю их только для полноты картины.
Количество ОСА на местах зависит от надёжности, которую Netflix хочет достичь в определённом месте, объём трафика, который оно обслуживает и процент трафика, которую этот центр может отправлять в виде потока. Когда вы жмёте «воспроизвести», вы смотрите видеопоток, идущий с определённого ОСА — такого, как на фото выше, расположенного недалеко от вас.
Для достижения наилучшего качества просмотра Netflix хотела бы кэшировать видео прямо у вас дома. Но пока это непрактично. Следующий по удобству вариант — расположить мини-Netflix поблизости от вашего дома. Как это можно сделать?
Где Netflix размещает ОСА?
Netflix раздаёт огромные объёмы видео с тысяч серверов, расположенных в более чем 1000 дата-центров по всему миру. Посмотрите на эту карту расположения видеосерверов:
Другие видеосервисы, например YouTube и Amazon, доставляют видео по своим собственным сетям. Эти компании буквально построили собственные глобальные сети для доставки видео пользователям. Это очень сложно и дорого. Netflix использует совершенно другой подход для строительства CDN.
Netflix не работает по своей сети, она не работает из своих собственных дата-центров. Вместо этого интернет-провайдеры (ISP) соглашаются размещать у себя ОСА. Netflix бесплатно предлагает провайдерам встраивать свои сервера в их сеть, кроме того, она размещает ОСА близ точек обмена трафиком (internet exchange location, IXP).
Такая стратегия позволяет Netflix не строить собственные дата-центры, но компания получает все преимущества нахождения в таком центре — просто этот центр принадлежит кому-то другому. Гениально! Давайте разобьём последние пару параграфов на более простые шаги.
Использование ISP для создания CDN
ISP — это провайдер вашего интернета. Это тот, кто предоставляет вам интернет в виде услуги. Это может быть Verizon, Comcast, Билайн или один из тысяч других. Главное, что ISP расположены по всему миру и находятся близко к клиентам. Размещая ОСА в дата-центрах ISP, Netflix тоже оказывается распределённой по всему миру и близко к её клиентам.
Использование IXP для создания CDN
Точка обмена трафиком — это дата-центр, где ISP и CDN обмениваются трафиком между сетями. Это всё равно, что сходить на вечеринку, чтобы обменяться подарками к рождеству с друзьями. Обмениваться проще, если все собрались в одном месте.
IXP разбросаны по всему миру:
Вот как выглядит IXP в Лондоне:
Если подойти к этим жёлтым оптоволоконным кабелям, то вот что вы увидите (на основе точки обмена AMS-IX в Амстердаме):
Каждый кабель соединяет одну сеть с другой. Именно так разные сети обмениваются трафиком друг с другом. IXP — это как развязка на шоссе, только с проводами:
Для Netflix это ещё одно преимущество. IXP расположены по всему миру. Расположив ОСА в IXP, компания уже может не запускать собственные дата-центры.
Видео проактивно кэшируется на ОСА
У Netflix есть куча видео, расположенного в S3. Передающие видео компьютеры расположены по всему миру. Не хватает только одного: самого видео! Netflix использует процесс, который называет проактивным кэшированием, для эффективного копирования видео в ОСА.
Что такое кэш [англ. cache — тайник]? Это место, часто расположенное в земле, где тайно хранят патроны, еду и сокровища. Знаете, как белки прячут орехи на зиму? Каждое место, где белка спрятала орех — это кэш. Зимой любая белка может найти кэш с орехами и сжевать их. Исследователи Арктики отправляют вперёд небольшие команды, которые кэшируют еду, горючее и другие припасы по пути, которым они следуют. Более крупная команда, идущая позади, останавливается у каждого кэша и пополняет запасы. И белки, и арктические исследователи работают проактивно; они делают что-то заранее, чтобы подготовиться к будущему.
Каждый ОСА — это видеокэш того, что вы, скорее всего, захотите посмотреть. Netflix кэширует видео, предсказывая, что вы захотите смотреть. Повсюду в мире Netflix с большой достоверностью знает, что любят смотреть её клиенты. Помните, мы говорили, что Netflix — компания, работающая на основе данных? Она использует данные о популярности, чтобы предсказывать, какие видео её клиенты, вероятно, захотят посмотреть завтра в любом месте. Под местом здесь имеется в виду кластер из ОСА, расположенный у ISP или в IXP. Компания копирует предсказанные видео на один или несколько ОСА в каждом из мест. Это называется предварительным расположением. Видео располагается на ОСА ещё до того, как его кто-нибудь запросит. В результате клиенты получают отличную услугу. Видео, которое они хотят посмотреть, уже находится близко к ним, в готовом для просмотра виде.
Netflix работает с т.н. связанным кэшем. Небольшие ОСА размещаются у ISP или IXP. Они слишком мелкие, чтобы на них уместился весь каталог видео. В других местах есть ОСА, на которых есть почти весь каталог видео Netflix. А ещё где-то есть места, ОСА в которых содержат вообще весь каталог Netflix. Они получают видео с S3.
Каждую ночь ОСА просыпается и опрашивает сервис в AWS, какие видео ему нужны. Сервис отправляет ему список видео, которые у него должны быть, построенный на основе предсказаний. Каждый ОСА отвечает за то, чтобы иметь все видео из этого списка. Если у одного из ОСА в одном месте есть одно из нужных видео, то кэширующий ОСА скопирует это видео у него. Иначе видео будет найдено и взято у какого-нибудь ОСА, расположенного не очень далеко.
Поскольку Netflix предсказывает, что будет популярным завтра, всегда существует фора в один день перед тем, как на ОСА потребуется видео. Это значит, что видео можно будет скопировать в тихое время, вне пиковой загрузки, что сильно уменьшает использование пропускной способности ISP.
У Open Connect никогда не бывает промахов в кэше. Промах — это когда у ОСА запрашивают определённое видео, а он отвечает, что его у него нет. Промахи случаются у других CDN, поскольку они не могут позволить себе копировать весь контент повсюду. Поскольку Netflix известны все видео, которые нужно кэшировать, она точно знает, где и какие видео есть в какой момент. Если у мелкого ОСА нет нужного видео, оно с гарантией будет у одного из крупных ОСА.
А почему Netflix просто не скопирует все свои видео на все ОСА в мире? Её видеокаталог слишком большой для этого. В 2013 году объём каталога превышал 3 петабайта; какой он сегодня, я не знаю, могу лишь предположить, что гораздо больше. Именно поэтому компания разработала метод выбора видеофайлов, которые нужно хранить на каждом ОСА, использующий данные, предсказывающие, что захотят посмотреть подписчики.
Возьмём пример. «Карточный домик» — очень популярное шоу. На какой ОСА его надо скопировать? Скорее всего, везде, поскольку подписчики со всего мира захотят его посмотреть. А что, если видео не так популярно, как «Карточный домик»? Netflix решает, в каких местах должны храниться его копии, чтобы наилучшим образом удовлетворить запросы всех ближайших клиентов.
В одном месте самые популярные видео копируются на множество ОСА. Чем популярнее видео, тем больше серверов будет хранить его копию. Почему? Если бы у очень популярного видео была только одна копия, то поток видео ко всем клиентам перегрузил бы сервер.
Видео не считается подготовленным к раздаче, если оно скопировано только на один ОСА. Netflix хочет иметь возможность проиграть один и тот же контент в одно и то же время по всему миру. Только когда есть достаточное количество ОСА с достаточным количеством копий видео для того, чтобы предоставлять его в нужном качестве, видео считается подготовленным для просмотра.
К примеру, второй сезон шоу Daredevil в 2016 году был первым случаем, когда Netflix выпустила все эпизоды сериала на всех устройствах во всех странах одновременно.
Размещение ОСА: зачем это нужно провайдерам?
Зачем же провайдеры соглашаются размещать у себя кластеры ОСА? На первый взгляд это слишком щедро — но вам будет интересно узнать, что на самом деле тут задействована личная выгода. Чтобы понять это, нам надо поговорить о том, Как работают сети. В этой книге мы обсуждали, что доступ к облачным сервисам осуществляется через интернет. В случае с Netflix это не так — при просмотре видео через приложение Netflix оно общается с AWS по интернету. [не очень ясно, какое различие имел в виду автор // прим. перев.]
Интернет — это взаимосвязь сетей. У вас есть провайдер, обеспечивающий доступ в интернет. Я получаю свой интернет-сервис у Comcast. Это значит, что мой дом соединяется с сетью Comcast при помощи оптоволокна. Сеть Comcast принадлежит им — это не интернет, интернет — это нечто другое.
Допустим, я хочу выполнить поиск в Google, и я вбиваю запрос в браузере и жму Enter. Мой запрос сначала идёт по сети Comcast. Google не расположен в сети Comcast. В какой-то момент мой запрос должен попасть в сеть Google. Для этого и существует интернет. Интернет соединяет сеть Comcast с сетью Google. Там существуют протоколы роутинга, работающие на манер уличного регулировщика и направляющие сетевой трафик. Когда мой запрос направляется в интернет, он находится за пределами сети Comcast и за пределами сети Google. Он находится в опорной сети интернета. Интернет связан из множества частных сетей, решивших взаимодействовать друг с другом. IXP — один из способов, которым сети связываются между собой.
В США существует карта дальних оптоволоконных сетей:
Netflix со своим Open Connect сделала следующее: она разместила кластеры ОСА внутри сетей ISP. Это значит, что если я смотрю видео Netflix, я общаюсь с ОСА, расположенном в сети Comcast. Весь мой видеотрафик идёт по их сети, и не выходит в интернет.
Ключ к масштабированию доставки видео — быть так близко к пользователю, как это возможно. Когда вы это делаете, вы не используете опорные сети интернета. Запросы удовлетворяются в местной части сети. Почему это хорошо? Вспомните, мы говорили, что Netflix уже потребляет более 37% интернет-трафика в США. Если бы ISP не сотрудничали с компанией, она использовала бы ещё больше интернета. Интернет не смог бы обработать весь трафик. Провайдерам нужно было бы добавлять больше мощностей, а это очень дорого.
Сейчас почти 100% контента Netflix передаётся внутри провайдерских сетей. Это уменьшает стоимость обслуживания сети, поскольку не забивает интернет. В то же время подписчики Netflix получают видео высокого качества, и работа сети улучшается для всех. Выигрывают все.
Open Connect надёжен и отказоустойчив
Мы уже обсудили, как Netflix увеличивает надёжность системы, работая в трёх регионах AWS. Архитектура Open Connect достигает тех же целей. Это может быть неочевидным, но ОСА не зависят друг от друга. ОСА работают как самодостаточные архипелаги по доставке видео. Подписчики, получающие видео с одного ОСА, не страдают от отказов других ОСА.
Что случается при отказе ОСА? Используемая вами клиентская программа мгновенно переключается на другого ОСА и возобновляет показ. Что происходит, если в одном месте ОСА использует слишком много людей? Клиентская программа находит менее загруженный ОСА. Что происходит, если сеть, используемая для передачи видео, перегружается? То же самое — программа находит другой ОСА на сети, работающей лучше. Open Connect — очень надёжная и отказоустойчивая система.
Netflix контролирует клиента
Netflix ловко обрабатывает отказы, поскольку контролирует клиента на всех устройствах. Компания сама разрабатывает приложения для Android и iOS, поэтому можно ожидать, что она контролирует и их. Но даже на таких платформах, как Smart TV, где Netflix не создавала клиентов, она всё равно его контролирует, поскольку контролирует пакет для разработки приложений (SDK).
SDK — это набор программ для разработки, позволяющие создавать приложения. Каждое приложение Netflix делает запросы к AWS и проигрывает видео при помощи SDK. Контролируя SDK, Netflix может постоянно и в реальном времени адаптироваться к медленным сетям, отказавшим ОСА и другим возможным проблемам.
И, наконец: вот, что происходит, когда вы нажимаете «воспроизвести»
Мы долго шли к этому, и многое узнали. Вот, что мы знаем на текущий момент:
- Netflix можно разделить на три части: бэкенд, клиент и CDN.
- Все запросы клиентов обрабатывает AWS.
- Все видео передаются с ближайшего устройства Open Connect (OCA) в CDN.
- Netflix работает с трёх регионов AWS и обычно может справиться с отказом в любом регионе так, что никто даже и не заметит.
- Новый контент преобразуется в компании во множество разных форматов, так, чтобы можно было выбрать наиболее подходящий вариант на основе типа устройства, качества сети, географического расположения и тарифа подписчика.
- Каждый день по Open Connect компания распространяет видео по всему миру неа основе предсказаний того, что захотят смотреть подписчики в разных частях света.
Вот картинка, при помощи которой Netflix описывает процесс воспроизведения:
Давайте её закончим:
- Вы выбираете видео для просмотра при помощи клиента, работающего на каком-то устройстве. Клиент отправляет запрос на воспроизведение, указывая, какое видео вам нужно, на сервис Playback Apps, работающий на AWS.
- Мы это раньше не обсуждали, но большая часть того, что происходит, когда вы жмёте «воспроизвести», имеет отношение к лицензированию. Не во всякой части света существует лицензия на просмотр каждого видео. Netflix должна определить, есть ли у вас лицензия для просмотра определённого видео. Мы не будем обсуждать эту скучную тему, но имейте в виду, что это происходит постоянно. Одна из причин, по которой Netflix стала создавать собственный контент — попытка избежать проблем с лицензированием [и всё равно появляются абсурдные ситуации, когда сериал производства Netflix сама компания показывать не может, потому что продала права на него местному контент-провайдеру — не говоря уже о всяких территориях, запрещённых для работы американских компаний // прим. перев.]. Netflix хочет выпускать шоу для всех людей всего мира одновременно. Создание собственного контента — простейший способ избежать проблем с лицензиями.
- Учитывая всю имеющую отношение к делу информацию, сервис Playback Apps возвращает URL на несколько, вплоть до десяти, серверов ОСА. Это такие же URL, какие вы можете увидеть в вашем браузере. Netflix использует ваш IP-адрес и информацию от вашего провайдера, чтобы определить, какие кластеры ОСА лучше использовать для вас.
- Клиент анализирует ситуацию и выбирает ОСА. Он проверяет качество соединения с каждым из них. Он соединится с самым быстрым и наиболее надёжным ОСА. Клиент постоянно проводит эти проверки во время воспроизведения видео.
- Клиент пытается выбрать наилучший способ получения контента с ОСА.
- Клиент соединяется с ОСА и начинает выводит видеопоток на вашем устройстве.
- Замечали ли вы при просмотре видео, что качество картинки меняется? Иногда там будут пиксели, а спустя некоторое время картинка вновь возвращается к высоком качеству? Это оттого, что клиент адаптируется к качеству сети. Если качество падает, клиент соответственно уменьшает качество видео. Если качество упадёт слишком сильно, клиент переключится на другой ОСА.
Вот, что происходит, когда вы жмёте «воспроизвести» на Netflix. Кто мог бы подумать, что такая простая вещь, как просмотр видео, может быть настолько сложной?