Les coulisses techniques de Netflix L'architecture est totalement basée sur les micro-services

La conception logicielle de Netflix se base sur le principe que toute brique du système de production peut tomber en panne à tout moment. Le système privilégie donc la robustesse pour que ces pannes n'affectent pas les abonnés. De ce fait, les ingénieurs ont adopté une architecture totalement composée de micro-services.

Gérer des dizaines de milliers de micro-services demande des outils d'exploitation à la hauteur

Ainsi, les développements sont aussi plus simples à gérer par les équipes, ces micro-services ayant chacun un périmètre fonctionnel très restreint. Autre atout de cette approche, les micro-services peuvent être déployés en grand nombre sur de multiples machines, une couche de persistance assurant load balancing et montée en charge - avec déploiement et arrêt automatisé des services en fonction des besoins.

Revers de la médaille, gérer des dizaines de milliers de micro-services en production demande des outils de gestion de plateforme à la hauteur de l'enjeu. Netflix utilise Asgard et surtout Zuul pour gérer ces myriades de composants. La solution Turbine agrège toutes les données relatives aux performances des micro-services. 

l'architecture en micro-services de netflix met en œuvre de nombreux composants
L'architecture en micro-services de Netflix met en œuvre de nombreux composants open source Netflix OSS, dont Hytrix pour l'authentification, Eureka pour la découverte des services  et Karyon pour l'exécution. © Capture / Netflix

Autre conséquence de ce choix d'architecture, la moindre demande au niveau d'un client Netflix déclenche une cascade de centaines d'appels de micro-services dans l'architecture afin de répondre à la requête émise. Pour que ces centaines d'appels de services aboutissent, Netflix a mis en place plusieurs mécanismes dont Hystrix pour le volet authentification, mais surtout Eureka : un service de découverte des micro-services dans l'architecture Netflix. Répliqué sur chaque zone du cloud de Netflix, c'est lui qui détient toutes les informations sur les micro-services en cours d'exécution, y compris leur état. Eureka sait si une instance est en cours de démarrage, en cours d'arrêt, performante, ou pas. Le routage des appels aux micro-services est assuré par la librairie Ribbon en fonction notamment des données de load balancing. Enfin, au niveau serveur, Karyon est le container d'exécution des micro-services.

La délicate question de la supervision de la sécurité de l'architecture

Pour surveiller la sécurité de cette architecture, Netflix a développé un outil, le Security Monkey, qui analyse les configurations de firewall, vérifie la validité des certificats, envoie des alertes lorsque des limites sont atteintes, etc.

Historiquement, Netflix développe beaucoup de ses micro-services en Java, mais ce choix n'est pas exclusif. Ses ingénieurs ont développé la notion de "sidecars", une technique qui permet d'intégrer à cette architecture des composants développés en Python, C++, Ruby on Rails, Node.js et C#. Les équipes projet peuvent ainsi choisir le langage et les librairies qui leurs semblent les plus adaptée au micro-service qu'ils doivent développer sans remettre en cause l'architecture globale.

schémas de l'appel d'api chez netflix.
Schémas de l'appel d'API chez Netflix. © Capture / Netflix