Jeff Magnusson, manager de l'architecture de la plate-forme de données de Netflix, a présenté leur plate-forme de données en tant que service lors de la conférérence QCon SF 2013. Suite à cette présentation, nous allons essayer d'expliquer de manière plus précise comment la pile de technologie se décline et comment elle aide Netflix dans sa prise de décisions importantes pour le business. Netflix compte plus de 30 millions d'abonnés dans le monde entier. Chaque utilisateur fournit plusieurs types de données lors d'une visite sur le site web de Netflix. Jouer, partager ou rechercher une vidéo sont autant d’événements qui sont enregistrés et analysés. L'heure, la date, la géolocalisation, le matériel utilisé et le navigateur ou encore la manière dont une page défile peuvent aussi être utilisés pour identifier le contexte dans lequel un événement survient et ainsi, placer les utilisateurs dans des catégories. L'entreprise utilise ces données pour améliorer le service de son site web et prendre les décisions liées au business, comme l'identification des futurs investissements.
Les métadonnées de tiers comme Nielsen où les médias sociaux contribuent également au respect des engagements de service et à l'arrivée de nouveaux abonnés sur la plate-forme.
Netflix a été déployé sur le cloud et utilise la plate-forme Hadoop depuis 2009. Les infrastructures clés qu'ils utilisent comme socle pour le Big Data sont :
- Amazon S3 : la technologie d'Amazon S3 est utilisée pour capturer des milliards d’événements à partir de divers composants utilisant Ursula, un outil de pipeline de données interne. S3 est utilisé en tant que source de référence pour les clusters du service Elastic Map Reduce (EMR) qui exécutent des processus Hadoop.
- Hadoop : Apache Hadoop est la librairie de référence concernant les calculs distribués. Hadoop est déployée dans des clusters du service Elastic Map Reduce (EMR) sur Amazon Web Services (AWS) et n'utilise pas Hadoop Distributed File System (HDFS) pour le stockage des nœuds, mais exploite le stockage par groupes (cluster) de S3. Ceci est contre-intuitif, car on peut provoquer un mouvement des données depuis S3 vers les nœuds du service EMR, en allant à l'encontre du principe d'exploitation d'Hadoop de localité des données, mais d'un autre côté, cela signifie que S3 peut être considérée comme la source de référence et que les clusters de l'EMR deviennent durables et redimensionnables puisque le service s'adapte en quasi temps réel.
- Hive : Hive est utilisé par Netflix pour les requêtes "ad hoc" et l’agrégation légère. Pig est utilisé en parallèle pour les ETL et les flux de données plus complexes. Sa puissance dans le transfert de données est également exploitée pour relier plusieurs opérations complexes.
- Genie : Genie, une technologie de PaaS Hadoop, est utilisée pour soumettre des tâches à l'EMR. Genie fournit une API REST-ful qui permet aux développeurs de ne pas avoir à gérer le fait de faire tourner ou de maintenir un cluster Hadoop. Genie peut être réutilisé depuis son répertoire GitHub.
- Franklin : Franklin, une API de métadonnées, peut être utilisée pour extraire des informations à partir de RDS, Redshift, Cassandra, Teradata ou à partir de sources S3. Cassandra est utilisée pour la collecte de données en ligne depuis 2011 par Netflix, après que la migration depuis un data center Oracle vers un cloud AWS a été un succès. Teradata est plutôt utilisé au sein d'un data center mais la tendance va changer avec l'annonce de Teradata concernant la signature de Netflix pour le Cloud Teradata.
- Forklift: Forklift peut être utilisé pour déplacer des données d'analyse vers différentes banques de données. Les destinations sources ou finales peuvent être Hive, RDBMS, S3, R et d'autres encore.
- Sting : Sting est ensuite utilisé pour visualiser les résultats des tâches de Genie par le biais d'un mode ad hoc. Sting fournit un second temps de réponse pour les opérations communes sous OLAP comme les opérations de tri en gardant l'ensemble des données en mémoire.
- Lipstick : Lipstick est utilisé pour permettre aux utilisateurs de visualiser le flux de données des tâches exécutées par Pig et leur avancée. Grâce à cela, les tâches en suspend, les données de sorties erronées ou les tâches ayant échoué peuvent être détectées rapidement et corrigées facilement.
En plus de tous ces outils, Netflix en a développé d'autres, comme Curator. Curator est un ensemble de librairies Java qui facilite l'utilisation d'Apache Zookeeper. Créer des clients robustes devient un jeu d'enfant avec Curator et permet d'éviter plusieurs problèmes comme l'appel des clients à risque en supposant faux le succès d'une requête.
Un rôle très important de toutes les technologies faisant partie de l'ensemble décrit ci-dessus est d'assurer le système de recommandations de Netflix. Les résultats de ces recommandations gèrent environ 75% des vidéos vues de Netflix. Une des recommandations du système est permise par l'utilisation des chaînes de Markov qui permet de modéliser les vidéos comme des états et de calculer la probabilité de transition entre ces états. Dans un SGBDR, cela serait une procédure stockée, une fois par semaine, comme une copie lourde (en terme de stockage) ne pouvant pas évoluée. En utilisant Hadoop, cela évolue de manière intrinsèque, sans avoir besoin de copier des données et l'utilisation de Pig ou de Java Map Reduce rend la gestion des procédures stockées plus simple.
Une chaîne de Markov décrit un processus stochastique discret sur un ensemble d'états en fonction d'une matrice de probabilités de transitions d'un état à l'autre. En modélisant chaque vidéo comme un nœud à l'aide d'un double passage à travers les tâches de la Map Reduce, Netflix est capable de calculer les probabilités de transitions d'un nœud à l'autre, ce qui correspond aux recommandations. Les valeurs futures ne dépendant que des valeurs actuelles, il est tout indiqué d'utiliser la Map Reduce, n'ayant pas besoin de stocker les états des nœuds Hadoop.
Pour son système de recommandations, Netflix ne prend pas uniquement en compte ce paramètre. Le contexte est également une piste intéressante a exploiter. Un utilisateur peut choisir des contenus différents en fonction de l'interface, selon qu'il est chez lui ou en vacances, ou en fonction de l'heure ou du jour de la semaine. C'est un problème que même Netflix n'a pas encore réussi à résoudre, plusieurs défis concernant les préférences en fonction du contexte devant être en corrélation.
L'architecture Big Data de Netflix n'est pas une chose qui peut être reproduite aisément en entreprise ou même chez un concurrent. Cependant, plusieurs socles sont open-source et disponibles depuis leurs comptes GitHub. Ils forment une bonne base pour ceux qui souhaitent développer une architecture Big Data. Et comme Netflix l'a montré, une stratégie Big Data doit être réfléchie en amont et être soigneusement exécutée et maintenue en continu.