
Como muchos de nosotros nos estamos preparando para la conferencia PyCon, queríamos hablar un poco sobre cómo se usa Python en Netflix. Usamos Python a lo largo de todo el ciclo de vida: desde decidir qué series financiar y terminar con el trabajo de CDN para enviar videos a 148 millones de usuarios. Estamos contribuyendo a muchos paquetes de Python de código abierto, algunos de los cuales se mencionan a continuación. Si algo le interesa, mire nuestro
sitio de vacantes o búsquenos en PyCon.
Abrir conectar
Open Connect es la Red de entrega de contenido (CDN) de Netflix. Una manera simple, aunque imprecisa, de presentar la infraestructura de Netflix es esta: todo lo que sucede antes de presionar el botón Reproducir en el control remoto (por ejemplo, iniciar sesión, determinar un plan de tarifas, sistema de recomendación, seleccionar películas) funciona en Amazon Web Services (AWS) , y todo lo que sucede después (es decir, transmisión de video) funciona a través de Open Connect. El contenido se aloja en la red del servidor Open Connect CDN lo más cerca posible del usuario final para mejorar la calidad de visualización para los clientes y reducir los costos para Netflix y nuestros socios, proveedores de Internet.
Se necesitan varios sistemas de software para diseñar, desarrollar y operar CDN, y muchos de ellos están escritos en Python. Los dispositivos de red basados en CDN están controlados principalmente por aplicaciones de Python. Dichas aplicaciones monitorean el estado de los equipos de red: qué dispositivos se utilizan, qué modelos, con qué componentes de hardware, dónde se encuentran. La configuración de estos dispositivos está controlada por varios otros sistemas, incluida la "fuente de la verdad", las aplicaciones de configuración de dispositivos y las copias de seguridad. La interacción de dispositivos para recopilar datos de salud y otros datos operativos es otra aplicación de Python. Python ha sido durante mucho tiempo un lenguaje de programación popular en la web porque es un lenguaje intuitivo que le permite resolver rápidamente problemas de red. Se han desarrollado muchas bibliotecas útiles que hacen que el lenguaje sea aún más adecuado para el aprendizaje y el uso.
Ingeniería de demanda
Demand Engineering es responsable de
manejar fallas regionales , distribución de tráfico, operaciones de ancho de banda y rendimiento del servidor en la nube de Netflix. Podemos decir con orgullo que nuestras herramientas están construidas principalmente en Python. El servicio de conmutación por error utiliza numpy y scipy para el análisis numérico, boto3 para realizar cambios en la infraestructura de AWS, rq para ejecutar cargas de trabajo asincrónicas, todo envuelto en una capa delgada de API Flask. La capacidad de salir con fallas en el shell de
bpython e improvisar más de una vez salvó la situación.
Utilizamos activamente Jupyter Notebooks y
nteract para analizar datos operativos y
herramientas de visualización de prototipos para detectar regresiones de capacidad.
CORE
El equipo CORE usa Python para analizar estadísticas y emitir alertas. Confiamos en muchas bibliotecas estadísticas y matemáticas (numpy, scipy, ruptures, pandas) para automatizar el análisis de 1000 señales relacionadas cuando los sistemas de advertencia indican problemas. Hemos desarrollado un sistema de correlación de series de tiempo utilizado tanto dentro del equipo como fuera de él, así como un sistema de trabajo distribuido para paralelizar una gran cantidad de trabajo analítico para obtener resultados rápidos.
También usamos habitualmente Python para tareas de automatización, investigación y filtrado de datos y como una conveniente herramienta de visualización.
Monitoreo, alerta y recuperación automática.
El equipo de Insight Engineering es responsable del desarrollo y operación de herramientas para el reconocimiento rápido de problemas, alertas, diagnósticos y soluciones automáticas. Con la creciente popularidad de Python, el equipo ahora admite clientes de Python para la mayoría de sus servicios. Un ejemplo es la biblioteca del cliente
Spectator para código que registra métricas de series temporales dimensionales. Creamos bibliotecas Python para interactuar con otros servicios en la plataforma Netflix. Además de las bibliotecas, los productos
Winston y
Bolt se crean utilizando marcos de Python (Gunicorn + Flask + Flask-RESTPlus).
Seguridad de la información
El equipo de seguridad de la información utiliza Python para una serie de tareas importantes, incluida la automatización de la seguridad, la clasificación de riesgos, la identificación y la reparación automática de vulnerabilidades. Publicamos el código fuente de varios productos exitosos, incluido
Security Monkey (nuestro proyecto de código abierto más activo). Python se utiliza para proteger nuestros recursos SSH con
Bless . El equipo de seguridad de la infraestructura usa Python para configurar los permisos de IAM usando
Repokid . Las secuencias de comandos de Python ayudan a generar certificados TLS en
Lemur .
Algunos de nuestros proyectos recientes incluyen Prism: un marco de trabajo por lotes que ayuda a los ingenieros de seguridad a analizar el estado de la infraestructura e identificar factores de riesgo y vulnerabilidades en el código fuente. Actualmente proporcionamos bibliotecas Python y Ruby para Prism. La
herramienta forense Diffy (informática forense)
está completamente escrita en Python. También usamos Python para descubrir datos confidenciales usando Lanius.
Algoritmos de personalización
Hacemos un uso extensivo de Python en
el marco de aprendizaje automático para la personalización . Aquí se enseñan algunos modelos que proporcionan aspectos clave de la funcionalidad de Netflix: desde
algoritmos de recomendación hasta
algoritmos de
selección y
marketing . Por ejemplo, algunos algoritmos usan TensorFlow, Keras y PyTorch para aprender redes neuronales profundas, XGBoost y LightGBM para aprender árboles de decisión con aumento de gradiente o una pila de Python más amplia (por ejemplo, bibliotecas numpy, scipy, sklearn, matplotlib, pandas, bibliotecas cvxpy). Dado que constantemente intentamos nuevos enfoques, para muchos experimentos utilizamos las computadoras portátiles Jupyter. También hemos desarrollado una serie de bibliotecas de nivel superior para integrar portátiles con el resto de nuestro
ecosistema (por ejemplo, acceso a datos, registro de hechos y extracción de atributos, evaluación de modelos y publicación).
Infraestructura de aprendizaje automático
Además de la personalización, Netflix aplica el aprendizaje automático a cientos de otras tareas en toda la empresa. Muchas de estas aplicaciones se ejecutan en Metaflow, la plataforma Python que facilita la ejecución de proyectos ML y los ejecuta desde la etapa de prototipo hasta la producción.
Metaflow supera los límites de Python: utilizamos código Python bien paralelo y optimizado para extraer datos a 10 Gb / s, procesar cientos de millones de puntos de datos en la memoria y organizar cálculos en decenas de miles de núcleos de CPU.
Cuadernos
En Netflix, somos usuarios ávidos de las notebooks Jupyter, y ya escribimos sobre las
razones y la naturaleza de estas inversiones .
Pero Python juega un papel muy importante en cómo se proporcionan estos servicios. Es el lenguaje principal para desarrollar, depurar, investigar y crear prototipos de diversas interacciones con el ecosistema Jupyter. Utilizamos Python para crear extensiones personalizadas para el servidor Jupyter, lo que nos permite administrar tareas como el registro, el archivo, la publicación y la clonación de cuadernos en nombre de los usuarios. Brindamos a nuestros usuarios muchas opciones en Python a través de varios núcleos de Jupyter y controlamos la implementación de estas especificaciones de kernel utilizando Python también.
Orquestación
El Equipo de Orquestación de Big Data es responsable de proporcionar todos los servicios y herramientas para planificar y ejecutar las tuberías de ETL y Adhoc.
Muchos componentes de orquestación están escritos en Python. Comenzando con un programador que utiliza
Jupyter y
blocs de
notas de
papermill para tipos de trabajos de plantilla (Spark, Presto ...). Esto brinda a los usuarios una forma estandarizada y fácil de expresar el trabajo que debe hacerse.
Aquí puedes leer más al respecto. Utilizamos cuadernos como listas reales de operaciones en producción ("runbooks") en situaciones donde se requiere intervención humana, por ejemplo, reiniciar todo lo que cayó en la última hora.
Para uso interno, creamos una plataforma basada en eventos que está completamente escrita en Python. Recibe secuencias de eventos de varios sistemas que se combinan en una sola herramienta. Esto le permite determinar las condiciones para filtrar eventos, responder a ellos o enrutarlos. Como resultado, pudimos aislar microservicios y garantizar la transparencia en todo lo que sucede en la plataforma de datos.
Nuestro equipo también ha desarrollado el cliente
pygenie , que interactúa con el servicio de finalización de trabajo federado
Genie . Internamente, tenemos extensiones adicionales a esta biblioteca que aplican acuerdos comerciales y están integradas con la plataforma Netflix. Estas bibliotecas son la forma principal para que los usuarios interactúen programáticamente con la plataforma de Big Data.
Finalmente, nuestro equipo contribuyó a la
fábrica de papel y
álbum de recortes de proyectos de código abierto: agregamos código tanto para nuestros casos de uso propios como externos. Nuestros esfuerzos son bien recibidos en la comunidad de código abierto, de lo cual estamos muy contentos.
Plataforma experimental
El equipo de cálculos científicos crea una plataforma para experimentos: pruebas AB y otras. Los científicos e ingenieros pueden experimentar con la innovación en tres áreas: datos, estadísticas y visualización.
Nuestro repositorio de métricas es una plataforma Python basada en
PyPika que le permite escribir consultas SQL parametrizadas reutilizables. Este es el punto de entrada para cualquier nuevo análisis.
La biblioteca de modelos causales de modelos causales se basa en Python y R: aquí, los científicos tienen la oportunidad de explorar nuevos modelos causales. Utiliza PyArrow y RPy2, por lo que las estadísticas se calculan fácilmente en cualquier idioma.
La biblioteca de visualización se basa en
Plotly . Dado que Plotly es una especificación común para las visualizaciones, existen muchas herramientas de salida que van a nuestras plataformas.
Ecosistema de afiliados
El equipo del ecosistema asociado utiliza Python para probar aplicaciones de Netflix en dispositivos. Python forma el núcleo de la nueva infraestructura de integración continua, que incluye la administración de nuestros servidores de orquestación, la administración de Spinnaker, las solicitudes de pruebas y el filtrado, y la planificación de pruebas en dispositivos y contenedores. Se realiza un análisis adicional posterior al lanzamiento en Python utilizando TensorFlow para determinar qué pruebas tienen más probabilidades de causar problemas en qué dispositivos.
Codificación de video y desarrollo de medios en la nube
Nuestro equipo se encarga de codificar (y transcodificar) el catálogo de Netflix y también utiliza el aprendizaje automático para analizar este catálogo.
Usamos Python en aproximadamente 50 proyectos, como
vmaf y
mezzfs , creamos soluciones de visión por computadora usando la plataforma de reducción de mapas llamada
Archer , y usamos Python para muchos proyectos internos.
También hemos abierto varias herramientas para facilitar el desarrollo / distribución de proyectos de Python, como
setupmeta y
pickley .
Netflix y animación NVFX
Python es un estándar de la industria para todas las principales aplicaciones que usamos para crear contenido animado y VFX, por lo que no hace falta decir que lo usamos mucho. Todas nuestras integraciones con Maya y Nuke están hechas en Python, y la mayor parte de nuestras herramientas Shotgun también. Acabamos de comenzar a construir herramientas en la nube y vamos a implementar muchos contenedores / AMI Python personalizados allí.
Aprendizaje automático en contenido, ciencia y análisis.
El equipo de aprendizaje automático en contenido hace un uso extensivo de Python para desarrollar modelos de aprendizaje automático que son fundamentales para predecir el tamaño de la audiencia, las vistas y otras métricas para todo el contenido.