Как Netflix удалось создать настолько стабильную и быструю систему для миллионов пользователей по всему миру? Разработчик Маюх Наир рассказал об архитектуре сервиса и пути видео от компании-производителя к пользователю. AppTractor предлагает вам перевод его статьи.
Не так давно вышел пятый сезон “Карточного домика”, который положил конец долгим и беспощадным приключениям американского политика. Марафон просмотра для них начать очень просто: нужно только дотянуться до устройства или пульта, открыть приложение Netflix и нажать Play. Просто, быстро и молниеносно.
Но механизм работы Netflix гораздо сложнее. Этот сервис воспроизводит около 250 миллионов часов видео в день для 98 миллионов пользователей в 190 странах. В таком масштабе совсем не просто быстро предоставлять качественный контент каждому пользователю. Такая огромная аудитория означает создание уникальной инфраструктуры, переговоры и компромиссы со многими участниками процесса: от компаний, предоставляющих контент, до интернет-провайдеров, которые имеют дело со всем трафиком Netflix.
Сотни микросервисов, один гигантский продукт
Давайте на одном простом примере попытаемся понять, как с технологической стороны выглядит структура Netflix. Допустим, ваше приложение с картами постоянно отслеживает ваше местоположение и сохраняет комплексную информацию о ваших перемещениях в файле locations.txt. Вы создали приложение под названием LocoList, которое ищет этот файл locations.txt на вашем телефоне и показывает все эти места в простом списке. Оно работает идеально.
Но потом разработчики приложения с картами решили, что лучше будет хранить информацию о вашем местоположении в другом месте, и обновили приложение, которое теперь не хранит этот файл на вашем телефоне. Теперь LocoList не может найти файл locations.txt, и вы не можете получить эту информацию из карт. LocoList перестает работать.
Вся ваша работа над LocoList проведена впустую, потому что изменение в Картах сломало ваше приложение. Это может показаться не таким важным моментом, но в огромном сервисе вроде Netflix изменение в одной части не только разрушит впечатления пользователей, но и приведет к тому, что другие части придется переписывать, чтобы приспособить их к этому изменению. Это называется монолитной архитектурой.
Около десяти лет назад Netflix произвел революцию, создав архитектуру микросервисов, в которой любые приложение, код и ресурсы не зависят друг от друга. Если двум приложениям нужно связаться, они используют API, конкретный набор правил, который действует для обеих программ. Разработчики могут вносить изменения в каждое приложение, если это соответствует API. И так как программы знакомы с API друг друга, обмен информацией не прекратится из-за внесенных изменений.
По оценке Netflix, сервис использует около 700 микросервисов, чтобы контролировать каждую часть продукта: один микросервис хранит информацию о просмотренных сериалах, другой списывает ежемесячную плату с карты, ещё один предоставляет вашему устройству необходимые видеофайлы, ещё один изучает вашу историю, чтобы предложить список фильмов, которые вам могут понравиться, и ещё один предоставляет названия и изображения этих фильмов для главного меню. Это только вершина айсберга. Разработчики Netflix могут вносить изменения в любую часть приложения, будучи уверенными, что сервис будет работать исправно.
Почему архитектура микросервисов так важна для Netflix? Вот чего им удалось достичь с её помощью:
Где они запускают все микросервисы?
Чтобы запустить все эти сервисы, вам нужна мощная сеть серверов. У Netflix ранее было собственное оборудование, но они поняли, что при такой скорости роста им будет сложно создавать масштабируемые системы, которые будут поддерживать их сервис. Компания приняла смелое решение избавиться от собственных серверов и переместить всё, что у них есть, в облако, то есть запустить всё на серверах другой компании, которая будет заботиться об оборудовании, пока разработчики Netflix будут писать программы и разворачивать их на серверах. Для своей инфраструктуры они выбрали Amazon Web Services.
Amazon? Компания, которая управляет Prime Video? Как Netflix может доверять всё своему конкуренту?
Что же, многие компании следуют некоторым соглашениям, по которым они работают друг для друга, конкурируя в одних и тех же категориях. Samsung, например, конкурирует с Apple в производстве телефонов, но в то же время некоторые части iPhone производятся корейской компанией. Netflix был клиентом AWS до появления Prime Video, но это не значит, что они должны враждовать друг с другом.
Оказывается, что сотрудничество Netflix и Amazon является win-win ситуацией для обеих компаний. Netflix является одним из крупнейших клиентов AWS и постоянно запрашивает максимум их возможностей, вводя инновационные способы использования серверов AWS для своих целей: запуска микросервисов, хранения фильмов и управления трафиком. AWS, в свою очередь, совершенствует системы, чтобы позволить Netflix справляться с огромной нагрузкой, и использует приобретенные знания, чтобы обслуживать тысячи других корпоративных клиентов. AWS гордится, что Netflix является их главным клиентом, а Netflix может быстро совершенствовать свои сервисы и сохранять стабильность благодаря AWS. Даже если Netflix влияет на популярность Prime Video или наоборот.
Долгий путь от съемок до экрана
В чем польза любого сервиса просмотра видео или сериалов если у него нет контента? Для Netflix получение фильмов и сериалов является долгим и сложным процессом.
- Если сериал/фильм производится не Netflix, им приходится вести переговоры за права на показ с компаниями, распространяющими фильмы или сериалы. Это означает выплату большой суммы, чтобы получить права на трансляцию по всему миру. Может случиться так, что компания-дистрибьютор (или даже сам Netflix) могут подписывать эксклюзивные сделки с другими видеосервисами или ТВ-каналами. Это значит, что Netflix не сможет предоставлять доступ к некоторым сериалам в конкретном регионе или компании придется сдвинуть премьеру на более позднюю дату. Например, премьера пятого сезона “Карточного домика” на Среднем Востоке состоялась 30 июня, на месяц позже, чем в других 150 странах. Netflix даже пришлось выпустить забавное видео, чтобы объяснить сдвиг:
تذكر أنك صائم… #HouseOfCards، الموسم الخامس بـ30 يونيو. pic.twitter.com/wJvV7qpLuN
— Netflix MENA (@NetflixMENA) May 30, 2017
- Хранение оригинальной цифровой копии фильма или сериала происходит на серверах AWS. Оригинальные копии обычно имеют высокое качество, и Netflix приходится обрабатывать файлы, чтобы любой мог их посмотреть.
- Netflix работает на тысячах устройств, и каждое из них проигрывает разные форматы видео и аудио. Отдельные серверы AWS конвертируют оригинальный файл в сотни форматов, каждый из которых предназначен для конкретного типа устройства или конкретного размера экрана. Один файл будет предназначен для iPad, другой работает на телефоне Android в Full HD, ещё один на телевизоре Sony, который будет проигрывать видео в 4K c Dolby-звуком и так далее. Каждый из этих файлов может быть с разным качеством видео, чтобы их было легче загружать при плохом соединении с интернетом. Этот процесс называется транскодингом. В эти файлы добавляют специальный код, который называется DRM (digital rights management, технические средства защиты авторских прав). Это технологическое средство защиты фильмов от пиратства.
- Приложение или сайт Netflix определяет, какое устройство вы используете для просмотра, и выбирает нужный вам файл с нужным качеством, которое зависит от скорости интернета в текущий момент.
- Последняя часть — получение файла — наиболее критична для Netflix, потому что именно сеть доставляет видео с серверов Netflix на устройство пользователя. Если этот этап проигнорировать, то Netflix станет медленным и сложным в использовании, и это станет концом компании. Интернет — это пуповина, соединяющая Netflix и его клиентов, и компания прикладывает много усилий, чтобы за самое короткое время доставлять пользователю желаемый контент в условиях, когда миллионы сервисов борются друг с другом.
Гонка против времени
Все операции экосистемы Netflix бесполезны, если соединение пользователя слишком медленное для передачи качественного видео. Так работает примерно всё в интернете: когда вам требуется доступ к сети, запрос отправляется вашему интернет-провайдеру. Он перенаправляет запрос к серверам сайта, которые посылают ответ, от которого зависит результат. Для Netflix и других крупных сайтов, которые передают миллионы часов видео между серверами и пользователями, для поддержания производительности требуется крупная сеть серверов. Они справляются с этой задачей при помощи сети доставки контента (CDN).
CDN берут оригинальный сайт и его содержимое и копируют данные на сотни серверов по всему миру. Например, когда вы входите в Netflix в Будапеште, вы не будете ждать ответа от главного сервера в США, а получите копию контента с ближайшего CDN-сервера. Это сильно сокращает задержку, и всё загружается очень быстро. Благодаря CDN сайты с огромным количеством пользователей вроде Google, Facebook или YouTube загружают контент очень быстро, независимо от вашего местоположения или скорости интернета.
Ранее Netflix использовали CDN-сети других компаний, таких гигантов, как Akamai, Level 3 и Limelight Networks. Но рост пользовательской базы привел их к необходимости доставки большего количества контента за меньшую стоимость, поэтому компания создала свою собственную CDN-сеть, Open Connect.
Здесь они не полагались на серверы AWS, а создали собственную архитектуру по всему миру. У этой сети одна цель — умно хранить контент и доставлять его пользователям. Netflix заключает договоры с интернет-провайдерами и предоставляет им красные коробки, которые вы можете видеть выше. Провайдеры связывают их со своими серверами. Эти коробки Open Connect загружают библиотеку Netflix с главных серверов в США. Если таких коробок несколько, каждая из них будет хранить контент, наиболее популярный среди пользователей в этом регионе. Тогда непопулярный фильм будет загружаться дольше, чем серия “Очень странных дел”. Когда вы подключаетесь к Netflix, ближайшая коробка Open Connect доставит вам нужный контент, и видео будут загружаться быстрее, чем если бы ваше приложение Netflix пыталось загрузить файлы с главных серверов в США.
Можно сказать, что это жесткие диски, которые хранят видео, и чем ближе они к вам, тем быстрее скачается видео. За кулисами происходит кое-что ещё: как объясняется в этом интервью, когда вы включаете сериал, Netflix обнаружит 10 ближайших коробок Open Connect с этим шоу. Ваше приложение или сайт попытается определить ближайшую из них или ту, с которой видео загрузится быстрее всего, и скачает файлы оттуда. Вот почему видео начинают проигрываться размыто, но потом становятся более резкими — в этот момент Netflix переключает сервер на тот, который предоставит вам наиболее высокое качество видео.
Итог
Вот, что происходит при нажатии кнопки Play:
- Сотни микросервисов, маленьких независимых программ, работают вместе в большом сервисе Netflix.
- Легальный контент, защищенный от копирования, конвертируется в файл под размер вашего экрана.
- Серверы по всему миру создают и хранят копию файла так, чтобы ближайший к вам сервер предоставлял видео с максимальным качеством и скоростью.
- Когда вы выбираете шоу, ваше приложение Netflix выбирает, с которого сервера оно скачает видео.
- Так вы наслаждаетесь тактикой Фрэнка Андервуда, переживаете за жизнь коня БоДжека или боитесь технологий в историях “Черного зеркала”.