Les réflexions de Ryan Dahl sur les conteneurs JavaScript
(tinyclouds.org)- Docker a popularisé les conteneurs Linux : une virtualisation au niveau de l’OS qui facilite le déploiement des logiciels
- Cloudflare Workers et Deno Deploy mettent en œuvre le concept de conteneur JS (dans des environnements différents)
- Comment les conteneurs JS vont-ils évoluer dans les prochaines années ?
Universal Scripting Language
- De plus en plus de choses s’interconnectent sur la base du web : The web is eating the world
- Le web est le support fondamental de l’information humaine, et JS est profondément intégré à l’infrastructure du web, ce qui le distingue des autres langages
- Les langages de script résolvent de nombreux problèmes côté serveur et permettent d’écrire la logique métier plus vite et à moindre coût
- Les langages de script sont utiles, se ressemblent souvent beaucoup, et JavaScript est le plus largement utilisé aujourd’hui tout en restant viable pour l’avenir
- On peut donc considérer JavaScript comme un langage de script universel
Shell : Executables :: JavaScript : WebAssembly
-
Une nouvelle sandbox JavaScript apparaît comme conteneur de plus haut niveau pour les serveurs
-
Elle n’est pas conçue pour résoudre les mêmes problèmes que ceux visés par les conteneurs Linux
-
Elle est apparue comme résultat d’une simplification
→ Minimiser le boilerplate de la logique métier des services web
→ Partager des concepts avec le navigateur et réduire au minimum les notions que les programmeurs doivent connaître -
Tous les ingénieurs web connaissent déjà les API JavaScript du navigateur
→ Comme l’abstraction des conteneurs JS est construite sur les mêmes API de navigateur, il y a moins de choses à apprendre
→ L’universalité de JS réduit la complexité -
Le shell est un langage de script interprété pour exécuter des programmes Unix
→ Il possède des conditions, des boucles et des variables, mais reste limité et difficile à utiliser pour programmer. Les véritables fonctionnalités sont assurées par les exécutables -
Dans cette nouvelle couche d’abstraction serveur, JS prend la place du shell
→ Mieux adapté au scripting que Bash/Zsh, mais tout comme le shell appelle des exécutables, la sandbox JS appelle du WASM
→ Lorsqu’une tâche complexe est nécessaire, comme le redimensionnement d’images, il vaut mieux utiliser WASM que l’écrire en JS
→ De la même manière qu’on ne fait pas de redimensionnement d’image en bash mais qu’on appelle ImageMagick
The North Star
- L’avenir du scripting, c’est le JavaScript du navigateur
- L’erreur la plus fondamentale de Node.js a été d’inventer trop de choses en s’éloignant du navigateur, alors même que de nouvelles API se standardisaient
→ En 2010, nous n’avions même pas les modules ES, mais une fois standardisés, il a fallu les ramener dans Node
→ Cela a aussi été le cas pour Promise, Async/Await, Fetch, Streams et bien d’autres
→ CommonJSrequire,package.json,node_modules,npm, l’objet globalprocess, tous non standard, finiront soit par être standardisés puis ajoutés au navigateur, soit par être remplacés par d’autres éléments fondés sur le web - Les conteneurs de haut niveau ne sont pas encore standardisés, et on ne sait pas encore vraiment comment tout cela va évoluer
- Aujourd’hui, Cloudflare Workers et Deno Deploy utilisent l’API FetchEvent, mais on pourrait trouver une meilleure interface
Conclusion
- JavaScript est un langage de script universel
- Grâce à l’universalité de JavaScript, de nouvelles abstractions de type conteneur apparaissent pour simplifier les serveurs
- Cela ne veut pas dire que les conteneurs Linux vont disparaître. Ce niveau d’abstraction continuera d’être utile
→ Pour une grande partie de la « logique métier » que les gens écrivent, c’est toutefois une abstraction plutôt bas niveau
→ Lorsqu’on construit un site web, des choses comme la configuration desystemdrelèvent du boilerplate - Beaucoup de « services web » pourraient probablement être simplifiés si on les pensait sous l’angle des conteneurs JavaScript plutôt que des conteneurs Linux
- Chez Deno, nous explorons cette idée
→ En essayant de simplifier fondamentalement l’abstraction serveur
2 commentaires
Une traduction est sortie.
https://medium.com/@yujso66/…
Si je devais le résumer à ma façon :
C’est ainsi qu’on pourrait le résumer, non ?
D’autres liens pour aider à la compréhension