
Comme beaucoup d'entre nous se préparent pour la conférence PyCon, nous voulions parler un peu de la façon dont Python est utilisé dans Netflix. Nous utilisons Python tout au long du cycle de vie: du choix de la série à financer et à la fin du travail de CDN pour expédier la vidéo à 148 millions d'utilisateurs. Nous contribuons à de nombreux packages Python open source, dont certains sont mentionnés ci-dessous. Si quelque chose vous intéresse, consultez notre
site d' offres d'
emploi ou recherchez-nous sur PyCon.
Connexion ouverte
Open Connect est le réseau de distribution de contenu Netflix (CDN). Un moyen simple, quoique inexact, de présenter l'infrastructure Netflix est le suivant: tout ce qui se passe avant d'appuyer sur le bouton Lecture de la télécommande (par exemple, connexion, détermination d'un plan tarifaire, système de recommandation, sélection de films) fonctionne dans Amazon Web Services (AWS) , et tout ce qui se passe ensuite (c'est-à-dire la diffusion de vidéo en continu) fonctionne via Open Connect. Le contenu est hébergé sur le réseau du serveur Open Connect CDN aussi près que possible de l'utilisateur final afin d'améliorer la qualité de visualisation pour les clients et de réduire les coûts pour Netflix et nos partenaires, fournisseurs Internet.
Divers systèmes logiciels sont nécessaires pour concevoir, développer et exploiter des CDN, et bon nombre d'entre eux sont écrits en Python. Les périphériques réseau basés sur CDN sont principalement contrôlés par des applications Python. Ces applications surveillent l'état des équipements réseau: quels appareils sont utilisés, quels modèles, avec quels composants matériels, où ils se trouvent. La configuration de ces périphériques est contrôlée par plusieurs autres systèmes, notamment la «source de vérité», les applications de configuration des périphériques et les sauvegardes. L'interaction des appareils pour collecter des données de santé et d'autres données opérationnelles est une autre application Python. Python est depuis longtemps un langage de programmation populaire sur le Web car il s'agit d'un langage intuitif qui vous permet de résoudre rapidement les problèmes de réseau. De nombreuses bibliothèques utiles ont été développées qui rendent le langage encore plus adapté à l'apprentissage et à l'utilisation.
Ingénierie de la demande
Demand Engineering est responsable de la
gestion des défaillances régionales , de la distribution du trafic, des opérations de bande passante et des performances du serveur dans le cloud Netflix. Nous pouvons dire avec fierté que nos outils sont construits principalement sur Python. Le service de basculement utilise numpy et scipy pour l'analyse numérique, boto3 pour apporter des modifications à l'infrastructure AWS, rq pour exécuter des charges de travail asynchrones, le tout enveloppé dans une fine couche API Flask. La possibilité de quitter avec échec dans le shell
bpython et d'improviser plus d'une fois a sauvé la situation.
Nous utilisons activement Jupyter Notebooks et
nteract pour analyser les données opérationnelles et prototypes d'
outils de visualisation pour détecter les régressions de capacité.
CORE
L'équipe CORE utilise Python pour analyser les statistiques et émettre des alertes. Nous comptons sur de nombreuses bibliothèques statistiques et mathématiques (numpy, scipy, ruptures, pandas) pour automatiser l'analyse de 1000 signaux associés lorsque les systèmes d'alerte indiquent des problèmes. Nous avons développé un système de corrélation de séries temporelles utilisé à la fois au sein de l'équipe et à l'extérieur de celle-ci, ainsi qu'un système de travail distribué pour paralléliser une grande quantité de travail analytique afin d'obtenir des résultats rapides.
Nous utilisons également couramment Python pour les tâches d'automatisation, de recherche et de filtrage des données et comme outil de visualisation pratique.
Surveillance, alerte et récupération automatique
L'équipe d'Insight Engineering est responsable du développement et du fonctionnement des outils de reconnaissance rapide des problèmes, alertes, diagnostics et corrections automatiques. Avec la popularité croissante de Python, l'équipe prend désormais en charge les clients Python pour la plupart de ses services. Un exemple est la bibliothèque cliente
Spectator pour le code qui enregistre les métriques de séries chronologiques dimensionnelles. Nous créons des bibliothèques Python pour interagir avec d'autres services sur la plate-forme Netflix. En plus des bibliothèques, les produits
Winston et
Bolt sont construits à l'aide de frameworks Python (Gunicorn + Flask + Flask-RESTPlus).
Sécurité de l'information
L'équipe de sécurité de l'information utilise Python pour un certain nombre de tâches importantes, notamment l'automatisation de la sécurité, la classification des risques, l'identification et la correction automatique des vulnérabilités. Nous avons publié le code source de plusieurs produits à succès, dont
Security Monkey (notre projet open source le plus actif). Python est utilisé pour protéger nos ressources SSH avec
Bless . L'équipe de sécurité de l'infrastructure utilise Python pour configurer les autorisations IAM à l'aide de
Repokid . Les scripts Python aident à générer des certificats TLS dans
Lemur .
Certains de nos projets récents incluent Prism: un framework batch qui aide les ingénieurs de sécurité à analyser l'état de l'infrastructure et à identifier les facteurs de risque et les vulnérabilités dans le code source. Nous proposons actuellement des bibliothèques Python et Ruby pour Prism. L'
outil Diffy forensics (informatique légale)
est entièrement écrit en Python. Nous utilisons également Python pour découvrir des données sensibles à l'aide de Lanius.
Algorithmes de personnalisation
Nous utilisons largement Python dans
le cadre d'apprentissage automatique pour la personnalisation . Certains modèles sont enseignés ici qui fournissent des aspects clés de la fonctionnalité Netflix:
des algorithmes de
recommandation aux algorithmes de
sélection et de
marketing . Par exemple, certains algorithmes utilisent TensorFlow, Keras et PyTorch pour l'apprentissage des réseaux de neurones profonds, XGBoost et LightGBM pour l'apprentissage des arbres de décision avec renforcement du gradient ou une pile Python plus large (par exemple, bibliothèques numpy, scipy, sklearn, matplotlib, pandas, cvxpy). Puisque nous essayons constamment de nouvelles approches, pour de nombreuses expériences, nous utilisons des cahiers Jupyter. Nous avons également développé un certain nombre de bibliothèques de niveau supérieur pour intégrer les blocs-notes au reste de notre
écosystème (par exemple, l'accès aux données, l'enregistrement des faits et l'extraction des attributs, l'évaluation des modèles et la publication).
Infrastructure d'apprentissage automatique
En plus de la personnalisation, Netflix applique l'apprentissage automatique à des centaines d'autres tâches dans l'entreprise. Beaucoup de ces applications s'exécutent sur Metaflow, la plate-forme Python qui permet d'exécuter facilement des projets ML et de les exécuter du stade du prototype à la production.
Metaflow repousse les limites de Python: nous utilisons du code Python bien parallélisé et optimisé pour extraire des données à 10 Gb / s, traiter des centaines de millions de points de données en mémoire et organiser des calculs sur des dizaines de milliers de cœurs de CPU.
Bloc-notes
Chez Netflix, nous sommes de grands utilisateurs des blocs-notes Jupyter, et nous avons déjà écrit sur les
raisons et la nature de ces investissements .
Mais Python joue un rôle énorme dans la façon dont ces services sont fournis. C'est le langage principal pour développer, déboguer, rechercher et prototyper diverses interactions avec l'écosystème Jupyter. Nous utilisons Python pour créer des extensions personnalisées pour le serveur Jupyter, ce qui nous permet de gérer des tâches telles que la journalisation, l'archivage, la publication et le clonage de blocs-notes au nom des utilisateurs. Nous proposons à nos utilisateurs de nombreuses options en Python via divers noyaux Jupyter et contrôlons également le déploiement de ces spécifications de noyau à l'aide de Python.
Orchestration
L'équipe Big Data Orchestration est chargée de fournir tous les services et outils pour la planification et l'exécution des pipelines ETL et Adhoc.
De nombreux composants d'orchestration sont écrits en Python. À commencer par un planificateur qui utilise les
blocs-notes Jupyter et
papermill pour les types de travaux de modèle (Spark, Presto ...) Cela donne aux utilisateurs un moyen standardisé et facile d'exprimer le travail qui doit être fait.
Ici vous pouvez en savoir plus. Nous avons utilisé les cahiers comme de véritables listes d'opérations en production («runbooks») dans des situations où une intervention humaine est requise, par exemple pour redémarrer tout ce qui est tombé dans la dernière heure.
Pour un usage interne, nous avons construit une plateforme événementielle entièrement écrite en Python. Il reçoit des flux d'événements d'un certain nombre de systèmes qui sont combinés en un seul outil. Cela vous permet de déterminer les conditions de filtrage des événements, de réponse à ceux-ci ou de routage. En conséquence, nous avons pu isoler les microservices et garantir la transparence de tout ce qui se passe sur la plateforme de données.
Notre équipe a également développé le client
pygenie , qui interagit avec le service de fin de travail fédéré
Genie . En interne, nous avons des extensions supplémentaires à cette bibliothèque qui appliquent les accords commerciaux et sont intégrées à la plate-forme Netflix. Ces bibliothèques sont le principal moyen pour les utilisateurs d'interagir par programme avec la plate-forme Big Data.
Enfin, notre équipe a contribué aux projets open source
papermill et
scrapbook : nous avons ajouté du code pour nos propres cas d'utilisation et externes. Nos efforts sont bien reçus dans la communauté open source, dont nous sommes très heureux.
Plateforme expérimentale
L'équipe de calculs scientifiques crée une plateforme d'expériences: tests AB et autres. Les scientifiques et les ingénieurs peuvent expérimenter l'innovation dans trois domaines: les données, les statistiques et la visualisation.
Notre référentiel de métriques est une plateforme Python basée sur
PyPika- qui vous permet d'écrire des requêtes SQL paramétrées réutilisables. C'est le point d'entrée pour toute nouvelle analyse.
La bibliothèque de modèles causaux de modèles causaux est basée sur Python et R: ici, les scientifiques ont la possibilité d'explorer de nouveaux modèles causaux. Il utilise PyArrow et RPy2, de sorte que les statistiques sont facilement calculées dans n'importe quelle langue.
La bibliothèque de visualisation est basée sur
Plotly . Étant donné que Plotly est une spécification commune pour les visualisations, il existe de nombreux outils de sortie qui vont à nos plates-formes.
Écosystème d'affiliation
L'équipe de l'écosystème partenaire utilise Python pour tester les applications Netflix sur les appareils. Python constitue le cœur de la nouvelle infrastructure d'intégration continue, notamment la gestion de nos serveurs d'orchestration, la gestion de Spinnaker, les demandes et le filtrage des suites de tests et la planification des exécutions de tests sur les appareils et les conteneurs. Une analyse supplémentaire après le lancement est effectuée en Python à l'aide de TensorFlow pour déterminer quels tests sont les plus susceptibles de causer des problèmes sur quels appareils.
Codage vidéo et développement du cloud multimédia
Notre équipe s'occupe du codage (et du transcodage) du catalogue Netflix et utilise également l'apprentissage automatique pour analyser ce catalogue.
Nous utilisons Python dans environ 50 projets, tels que
vmaf et
mezzfs , créons des solutions de vision par ordinateur en utilisant la plate-forme de réduction de carte appelée
Archer , et utilisons Python pour de nombreux projets internes.
Nous avons également ouvert plusieurs outils pour faciliter le développement / distribution de projets Python, tels que
setupmeta et
pickley .
Animation Netflix et NVFX
Python est un standard de l'industrie pour toutes les principales applications que nous utilisons pour créer du contenu animé et VFX, il va donc sans dire que nous l'utilisons de manière intensive. Toutes nos intégrations avec Maya et Nuke sont faites en Python, ainsi que la majeure partie de nos outils Shotgun. Nous venons de commencer à créer des outils dans le cloud et nous allons y déployer de nombreux conteneurs / AMI Python personnalisés.
Apprentissage automatique dans le contenu, la science et l'analyse
L'équipe de machine learning dans le contenu utilise largement Python pour développer des modèles de machine learning qui sont au cœur de la prévision de la taille de l'audience, des vues et d'autres mesures pour tous les contenus.