Menu

Brown Bag Lunch sur Elixir

Par Julien LENORMAND

04.04.2023

À la suite de sa présentation au Snowcamp en janvier dernier, et juste avant de se mettre en route pour le Devoxx France, Maxime Janvier est passé dans nos locaux mardi 4 avril 2023 pour nous donner son talk « Elixir : une potion pour mixer complexité et concurrence en temps réel».

Elixir est un langage créé en 2012, conçu au-dessus de la VM BEAM tout comme Erlang. On connait par exemple la JVM sur laquelle on peut bien sûr exécuter du Java (et autres Clojure, Kotlin, Groovy, Scala, …). Mais la machine virtuelle BEAM offre des primitives pour la concurrence très éloignées de modèle POSIX (process et threads). En effet, venant du monde des télécoms (Ericsson), la VM BEAM met l’accent sur la tolérance aux pannes, la scalabilité et la répartition entre plusieurs machines, sans omettre la performance. C’est dans une direction similaire que Java se dirige avec le projet Loom.

C’est cette robuste et puissante machine virtuelle qui sert de fondation au langage de programmation Elixir. Celui-ci est assez conventionnel, même si fortement inspiré par la programmation fonctionnelle. À part les atomes, ce qui le différencie notamment, c'est qu’il permet de définir des « process » (dans la terminologie BEAM) qui sont très fortement isolés, et qui servent de briques élémentaires pour construire progressivement et de façon fiable des services ou des applications complètes.

Ainsi, au-delà de la syntaxe, Maxime nous a introduit aux bases de l’architecture du langage, les patterns requis pour en exploiter les propriétés (spawn, link et superviseur, loop on receive, …) venant d’OTP. C’était suffisant pour commencer à mettre du code en action.  Les exemples se sont enchaînés jusqu’à ce qu’on ait un Jeu de la vie (Conway) où chaque cellule est un process distinct, coordonnées par un process clock, le tout affiché en temps réel dans une page web grâce au framework Phoenix et notamment son LiveView.


C’était impressionnant de voir comment tout s’assemblait pour donner un résultat impressionnant, mais surtout énormément scalable : il a sans trop de problèmes pu élever la simulation à plus d’un million d’acteurs en parallèle. C’est vraiment là une force, et surtout de le faire avec confiance. Il nous a raconté ses histoires de prod : rarement des problèmes, souvent parce qu’ils ne peuvent pas s’aggraver, et même alors, ils ne peuvent pas faire tomber la prod. Le langage nous force à adopter des patterns efficaces de gestion d’erreur. Ce n’est pas le seul à faire ce témoignage, cela a aussi joué dans le succès par exemple de Whatsapp, Discord ou bien RabbitMQ.

Elixir (et Erlang) avec la machine virtuelle BEAM forme une réponse à notre besoin de construire des systèmes distribués fiables et performants. C’est une approche très différente et assez méconnue. Elle se prête pourtant bien aux architectures modernes, comme de créer une application (monolithe) composée d’une multitude de micro-services, mais sans besoin de broker, de cache, de Redis, etc. puisque la VM s’en charge déjà. Tout cela, associé à ses récents frameworks pour le front-end, offre une productivité intéressante, mais nécessite de changer radicalement d’état d’esprit sur l’architecture et la gestion d’erreur, d’apprendre à « let it crash ».

Finalement, nos applications aujourd’hui, même si leur métier est divers (énergie, finance, sécurité, …), se ressemblent assez par leur structure : des systèmes distribués, performants et résilients. Et c’est exactement ce que l’industrie des télécoms avait besoin et la raison d’être d’Elixir/Erlang/BEAM. C’est une vision que je partage avec Maxime, qui nous a aussi fait quelques recommandations : la thèse fondatrice du concepteur d’Erlang Joe Armstrong « Making reliable distributed systems in the presence of software errors », la conférence 100 years of erlang pour comprendre l’histoire riche de cette plateforme et imaginer son avenir prometteur, et enfin le livre de référence pour débuter Erlang and OTP in action. Après quelques échanges supplémentaires, nous avons laissé partir Maxime pour le Devoxx France.

Encore merci pour ce partage Maxime !

Retour aux articles