[Перевод] Как Netflix использует Питон
Поскольку многие из нас готовятся к конференции PyCon, мы хотели немного рассказать, как Python используется в Netflix. Мы применяем Python на всём жизненном цикле: от принятия решения, какие сериалы финансировать, и заканчивая работой CDN для отгрузки видео 148 миллионам пользователей. Мы вносим свой вклад во многие пакеты Python с открытым исходным кодом, некоторые из которых упомянуты ниже. Если что-то вас интересует, посмотрите наш сайт вакансий или ищите нас на PyCon.
Open Connect — это сеть доставки контента Netflix (CDN). Простой, хотя и неточный, способ представить инфраструктуру Netflix, такой: всё, что происходит перед нажатием кнопки Play на пульте дистанционного управления (например, вход в систему, определение тарифного плана, система рекомендаций, выбор фильмов) работает в Amazon Web Services (AWS), а всё, что происходит потом (т. е. потоковое видео), работает через Open Connect. Контент размещается на сети серверов Open Connect CDN как можно ближе к конечному пользователю, чтобы улучшить качество просмотра для клиентов и снизить затраты Netflix и наших партнёров, интернет-провайдеров.
Для проектирования, разработки и эксплуатации CDN необходимы различные программные системы, и многие из них написаны на Python. Сетевые устройства в основе CDN, в основном, управляются питоновскими приложениями. Такие приложения отслеживают состояние сетевого оборудования: какие используются устройства, какие модели, с какими аппаратными компонентами, где они расположены. Конфигурация этих устройств контролируется несколькими другими системами, включая «источник истины», приложения для конфигурирования устройств и резервного копирования. Взаимодействие устройств для сбора данных о работоспособности и других операционных данных — это ещё одно питоновское приложение. Python уже давно является популярным языком программирования в сети, потому что это интуитивный язык, который позволяет быстро решать сетевые проблемы. Разработано много полезных библиотек, которые делают язык ещё более подходящим для изучения и использования.
Demand Engineering отвечает за отработку региональных сбоев, распределение трафика, операции с пропускной способностью и эффективность серверов в облаке Netflix. Мы с гордостью можем сказать, что наши инструменты построены в основном на Python. Служба по отработке отказов использует numpy и scipy для численного анализа, boto3 для внесения изменений в инфраструктуру AWS, rq для запуска асинхронных рабочих нагрузок, и всё это обёрнуто в тонкий слой Flask API. Возможность уйти при отказе в оболочку bpython и импровизировать не раз спасала положение.
Мы активно использует Jupyter Notebooks и nteract для анализа операционных данных и прототипирования инструментов визуализации, чтобы обнаруживать регрессии ёмкости.
Команда CORE применяет Python для анализа статистики и выдачи предупреждений. Мы опираемся на многие статистические и математические библиотеки (numpy, scipy, ruptures, pandas), чтобы автоматизировать анализ 1000 связанных сигналов, когда системы оповещения указывают на проблемы. Мы разработали систему корреляции временных рядов, используемую как внутри команды, так и за её пределами, а также распределённую рабочую систему для распараллеливания большого объёма аналитической работы для получения быстрых результатов.
Мы также обычно используем Python для задач автоматизации, исследования и фильтрации данных и как удобный инструмент для визуализации.
Команда Insight Engineering отвечает за разработку и эксплуатацию инструментов оперативного распознавания проблем, оповещения, диагностики и автоматического исправления. С ростом популярности Python команда теперь поддерживает клиенты Python для большинства своих сервисов. Одним из примеров является клиентская библиотека Spectator для кода, который записывает метрики размерных временных серий. Мы создаём библиотеки Python для взаимодействия с другими службами на платформе Netflix. В дополнение к библиотекам, продукты Winston и Bolt построены с использованием питоновских фреймворков (Gunicorn + Flask + Flask-RESTPlus).
Команда информационной безопасности использует Python для ряда важных задач, в том числе автоматизации безопасности, классификации рисков, идентификации и автоматического исправления уязвимостей. Мы публиковали исходники ряда успешных продуктов, включая Security Monkey (наш самый активный проект с открытым исходным кодом). Python применяется для защиты наших SSH-ресурсов с помощью Bless. Команда безопасности инфраструктуры использует Python для настройки разрешений IAM с помощью Repokid. Питоновские скрипты помогают генерировать TLS-сертификаты в Lemur.
Некоторые из наших последних проектов включают Prism: пакетный фреймворк, помогающий инженерам безопасности анализировать состояние инфраструктуры, выявлять факторы риска и уязвимости в исходном коде. В настоящее время мы предоставляем библиотеки Python и Ruby для Prism. Инструмент для форензики (компьютерной экспертизы) Diffy полностью написан на Python. Мы также используем Python для обнаружения конфиденциальных данных с помощью Lanius.
Мы широко применяем Python в инфраструктуре машинного обучения для персонализации. Здесь обучаются некоторые модели, которые обеспечивают ключевые аспекты функциональности Netflix: от алгоритмов рекомендаций до выбора обложек и маркетинговых алгоритмов. Например, некоторые алгоритмы используют TensorFlow, Keras и PyTorch для обучения глубоких нейросетей, XGBoost и LightGBM для обучения деревьев решений с градиентным бустингом или более широкий питоновский научный стек (например, библиотеки numpy, scipy, sklearn, библиотек matplotlib, pandas, cvxpy). Поскольку мы постоянно пробуем новые подходы, то для многих экспериментов используем блокноты Jupyter. Мы также разработали ряд библиотек более высокого уровня для интеграции блокнотов с остальной частью нашей экосистемы (например, доступа к данным, регистрации фактов и извлечения признаков, оценки моделей и публикации).
Кроме персонализации, Netflix применяет машинное обучение в сотнях других задач по всей компании. Многие из этих приложений работают на Metaflow, платформе Python, которая позволяет легко выполнять ML-проекты и вести их со стадии прототипа до продакшна.
Metaflow раздвигает границы Python: мы используем хорошо распараллеленный и оптимизированный код Python для извлечения данных на скорости 10 Гбит/с, обработки сотен миллионов точек данных в памяти и организации вычислений на десятках тысяч ядер CPU.
Мы в Netflix заядлые пользователи ноутбуков Jupyter, и мы уже писали о причинах и характере этих вложений.
Но Python играет огромную роль в том, как предоставляются эти услуги. Это основной язык для разработки, отладки, исследования и прототипирования различных взаимодействий с экосистемой Jupyter. Мы используем Python для создания пользовательских расширений для сервера Jupyter, что позволяет управлять такими задачами, как ведение журнала, архивирование, публикация и клонирование ноутбуков от имени пользователей. Мы предоставляем нашим пользователям множество вариантов на Python через различные ядра Jupyter и управляем развёртыванием этих спецификаций ядра тоже с помощью Python.
Команда оркестровки больших данных отвечает за предоставление всех услуг и инструментов для планирования и выполнения конвейеров ETL и Adhoc.
Многие компоненты оркестровки написаны на Python. Начиная с планировщика, который использует блокноты Jupyter и papermill для шаблонных типов заданий (Spark, Presto…). Это даёт пользователям стандартизированный и простой способ выразить работу, которая должна быть выполнена. Здесь вы можете более подробно почитать об этом. Мы использовали блокноты как настоящие списки операций в продакшне («ранбуки») в ситуациях, когда требуется вмешательство человека, например, перезапустить всё, что упало за последний час.
Для внутреннего применения мы построили платформу, управляемую событиями, которая полностью написана на Python. В неё поступают потоки событий из ряда систем, которые объединяются в единый инструмент. Это позволяет определить условия фильтрации событий, реагирования на них или маршрутизации. В результате мы смогли выделить микросервисы и обеспечить прозрачность во всём, что происходит на платформе данных.
Наша команда также разработала клиент pygenie, который взаимодействует с федеративной службой выполнения заданий Genie. Внутри у нас есть дополнительные расширения этой библиотеки, применяющие бизнес-соглашения и интегрированные с платформой Netflix. Эти библиотеки — основной способ программного взаимодействия пользователей с платформой больших данных.
Наконец, наша команда внесла свой вклад в проекты с открытым исходным кодом papermill и scrapbook: мы добавили код как для наших собственных, так и для внешних случаев использования. Наши усилия хорошо приняты в сообществе open source, чему мы очень рады.
Команда научных вычислений создаёт платформу для экспериментов: AB-тестов и других. Учёные и инженеры могут экспериментировать с инновациями по трём направлениям: данные, статистика и визуализация.
Наш репозиторий метрик — это платформа Python на основе PyPika, позволяющая писать многоразовые параметризованные SQL-запросы. Это точка входа для любого нового анализа.
Библиотека причинных моделей Causal Models основана на Python и R: здесь учёные получают возможность исследовать новые модели причинных следствий. Она использует PyArrow и RPy2, так что статистика легко рассчитывается на любом языке.
Библиотека визуализаций основана на Plotly. Поскольку Plotly является общепринятой спецификацией для визуализаций, есть множество инструментов для вывода, который направляется в наши платформы.
Группа, которая занимается партнёрской экосистемой, применяет Python для тестирования приложений Netflix на устройствах. Python формирует ядро новой инфраструктуры непрерывной интеграции, включая управление нашими серверами оркестровки, управление Spinnaker, запросы тестовых наборов и фильтрацию, а также планирование тестовых запусков на устройствах и контейнерах. Дополнительный анализ после запуска выполняется в Python с помощью TensorFlow, чтобы определить, какие тесты, скорее всего, вызовут проблемы на каких устройствах.
Наша команда заботится о кодировании (и перекодировании) каталога Netflix, а также использует машинное обучение для анализа этого каталога.
Мы используем Python примерно в 50 проектах, таких как vmaf и mezzfs, создаём решения для компьютерного зрения, используя платформу map-reduce под названием Archer, и используем Python для многих внутренних проектов.
Мы также открыли несколько инструментов для облегчения разработки/распространения проектов Python, таких как setupmeta и pickley.
Python — отраслевой стандарт для всех основных приложений, которые мы используем для создания анимированного и VFX-контента, поэтому само собой разумеется, что мы интенсивно его используем. Все наши интеграции с Maya и Nuke сделаны на Python, и основная часть наших инструментов Shotgun тоже. Мы только начали налаживать инструменты в облаке и собираемся развернуть там многие кастомные Python AMI/контейнеры.
Команда машинного обучения в контенте широко использует Python для разработки моделей машинного обучения, которые являются ядром прогнозирования размера аудитории, просмотров и других метрик для всего контента.