Pourquoi j’ai écrit un livre sur BEAM (la VM d’Erlang)
(happihacking.com)- En maintenant les systèmes critiques de Klarna, j’ai vécu des incidents bien réels où 15 millisecondes d’arrêt de BEAM provoquaient des pannes de paiement massives et des interventions d’urgence
- J’ai écrit ce livre pendant 10 ans afin de créer une référence fiable sur BEAM
- Au cours de l’écriture, j’ai traversé des frustrations et des relances répétées : changement d’éditeur, problèmes techniques, multiples refontes de structure
- Après le passage en open source, les retours de la communauté, la participation, l’augmentation du nombre d’étoiles et les encouragements ont joué un rôle de motivation durable
- Le contenu se concentre sur la structure et le fonctionnement de la VM BEAM, avec une approche réellement utile pour les ingénieurs de terrain
Motivation pour écrire un livre sur BEAM
Post-mortems, café et 10 ans d’obsession
- En exploitant le système de paiement central de Klarna, j’ai vécu à plusieurs reprises des situations où un arrêt de seulement 15 millisecondes de BEAM entraînait des millions d’échecs de paiement, des réunions d’urgence en pleine nuit, jusqu’à des appels du CEO
- L’absence de ressources permettant de résoudre rapidement ce type de crise a toujours été frustrante, et c’est avec l’espoir que l’ingénieur suivant puisse aller plus vite que j’ai écrit The BEAM Book
Les débuts de l’écriture
Commencement et découragement
- En octobre 2012, le projet a démarré avec un simple fichier DocBook et de grandes ambitions
- Pendant deux semaines, les commits ont surtout porté sur la structure et les mises à jour de métadonnées, avec très peu de contenu réel
- En novembre, je suis passé à AsciiDoc et à des scripts de build personnalisés en pensant finir en six mois, mais les réécritures incessantes et les changements de structure ont fortement ralenti l’avancement
Collaboration avec les éditeurs
- En 2013, j’ai signé un contrat d’édition avec O’Reilly puis migré vers Atlassian Atlas, mais j’ai continué à subir des pertes de fichiers et des problèmes de gestion des chapitres
- L’historique Git est rempli de mécontentement et de corrections structurelles successives
- En mars 2015, j’ai tenté des solutions de fortune, comme forcer une séparation par chapitre uniquement pour faire passer le build
- Deux mois plus tard, le contrat a été résilié discrètement, provoquant à la fois un sentiment d’abattement et de soulagement
- Une deuxième tentative avec Pragmatic Bookshelf a elle aussi été abandonnée après une progression trop lente
Réinitialisation et participation de la communauté
- En janvier 2017, l’ensemble a été transféré vers un nouveau dépôt via un massive commit (6622 fichiers, 1 million de lignes), mais la réécriture est elle aussi restée bloquée
- En mars 2017, j’ai recommencé depuis un dépôt GitHub privé basé sur Asciidoctor, en ne recopiant que les parties nécessaires
- Deux semaines plus tard, le projet est devenu public, et les contributeurs externes se sont immédiatement activés : corrections de typos, ajout de diagrammes, collaboration sur la licence
Les moteurs de motivation sur la durée
- Au fond, le principal moteur était ma curiosité personnelle et mon désir de comprendre le fonctionnement réel de BEAM
- Les retours et suggestions de la communauté ont renforcé ma volonté de continuer, et l’augmentation du nombre d’étoiles sur GitHub a eu un effet de motivation durable
- Des issues d’encouragement comme « Please continue being awesome » ont aussi joué un rôle de soutien psychologique important
- Le fait que le livre soit de plus en plus cité dans des séminaires et conférences liés à Erlang et à BEAM a confirmé son utilité
- Les mentions et partages continus sur Twitter et ailleurs ont également stimulé la poursuite de l’écriture
Structure du livre et lecteurs visés
- Le livre se concentre avant tout sur les éléments qui m’ont semblé indispensables en concevant et en exploitant moi-même de grands systèmes Erlang
- Ordonnanceur et gestion des processus : principes de planification, priorités et équilibrage des processus sous charge réelle
- Mémoire des processus : heap, stack, messages, gestion des binaires et impact sur l’exploitation
- Garbage collection et modèle mémoire : fonctionnement du GC par processus et global, fuites mémoire et structures de référence
- Représentation des données : structure interne de marquage pour les entiers, flottants, tuples, binaires, etc.
- Compilateur et structure interne de la VM : déroulement réel de l’exécution des instructions dans la VM après la compilation
- Tracing et débogage :
dbg,erlang:trace, suivi des messages et des événements, etc. - Tuning des performances : profiling sur du vrai code, analyse des causes de latence, compréhension des reductions
- Architecture système : principes de fonctionnement intégrés d’ERTS, de la VM BEAM et des sous-systèmes
- L’objectif central est d’avoir un impact très concret pour les praticiens Erlang/Elixir en production, en servant de guide de référence fiable à la place de ressources éparpillées
Leçons tirées du processus d’écriture
- La persévérance l’emporte sur le perfectionnisme. Même après deux annulations éditoriales, il vaut mieux arriver à quelque chose que rester dans l’inachevé
- La concentration et la pose de limites sont essentielles. Réserver du temps pour écrire, couper les notifications et gérer son temps strictement sont la vraie source des progrès
- La publication et les retours sont au cœur de l’amélioration qualitative. Relectures externes, encouragements et stimulation régulière ont été d’une grande aide
- La gestion du périmètre est indispensable. En ajustant la portée, certains sujets difficiles (Dirty Scheduler, JIT, etc.) ont été reportés à de futures annexes
- La stratégie d’amélioration itérative après la release est importante. BEAM évolue chaque année, et un dépôt Git vivant permet de continuer à enrichir le contenu
- Se fixer une vraie deadline est une motivation concrète. L’objectif d’imprimer le livre avant l’événement Code Beam Stockholm a aidé à sélectionner l’essentiel
Définir ce qu’est “terminé”
- C’est au moment de tenir la version imprimée entre mes mains que j’ai enfin eu le sentiment que c’était terminé
- Des commits épars se sont matérialisés en un véritable livre, ce qui me permet, pour l’instant, de déclarer le projet achevé
Comment participer
- The BEAM Book 1.0 peut actuellement être acheté en version papier sur Amazon
- Si vous repérez des typos, des améliorations possibles, ou si vous êtes curieux de la structure interne, vous pouvez utiliser le star, fork, issue et pull request du dépôt GitHub
- Les contributeurs seront mentionnés nominativement dans les remerciements
- GitHub: theBeamBook
- Les avis comptant davantage dans l’algorithme, les critiques et commentaires sont aussi vivement encouragés
- Un atelier sur les internals de BEAM centré sur les systèmes en production peut également être proposé ; pour toute demande, écrire à happi@happihacking.com
1 commentaires
Commentaires sur Hacker News
Le dépôt git est disponible ici
J’ai été marqué par la motivation de l’auteur, qui continue de creuser simplement parce qu’il veut vraiment comprendre BEAM. Je pense que c’est ce genre de passion qui produit de superbes résultats. Du coup, achat immédiat. Pour parler de mon expérience, on m’a proposé plusieurs fois d’écrire un livre via des maisons d’édition, mais cela n’a jamais abouti parce que nous ne voulions pas la même chose. Par exemple, je n’avais aucune envie d’écrire une introduction à Java pour des ados de 14 ans, et les éditeurs ne s’intéressaient pas aux sujets que j’aime explorer en profondeur, comme les classloaders. Je me demande comment les autres trouvent l’intersection entre leur passion personnelle et les besoins des lecteurs
Travailler avec BEAM et Erlang/OTP a été l’une de mes meilleures expériences de développement sur l’année écoulée. J’ai utilisé le livre “Programming Erlang: Software for a Concurrent World” de Joe Armstrong, et j’aimerais vraiment le recommander aux débutants. “Designing for Scalability with Erlang/OTP” a aussi bonne réputation, mais je n’ai pas encore commencé. En revanche, en matière de profondeur, ce nouveau livre est de très loin au-dessus. BEAM ressemble vraiment à une technologie extraterrestre laissée par une civilisation antique. Très bon timing pour la sortie de ce livre, je l’ai acheté immédiatement. Je suis admiratif qu’Erik Stenman soit allé au bout après deux annulations de publication
Elixir et BEAM sont mon choix favori pour construire des systèmes orientés réseau ou avec beaucoup de pipelines. Je les ai utilisés tous les jours en production pendant plusieurs années, et même si le choix est plus difficile sur mes projets récents, je continue de suivre l’écosystème de près. Merci pour la publication de ce livre. C’est exactement le genre de livre que j’aurais voulu avoir il y a quelques années quand je faisais du débogage sur de l’Elixir en production. Les ressources existantes étaient soit trop ardues, soit au contraire trop simplistes
On peut trouver des informations sur BEAM (Erlang virtual machine) via ce lien Wikipédia
Je pense que BEAM est l’une des technologies les plus sous-estimées de l’open source. WhatsApp en est un bon exemple. C’est un mystère pour moi qu’Elixir et Erlang ne soient pas plus populaires pour les projets à forte concurrence
J’ai bien aimé l’explication selon laquelle “Erlang Runtime System (ERS)” désigne le runtime Erlang au sens général, tandis que “Erlang RunTime System (ERTS)” désigne spécifiquement l’implémentation d’Ericsson
J’ai acheté le livre immédiatement. On peut le lire gratuitement en ligne, mais je voulais quand même soutenir un peu l’auteur
Je ne travaille pas sur un système massif comme Klarna, donc j’ai du mal à me représenter le sujet, mais je trouve fascinant qu’une latence de 15 ms puisse faire l’objet d’un post-mortem
Je me demande s’il existe des VM similaires à BEAM. Je voudrais savoir si c’est parce que BEAM est tellement excellent qu’il n’a pas de concurrent, ou si c’est simplement parce que c’est très difficile à construire