Nouvelles de l'industrie

Comment Netflix déploie le code

2020-03-03
Par Zef Hemelon 13 juin 2013.

Netflix, le site de streaming de films populaire, se déploie cent fois par jour, sans utiliser Chef ou Puppet, sans service d'assurance qualité et sans ingénieurs de publication. Pour ce faire, Netflix a construit une PaaS (Platform as a Service) interne avancée qui permet à chaque équipe de déployer sa propre partie de l'infrastructure quand elle le souhaite, autant de fois qu'elle le souhaite. Lors de QCon New York 2013, Jeremy Edberg a donné une conférence sur l'infrastructure que Netflix a construite pour prendre en charge ce rythme rapide d'itération au-dessus de l'AWS d'Amazon.



Netflix utilise une architecture orientée services pour implémenter son API, qui gère la plupart des demandes du site (2 milliards de demandes par jour). Dans les coulisses, l'API est séparée en de nombreux services, où chaque service est géré par une équipe, permettant aux équipes de travailler de manière relativement autonome et de décider elles-mêmes quand et à quelle fréquence elles souhaitent déployer de nouveaux logiciels.



Netflix est fortement investi dans DevOps. Les développeurs créent, déploient et exploitent leurs propres clusters de serveurs et sont responsables en cas de problème. En cas d'échec, une session est organisée où la cause profonde du problème est étudiée, et des moyens sont discutés pour éviter des problèmes similaires à l'avenir - similaires aux cinq pourquoi.



Le déploiement chez Netflix est entièrement automatisé. Lorsqu'un service doit être déployé, le développeur envoie d'abord le code dans un référentiel de code source. Le push de code est repris par Jenkins, qui effectue ensuite une construction produisant un package d'application. Ensuite, une nouvelle image VM (AMI) est produite sur la base d'une image de base (contenant une distribution Linux) et d'un logiciel que tous les serveurs Netflix exécutent, y compris une JVM et Tomcat, éventuellement personnalisés par l'équipe. En plus de cette installation de base, le package d'application est installé. À partir de cela, une AMI est produite et enregistrée avec le système.



Pour déployer les images de VM sur son infrastructure, Netflix a construit Asgard. Via l'interface Web Asgard, les images VM peuvent être instanciées pour créer de nouveaux clusters EC2. Chaque cluster comprend au moins 3 instances EC2 pour la redondance, réparties sur plusieurs zones de disponibilité. Lors du déploiement d'une nouvelle version, le cluster exécutant la version précédente continue de fonctionner pendant que la nouvelle version est instanciée. Lorsque la nouvelle version est démarrée et s'est inscrite auprès du registre des services Netflix appelé Eureka, l'équilibreur de charge actionne un commutateur dirigeant tout le trafic vers le nouveau cluster. Le nouveau cluster est surveillé attentivement et continue de fonctionner pendant la nuit. Si tout fonctionne correctement, l'ancien cluster est détruit. En cas de problème, l'équilibreur de charge est repassé à l'ancien cluster.



L'échec se produit en continu dans l'infrastructure Netflix. Le logiciel doit être capable de gérer le matériel défaillant, la connectivité réseau défaillante et de nombreux autres types de défaillance. Même si l'échec ne se produit pas naturellement, il est provoqué avec force en utilisant l'armée simienne. L'armée simienne se compose d'un certain nombre de "singes" (logiciels) qui introduisent au hasard un échec. Par exemple, le Chaos Monkey arrête les serveurs de manière aléatoire et le Latency Monkey introduit de manière aléatoire la latence dans le réseau. S'assurer que l'échec se produit constamment rend impossible pour l'équipe d'ignorer le problème et crée une culture qui a la résilience aux échecs comme priorité absolue.



De nombreuses parties de l'infrastructure Netflix sont déjà open source et disponibles sur Github. L'objectif de Netflix est de libérer à terme toute son infrastructure pour que d'autres sociétés puissent en bénéficier.

De: https: //www.infoq.com/news/2013/06/netflix/