À propos de la hype serverless

À propos de la hype serverless

C'est un peu le buzz-word du moment, on le trouve partout et il revient régulièrement dans les discutions, mais c'est quoi au juste le serverless ? Avant d'être un ensemble de librairies, c'est surtout une manière de gérer ses ressources dynamiquement en se basant sur leur usage et non pas sur des machines pré payés (serveur dédié,VM...). On retrouve donc un modèle ou le coup d'usage est défini en fonction du temps d'utilisation CPU et non en fonction d'un abonnement mensuel. Grossièrement, si vous utilisez 5s de CPU, vous payez les 5s.

FaaS

Ce type d'architecture système est principalement centré autour de la FaaS pour Function as a Service soit fonction en tant que service. Ces fonctions sont sans état, c'est-à-dire qu'elle ne récupère pas l'état de la précédente exécution, il est donc très simple de les répliquer à l'infini sur des machines différentes. Bien que les implémentations différent entre les solutions existantes on retrouve les vecteurs communs suivants :

  • Une fonction contiens un algorithme,
  • Une fonction prend un évènement en entrée,
  • Cette evènnement contiens des paramètres fournis par l'utilisateur,
  • L'algorithme produit un résultat.

À chaque invocation, un évènement est enregistré auprès du service de gestion de la fonction. Ce service vas déclencher le déploiement du code de la fonction sur une machine de traitement disponible. L'algorithme est ensuite exécuté et retourne un résultat qui est retourné à l'appelant. Le contexte d'exécution ainsi que le code est ensuite supprimé de la machine de traitement.

En théorie, si la fonction est invoquée 10 000 fois en simultané, 10 000 évènements seront lancés, son code sera donc déployé sur 10 000 machines, exécuté, puis 10 000 résultats serons transmis.

En pratique des limites sont misent en place et une file d'attente est créée, les évènements sont traités les uns à la suite des autres afin de traiter la file. Ce service est facturé au temps d'exécution et au CPU choisis et différentes optimisations (temps d'exécution maximum, nombre d'exécutions parallèles...) peuvent êtres mise en place.

Services

Il existe aujourd'hui un bon nombre de services permettant ce type d'approche. Parmi eux, on retrouve les principaux fournisseurs de cloud. AWS avec Lambda, Google avec Cloud Function, Microsoft avec Azure Functions, IBM avec OpenWhisk.

Tous proposent des tarifs peu élevés et une qualité de service à la hauteur de la fiabilité du fournisseur. Tous ont des intégrations pour les principaux langages du marché. On retrouve donc partout, JavaScript (node.JS v8.10), C# (dotnet 2.0 ou plus chez Azure), Java (Java 8), Python (2.7).

Et si vous n'aimez pas trop donner votre code à un prestataire cloud ou pour tout besoin particulier, vous pouvez compter sur la communauté OpenSource pour penser à une solution. OpenFaaS est une solution libre basée sur docker qui utilise un Docker Swarm ou Kubernetes pour assurer ce type de services.

Conclusions

J'ai fais le choix de ne pas parler des base de données serverless dans cet article, j'en reparlerai probablement plus tard, mais sachez qu'elles existent tant pour les données de type document que relationnelle.

Donc pourquoi cette hype ? Je pense que cet attrait pour le serverless vient de sa capacité à répondre à deux besoins.

Premièrement, que cette technologie réalise une abstraction complète de la machine et de son contexte d'exécution. Seul le code devient important. Cela permet de fait de réduire les frais de gestion d'un parc de machine tout en permettant un passage à l'échelle naturel des services concernés.

Et deuxièmement, par la mise à disposition d'outils bien conçues avec des interfaces simples et de qualité. Proposés en tant que service, ils s'intègrent simplement architectures plus larges. Ils bénéficient aussi d'un coût d'exploitation moindre, dépendant complètement de l'utilisation.

Je pense aussi que les tendances micro-services et functional programming y sont pour quelque chose.