Ouvert en France le 15 septembre dernier, le service de vidéo à la demande Netflix dispose d'une infrastructure technique reposant sur de nombreuses technologies Open Source. Dont la base de données NoSQL DataStax. Depuis sa création aux Etats-Unis il y a 7 ans , Netflix est passé de quelques dizaines de milliers de membres regardant occasionnellement quelques vidéos à plusieurs millions visionnant plus de 2 milliards d'heures de vidéos chaque mois. A chaque fois qu'un utilisateur commence à regarder un film ou une série TV, une « vue » est créée dans les systèmes de données de Netflix, et avec elle une collection d'événements venant alimenter les algorithmes de recommandations permettant aux membres de trouver un titre pouvant correspondre à leurs attentes, et fournissant de précieux indicateurs pour mesurer l'engagement des membres et prendre des décisions en termes de contenus et de produits.
Pour répondre à ses besoins de collecte et de traitement des données, Netflix a monté une architecture reposant sur une base de données monolithique qui a fini par montrer ses limites. Grâce à des améliorations progressives depuis 3 ans, le fournisseur a cependant pallié à certaines difficultés sans résoudre la principale qui était, en cas de défaillance d'un noeud, d'assurer la lecture ou l'écriture de l'historique des vues.
Un chantier de plusieurs mois de développement
« Ré-architecturer un système critique pour atteindre un niveau d'une telle ampleur est un problème épineux, nécessitant plusieurs mois de développement, test et de migration depuis la précédente architecture », a indiqué Netflix dans un blog. Pour construire cette nouvelle architecture, le fournisseur a d'ailleurs lancé un appel à candidature pour recruter des talents pouvant l'aider dans son projet gargantuesque.
La prochaine architecture de Netflix reposera sur plusieurs points dont les principaux seront : de privilégier la disponibilité sur la cohérence forte de données en cas de panne, de mettre en place des microservices (collecte, traitement et fourniture de données, délégation de la responsabilité de la gestion d'état et découplage de la communication entre composants en utilisant les signaux envoyés au travers de la file d'attente d'événements). Mais également d'utiliser des technologies de persistance multiple pour atteindre l'objectif de flexibilité et performance dans un contexte accru de complexité, et aussi de recourir à Cassandra et Redis pour traiter de très hauts volumes de données avec une latence faible en écriture.