Les Unikernels, cette révolution qui ne viendra sans doute jamais.

Oct 16, 2023 min read

C’est quoi, un unikernel ?

Avez-vous déjà entendu parler des Unikernels ? Leur nom vient du “kernel”, le “noyau” du système d’exploitation. Le noyau c’est en résumé ce qui fait le lien entre l’ordinateur, cet objet fait de plastique et de métal, vous qui l’utilisez, et les applications qui tournent dessus. C’est le coeur du système d’exploitation.

L’unikernel ne s’installe pas sur un serveur physique mais sur un hyperviseur qui héberge des VM, des machines virtuelles.

La virtualisation

Aujourd’hui, il existe plusieurs types de virtualisation. Nous allons nous intéresser aux systèmes de virtualisations complètes de système d’exploitation, comme vmware, xen ou proxmox. Pour simplifier, il s’agit d’un système d’exploitation installé sur une machine “bare metal” (machine physique) dont le but est de fournir un environnement système et réseau dans lequel vont s’exécuter des machines virtuelles. Ces machines virtuelles sont des programmes qui se comportent comme des machines physiques sur lesquelles on installe un système d’exploitation et des applications.

Les unikernels font partie de ces systèmes d’exploitation que l’on peut choisir pour nos machines virtuelles, comme on pourrait choisir windows ou linux, par exemple. La différence qui les caractérise est une taille limitée et une spécialisation importante pour ne faire tourner que des programmes/frameworks spécifiques. Ils sont une promesse de simplification du système d’exploitation dans le but d’avoir plus de performance et de sécurité.

L’unikernel, associé à l’application, forment la machine virtuelle complète. Le système d’exploitation classique est quant à lui destiné à faire tourner de nombreuses applications.

Habituellement, quand on a une application à faire tourner sur un serveur, on le fait tourner sur un système d’exploitation complet. Mais ce système est prêt pour tous les cas de figure possibles. On démarre dans les faits une usine à gaz bien trop complexe pour notre petit besoin. Cette usine à gaz nécessite des compétences importantes que n’ont pas la plupart des développeurs.

Une sécurité accrue

Qui dit “usine à gaz”, dit également failles de sécurité plus nombreuses : pour résumer, surveiller la frontière entre les Etats-unis et le Mexique est bien plus complexe que de surveiller la frontière monégasque. Les Unikernels, plus simples, offrent une surface d’attaque bien moindre qu’un système complet.

En tous cas, c’est ce qui nous est promis.

A mon sens, ils sont aussi beaucoup plus récents dans leur concept et ne permettent pas de bénéficier de l’expérience de millions de serveurs tournant depuis des dizaines d’années. Il est donc difficile de se prononcer sur la sécurité globale.

Qu’en est-il de l’application ? L’unikernel est-il capable de rattraper les failles que l’application amène ?

Il faut le voir à l’usage.

Des performances hallucinantes

Le deuxième point important des unikernels est le fait qu’ils ne chargent en mémoire que ce qui est immédiatement nécessaire à l’application. Exit les librairies système inutiles et la prise en charge de tout un tas de cas de figure que nous ne rencontrerons jamais avec notre application.

Il en résulte une trace mémoire quasi nulle. Certains unikernels donnent des chiffres de l’ordre de 5Mo, ce qui est ridiculement faible, les systèmes classiques pouvant utiliser plusieurs Go de mémoire vive sans la moindre application tournant dessus.

En plus de n’utiliser que très peu de ressources, ils les chargent vite : Le démarrage d’un unikernel ne prend que quelques millisecondes, alors qu’un système d’exploitation complet peut démarrer en plusieurs minutes.

Unikernels vs Containers: An In-Depth Benchmarking Study in the context of Microservice Applications de l’université de Ghent, en Belgique

Les graphes ci-dessus donnent des performances comparables entre les unikernels en terme de démarrage, mais des capacités moindre en terme de requètes par secondes. Il existe cependant de nombreux cas de figure, et les résultats peuvent être sensiblement différents selon la techno choisie ou le type d’unikernel.

L’intérêt des unikernels sur les cloud publics

Le principal intérêt des unikernels consiste dans le fait de pouvoir déployer très rapidement des applications packagées sur les clouds publics (amazon, azure, GCP, etc…) tout en profitant des services qu’ils fournissent autour des machines virtuelles, comme les load-balancers, les réseaux virtuels, la métrologie, les bases de données as a service, etc….

Quand les ressources coûtent cher, il est intéressant de pouvoir s’appuyer sur des solutions dont l’écrasante majorité des capacités de traitement sont dédiées à l’application et non à l’environnement à mettre en place autour pour les faire tourner.

La rapidité de démarrage des unikernels assure également la capacité de scaling de l’infrastructure, chaque pas de montée en charge étant peu coûteux et extrêmement rapide.

Ne vois-tu rien venir ?

Malheureusement, aujourd’hui, tout ceci ne reste qu’hypothétique.

J’entends parler depuis 2014 des unikernels, mais n’ai toujours pas vu d’application efficace du concept.

La recherche du terme unikernel sur google dénote également un manque de réalité de leur utilisation :

On voit des pics fin 2015 et début 2016

Après un pic fin 2015 et début 2016, on assiste à une perte d’intérêt du public pour le sujet, qui tombe progressivement dans l’oubli.

En conclusion

Parti comme un concept plein de bonne idées, mais demandant d’énormes développements et tests, les unikernels n’ont jamais réussi à atteindre le niveau nécessaire à leur entrée en production.

La multiplication des solutions de virtualisation, via des hyperviseurs ou des conteneurs, fait que la place a été très petite pour le développement d’un nouveau type de virtualisation. Les ressources furent trop faibles pour permettre l’arrivée des unikernels.

A mon humble avis, l’étoffement progressif des solutions autour de docker et la mainmise de longue date des hyperviseurs lourds sur une partie de l’industrie informatique ont tué dans l’oeuf les solutions alternatives émergentes n’apportant pas un gain spectaculaire en terme de maintenabilité, de sécurité ou de coût.

les unikernels ont la faiblesse de devoir avoir pour socle des hyperviseurs lourds, sans pour autant avoir la simplicité d’utilisation que peut avoir docker.

Mais peut-on encore espérer pouvoir utiliser des unikernels en production, notamment dans les clouds publics où ils ont un intérêt certains ?

Non. Je ne miserai pas dessus pour l’avenir, les projets mourant un par un ces dernières années. Ce fût une belle idée, mais qui semble rejoindre le cimetière des bonnes idées qui n’arriveront jamais à maturité.

Sources :

Sur les performances : Unikernels vs Containers: An In-Depth Benchmarking Study in thecontext of Microservice Applications

-|