Un nouveau unikernel modulaire permet une adaptation extrême de votre système d’exploitation aux besoins de votre application. Une preuve de concept, basée sur Unikraft, un sous-projet Xen Project, montre jusqu’à 50% d’amélioration de l’efficacité par rapport à Linux standard sur AWS EC2.
Le cloud computing a révolutionné notre façon de penser l’infrastructure informatique: un autre serveur Web? Plus de capacité de base de données? Des ressources pour votre cas d’utilisation de l’intelligence artificielle? Il suffit de lancer une autre instance et vous êtes prêt à partir. La virtualisation et les conteneurs nous ont permis de déployer des services sans nous soucier des contraintes matérielles physiques. En conséquence, la plupart des entreprises dépendent fortement des micro-services, qui sont des serveurs individuels hautement spécialisés pour effectuer une tâche spécifique.
Le problème est que les systèmes d’exploitation à usage général tels que Linux ont du mal à suivre le rythme de cette tendance croissante à la spécialisation. Le statu quo est que la plupart des microservices sont construits sur un noyau et une distribution Linux complets. C’est comme si vous vouliez permettre des voyages aériens individuels avec un seul siège passager par avion tout en conservant les puissants moteurs d’un jumbo jet. Le résultat de la prolifération des systèmes d’exploitation à usage général dans le cloud sont des instances gonflées, qui se régalent de mémoire et de puissance de traitement tout en brûlant inutilement de l’énergie électrique ainsi que votre budget d’infrastructure.
Malgré cela, mettre au régime Linux et d’autres systèmes d’exploitation monolithiques est loin d’être anodin. La suppression des composants inutiles du noyau Linux est une tâche fastidieuse en raison des interdépendances entre les sous-systèmes du noyau: La figure 1 ci-dessus illustre un grand nombre de ces interdépendances une ligne indique une dépendance et un nombre bleu la quantité de ces dépendances entre deux composants .
Une alternative est de construire ce que l’on appelle unikernels, des images adaptées à des applications spécifiques et souvent construites sur des noyaux beaucoup plus petits. Les Unikernels ont montré des chiffres très prometteurs et de performances (par exemple, des temps de démarrage de quelques millisecondes, une consommation de mémoire lors de l’exécution d’applications standard telles que nginx de seulement quelques Mo, et un débit élevé). Cependant, leur talon d’Achille a été qu’ils nécessitent souvent un travail d’expert important pour les créer et qu’au moins une partie du travail doit être refaite pour chaque application supplémentaire. Ces problèmes, associés au fait que la plupart des projets unikernel ne disposent pas d’un ensemble complet d’outils et d’écosystèmes (par exemple, intégration de Kubernetes, outils de débogage et de surveillance, etc.), résultant en des instances Linux de 1 Go pour des tâches qui pourraient être aussi simples que fournir des pages Web statiques.
Unikraft: une voie révolutionnaire à suivre
Unikraft a pour mission de changer cela. Contrairement aux autres projets unikernel, Unikraft, un sous-projet Xen Project, a développé une base de code commune unikernel véritablement modulaire à partir de laquelle la construction de noyaux (uni) sur mesure est plus rapide que par le passé.
«Sans Unikraft, vous devez choisir entre des projets unikernel qui ne fonctionnent que pour un langage ou une application spécifique, ou des projets qui visent à prendre en charge POSIX mais le font tout en sacrifiant les performances et en allant à l’encontre de l’objectif d’utiliser des unikernels en premier lieu», déclare Felipe Huici, l’un des principaux contributeurs de l’équipe Unikraft. «
Unikraft vise à exécuter un large éventail d’applications et de langages prêts à l’emploi (C / C ++, Python, Go, Ruby, Lua et WASM sont pris en charge, avec Rust et Java sur le chemin), mais permet toujours une personnalisation facile et même élimination des parties de noyau inutiles; De plus, il fournit un ensemble d’API riches et axées sur les performances qui permettent une personnalisation plus poussée en connectant l’application à différents niveaux de la pile pour des performances encore plus élevées. »
Un exemple de ces API est présenté dans la figure 2 ci-dessous.
Unikraft prend déjà en charge plus de 130 appels système en termes de compatibilité POSIX, et le nombre ne cesse d’augmenter. Bien que cela soit certainement inférieur aux 300+ pris en charge par Linux, il s’avère que seul un sous-ensemble de ceux-ci est nécessaire pour exécuter la plupart des principales applications serveur. Ceci, et les efforts continus pour prendre en charge les frameworks standard tels que Kubernetes et Prometheus font d’Unikraft une proposition séduisante et marquent l’arrivée de l’âge des unikernels dans le courant dominant.
Unikraft passe au cloud
Mais qu’en est-il vraiment pour les utilisateurs finaux? Pour démontrer la puissance et l’efficacité d’Unikraft, l’équipe a créé une image expérimentale Unikraft AWS EC2 exécutant nginx, actuellement le serveur Web le plus populaire au monde. «Nous avons construit une image nginx Unikraft et l’avons comparée à un ngnix fonctionnant sur une image Debian standard pour comparer les performances des deux lors de la diffusion de pages Web statiques. Nous avons été plus que satisfaits des résultats », déclare Huici. «Sur Unikraft, nginx pouvait gérer deux fois plus de requêtes par seconde que l’instance Debian. Ou vous pouvez prendre une instance AWS EC2 moins performante à moitié prix et faire le même travail. De plus, Unikraft avait besoin d’environ un sixième de la quantité de mémoire pour fonctionner ». Les résultats de débit peuvent être vus dans la figure 3 ci-dessous.
Jusqu’à présent, ce n’est qu’une preuve de concept, mais Huici et l’équipe d’Unikraft avancent rapidement. «Nous travaillons actuellement sur un système pour rendre le processus de création d’une image Unikraft aussi simple que les achats en ligne» – cela inclut l’analyse des applications qui sont censées fonctionner dessus et la fourniture d’un système d’exploitation prêt à l’emploi qui a tout ce dont un cas d’utilisation spécifique a besoin, et rien de plus. «Pourquoi gaspiller de l’argent, des ressources et polluer l’environnement en exécutant des logiciels en arrière-plan qui ne sont pas nécessaires pour un service spécifique?»
À propos de l’auteur: Simon Kuenzer est chef de projet et mainteneur d’Unikraft, qui fait partie du projet Xen de la Linux Foundation.