Промышленность (Netflix) Пример использования JavaScript

Введение :

Что такое JavaScript?

JavaScript — это язык программирования, который мы можем использовать для веб-страниц, чтобы сделать их интерактивными. Это делает веб-страницы динамичными, а с помощью HTML и CSS мы можем сделать их более интерактивными, красочными и удобными для пользователя. Мы можем выполнять необходимые действия на сервере в зависимости от каких-либо событий, клиенты делают это на веб-странице в браузере, а ответ с сервера может загружаться динамически без перезагрузки веб-страницы.

Нетфликс:

Netflix — это служба потоковой передачи, которая обеспечивает множество развлечений, предоставляя отмеченные наградами шоу, фильмы и т. д. Какими бы ни были услуги, предоставляемые любым приложением, техническая часть, связанная с ИТ, всегда играет важную роль и играет огромную роль в успехе любого приложения.

Несколько лет назад Netflix решил провести рефакторинг своего основного клиентского приложения с C++ на JavaScript. Этот подход обещал более согласованный пользовательский интерфейс (UI) и позволил Netflix быстрее внедрять новые услуги. Но первоначальный подход привел к большому хрупкому приложению JavaScript, которое было трудно тестировать и обновлять.

«За последний год Netflix реализовал план модуляции кода JavaScript, который помог устранить многие из этих ограничений», — сказал Семми Пьюревал, старший инженер-программист Netflix, на конференции Fluent. Это позволило проводить модульное тестирование отдельных модулей, улучшить совместное использование кода между командами и позволило Netflix выпускать обновления ежедневно, а не каждые шесть недель.

Архитектура клиента Netflix была разработана, чтобы имитировать гибкость веб-браузеров в разрешении обновлений на различных устройствах. Компания начала со специального браузера, который обернул WebKit вокруг основного кода, поддерживающего пользовательский интерфейс. Это упростило инженерам Netflix обновление пользовательского интерфейса, как и любого приложения в Интернете.

Такой подход помог Netflix создать пользовательский интерфейс, но он плохо работал на старых устройствах. Создание приложений, согласованных на разных устройствах, было сложной задачей, поскольку такие операции, как манипулирование DOM, должны были пройти через гигантское дерево, чтобы вставить элементы пользовательского интерфейса. Поэтому Netflix пришлось решить, нужен ли им весь DOM и весь его багаж, сказал Пьюревал.

Они работали над этим, создавая собственный движок рендеринга. Эта архитектура работает примерно так же, как Node.js, но на клиенте, а не на сервере, сказал Пьюревал. Такой подход позволяет основному приложению рендеринга получать доступ к системным ресурсам для платформы Netflix на различных устройствах, от высокопроизводительных игровых платформ до обычных телевизоров.

Он должен был выполнять связанные с системой функции, такие как декодирование и воспроизведение видео, работа в сети, ведение журнала, безопасность, управление контентом и кэширование. Такой подход позволяет Netflix внедрять инновации во все другие функции и услуги, предоставляемые на этой общей платформе. Например, они опробовали новые способы ускорения запуска фильмов, защиты информации, адаптивной потоковой передачи и регистрации.

Проблема заключалась в том, что многие из этих функций существовали в C++, и когда этот код попадал на устройства, он не всегда обновлялся в полевых условиях. Цель состояла в том, чтобы перенести больше некритичных по производительности вещей в JavaScript, чтобы обеспечить больше инноваций. Они внедрили уровень безопасности сообщений Netflix, MSL JS в качестве расширяемого и гибкого безопасного протокола обмена сообщениями для передачи данных.

Это привело к некоторым интересным различиям в области видимости переменных в JavaScript и C++. Проблемы возникли, когда две якобы независимые переменные также повлияли на третью переменную, к которой могли получить доступ обе. Эти якобы независимые переменные в конечном итоге повлияли друг на друга, хотя они и не должны были быть связаны. В результате код сильно пострадал, сказал Пьюревал.

Переведя свои пользовательские интерфейсы на Node.js, Netflix смогла упростить разработку, сократить время сборки и повысить уровень настройки своих пользовательских интерфейсов для каждого пользователя.

Node был «действительно привлекательным вариантом для нас, потому что он хорошо сочетался с навыками инженеров пользовательского интерфейса, — сказал Ким Тротт, директор по разработке пользовательского интерфейса в Netflix. Тротт будет говорить об использовании Node Netflix на NodeSummit Interactive на следующей неделе в Портленде, штат Орегон.

Традиционно Netflix был корпоративным магазином Java, но «по мере того, как мы мигрировали из центра обработки данных в облако, мы перешли на архитектуру, в большей степени основанную на сервисах», — сказал Тротт. Компания находится в процессе разделения того, что раньше было монолитным Java-приложением, на набор более мелких сервисов. Java по-прежнему поддерживает серверную часть Netflix, но все, что видит пользователь, исходит от Node.

Node — это среда выполнения JavaScript на стороне сервера, которая позволяет разработчикам писать один и тот же код как для внешнего, так и для внутреннего интерфейса веб-приложения. Поскольку Node построен на основе архитектуры, управляемой событиями, эта платформа особенно хорошо подходит для работы с микросервисами в больших масштабах.

Работа с пользовательским интерфейсом требовательна в Netflix. Услуги компании распространяются на большое количество устройств, от Интернета до мобильных приложений и специальных консолей. Фронтенд-инженерам «приходилось писать много Java-кода для создания веб-сайта, но им также приходилось писать много JavaScript на стороне клиента», — сказал Тротт. С Node они могут выполнять всю свою работу на JavaScript. Команда пользовательского интерфейса управляет платформой Node для видеосервиса.

Node также значительно сокращает время сборки. Запуск Java-приложения может занять до 40 минут, что не совсем подходит для быстрого процесса DevOps. «Команда не смогла двигаться так быстро, как хотела», — сказала она.

В будущем Netflix также перейдет на Node для своего уровня доступа к данным в дополнение к пользовательским интерфейсам. Netflix накладывает свой клиент так, чтобы писать сценарии для одного API, а не для сотен сервисов. При развертывании скриптов на сервисном уровне API клиенты используют совокупность уровней данных, таких как информация о подписчиках, метаданные о фильмах, информация о субтитрах и т. д. В настоящее время сценарии API развертываются непосредственно в одной службе API, что ограничивает возможности масштабирования или изоляции возникающих проблем.

Таким образом, Netflix в настоящее время разрабатывает способ написания сценариев в виде отдельных приложений Node. Если сценарий работает плохо, он будет только мешать или убивать свой собственный сервис, а не всю систему. Эти Node-приложения будут работать в контейнерах Docker вместе с Amazon Web Service Elastic Container Service (ECS), выбранным поставщиком инфраструктуры Netflix. Это позволяет запускать контейнеры локально и отлаживать их локально, а не локально отлаживать их монолитный сервер API.

По словам Тротта, Node оказался настолько удобным, что компания расширяет его использование на другие уровни стека.

Netflix делает шаг вперед в использовании Node с помощью Codex, который представляет собой набор возможностей для предоставления определенных функций конкретным клиентам в зависимости от настроек клиентов, какие устройства используются.

Например, если клиент Netflix владеет XBox, в Codex разработчики могут настроить пакет JavaScript, который будет нацелен на этого подписчика Netflix и его конкретную настройку развлечений. Кодекс будет представлять особый интерес для тех компаний, которые работают с веб-службами, работающими на нескольких платформах. Это также может помочь в тестировании функций A/B.

По словам Тротта, Netflix планирует выпустить Codex в следующем году как проект с открытым исходным кодом.

Спасибо…

Продолжайте учиться…

Продолжайте делиться…