Ryan Dahls Gedanken zu JavaScript-Containern
(tinyclouds.org)- Docker hat Linux-Container populär gemacht: Virtualisierung auf OS-Ebene erleichtert die Software-Bereitstellung
- Cloudflare Workers und Deno Deploy setzen das Konzept von JS-Containern um (in unterschiedlichen Umgebungen)
- Wie werden sich JS-Container in den kommenden Jahren weiterentwickeln?
Universelle Skriptsprache
- Immer mehr Dinge werden über das Web miteinander verbunden: The web is eating the world
- Das Web ist das grundlegende Medium für Informationen der Menschheit, und JS ist tief in die Web-Infrastruktur eingebunden und daher anders als andere Sprachen
- Skriptsprachen lösen viele serverseitige Probleme und ermöglichen es, Business-Logik schneller und günstiger zu schreiben
- Skriptsprachen sind nützlich und ähneln sich in vieler Hinsicht; JavaScript wird am breitesten eingesetzt und dürfte auch in Zukunft relevant bleiben
- Man kann JavaScript also als universelle Skriptsprache betrachten
Shell : Executables :: JavaScript : WebAssembly
-
Mit der JavaScript-Sandbox entsteht ein neuer High-Level-Container für Server
-
Sie ist nicht dazu gedacht, die Probleme zu lösen, auf die Linux-Container abzielen
-
Sie ist als Ergebnis von Vereinfachung entstanden
→ Minimierung des Boilerplate für die Business-Logik von Webservices
→ Gemeinsame Konzepte mit dem Browser und Minimierung der Konzepte, die Programmierer kennen müssen -
Alle Webentwickler kennen bereits die JavaScript-Browser-APIs
→ Da die Abstraktion von JS-Containern auf denselben Browser-APIs basiert, gibt es weniger Neues zu lernen
→ Die Universalität von JS reduziert die Komplexität -
Die Shell ist eine interpretierende Skriptsprache zum Ausführen von Unix-Programmen
→ Sie hat Bedingungen, Schleifen und Variablen, ist aber eingeschränkt und daher schwer zum Programmieren geeignet. Die eigentliche Funktionalität wird von ausführbaren Programmen bereitgestellt -
In dieser neuen serverseitigen Abstraktionsschicht nimmt JS die Rolle der Shell ein
→ Es eignet sich besser zum Skripten als Bash/Zsh, aber so wie die Shell ausführbare Programme aufruft, ruft die JS-Sandbox WASM auf
→ Wenn komplexe Aufgaben wie Bildgrößenanpassung nötig sind, ist es besser, dafür WASM zu verwenden, statt sie in JS zu schreiben
→ So wie man in bash keine Bildgrößenanpassung implementiert, sondern ImageMagick aufruft
The North Star
- Die Zukunft des Skriptens ist Browser-JavaScript
- Der grundlegendste Fehler von Node.js war, dass zu viele Dinge erfunden wurden, die zu weit vom Browser entfernt waren, während neue APIs standardisiert wurden
→ 2010 hatten wir noch keine ES-Module, aber nach der Standardisierung mussten sie in Node übernommen werden
→ Dasselbe galt für Promise, Async/Await, Fetch, Streams und vieles mehr
→ Nicht standardisierte Dinge wie CommonJSrequire,package.json,node_modules,npmund das globaleprocess-Objekt werden letztlich entweder standardisiert und dem Browser hinzugefügt oder durch etwas anderes auf Web-Basis ersetzt - High-Level-Container sind noch nicht standardisiert, und es ist noch unklar, wie sich das alles entwickeln wird
- Derzeit verwenden Cloudflare Workers und Deno Deploy die FetchEvent-API, aber möglicherweise findet sich noch eine bessere Schnittstelle
Fazit
- JavaScript ist eine universelle Skriptsprache
- Durch die Universalität von JavaScript entstehen neue containerartige Abstraktionen, die Server vereinfachen
- Das heißt nicht, dass Linux-Container verschwinden. Diese Abstraktionsebene wird weiterhin nützlich sein
→ Für viel der von Menschen geschriebenen „Business-Logik“ ist sie jedoch eine etwas zu Low-Level-Abstraktion
→ Beim Aufbau einer Website sind Dinge wiesystemd-Konfiguration Boilerplate - Viele „Webservices“ lassen sich vermutlich vereinfachen, wenn man sie eher aus der Perspektive von JavaScript-Containern als von Linux-Containern betrachtet
- Wir erforschen diese Idee derzeit bei Deno
→ mit dem Ziel, Server-Abstraktionen grundlegend zu vereinfachen
2 Kommentare
Es gibt jetzt einen übersetzten Artikel.
https://medium.com/@yujso66/…
Wenn ich es auf meine Weise zusammenfasse:
So ließe es sich vielleicht zusammenfassen.
Weitere Links zum besseren Verständnis