Hace 1 año | Por cirudinezidane a tinyclouds.org
Publicado hace 1 año por cirudinezidane a tinyclouds.org

El creador de Node.js y Deno, Ryan Dahl, cree que la mayoría de los servicios web podrían simplificarse utilizando contenedores JavaScript, en lugar de contenedores Linux. La universalidad de JavaScript está propiciando la aparición de una nueva abstracción de tipo contenedor, dijo. Los contenedores de Linux no van por ahí, pero pensar en términos de contenedores de JavaScript podría simplificar muchos servicios web. Dahl también señaló que Docker popularizó el uso de contenedores Linux, con una virtualización a nivel de sistema operativo.

Comentarios

T

Hay a quien le gusta ver el mundo arder.

ed25519

#2 total

T

El año de javascript en los contenedores lol lol

D

#3 "de basura"

T

#4 ya lo ha puesto #6

D

Javascript en contenedores... no lo pillo. Esos contenedores dónde estarían?

#4 En cualquier versión escogida de Node o Deno me imagino yo.

cirudinezidane

Traducción Automática
La mayoría de los programas de servidor son programas de Linux. Consisten en un sistema de archivos, algunos archivos ejecutables, tal vez algunas bibliotecas compartidas, probablemente interactúan con el software del sistema como systemd o nsswitch.

Docker popularizó el uso de los contenedores de Linux; la virtualización a nivel de sistema operativo que proporciona un mecanismo maravilloso para la distribución de software de servidor. Cada imagen de contenedor es un paquete de software libre de dependencias y listo para ser ejecutado.

Debido a que el software de servidor a menudo depende de muchos recursos del sistema y de la configuración, su despliegue ha sido un reto en el pasado. Los contenedores de Linux lo han solucionado.

Un entorno hermético similar puede encontrarse en el JavaScript del navegador, aunque a un nivel de abstracción más alto. Zack Bloom en Cloudflare nos motivó allá por 2018 a preguntarnos si el propio JavaScript puede proporcionar un nuevo tipo de contenedor de servidor autónomo.

Cuanto más podamos eliminar las abstracciones innecesarias, más nos acercaremos al concepto de "La red es el ordenador". Cloudflare Workers es esencialmente una implementación de este concepto en la red de Cloudflare. Deno Deploy es una nueva implementación de esta idea (en la red GCP).

En este post describiré mi opinión sobre los contenedores de JavaScript y especularé sobre cómo se desarrollará esta tecnología en los próximos años.

El lenguaje de scripting universal
La tecnología es difícil de predecir, pero ciertamente la World Wide Web estará aquí en 10 años. Cada día que pasa se ve más y más infraestructura humana unida a través de aplicaciones web: la web se está comiendo el mundo. Si crees que la web estará aquí dentro de 10 años, entonces ciertamente los estándares que conforman la web - HTTP, HTML, CSS, JavaScript - estarán aquí. Por lo tanto, estoy seguro de que JavaScript seguirá desarrollándose y mejorando.

La web es el medio fundamental de la información humana. JavaScript se diferencia de otros lenguajes de programación en que está profundamente ligado a esta infraestructura.

Los lenguajes de scripting tienen mucho sentido para muchos problemas del lado del servidor. La mayor parte del código que se escribe no está ligado a la computación, sino a la productividad: la velocidad a la que se puede escribir y el coste monetario de los desarrolladores. Los lenguajes de scripting permiten escribir la lógica de negocio de forma más rápida y barata. Los lenguajes de script (Python, Ruby, Lua, Shell, Perl, Smalltalk, JavaScript) son bastante similares. Hay diferencias en la sintaxis y las API, pero no hay mucho más que contrastar. Cualquiera que haya pasado tiempo en Rust o C entiende cómo se sienten los lenguajes de scripting.

Resumiendo: los lenguajes de scripting son útiles, pero todos son más o menos lo mismo, de ellos JavaScript es de lejos el más utilizado y el que está preparado para el futuro. Por lo tanto, tiene sentido pensar en JavaScript como el lenguaje de scripting universal.

Shell : Ejecutables :: JavaScript : WebAssembly
Está surgiendo un nuevo contenedor de nivel superior para el software de servidor: el propio sandbox de JavaScript.

Este contenedor no pretende abordar la misma amplitud de problemas que los contenedores de Linux. Su aparición es el resultado de su simplicidad. Reduce al mínimo el boilerplate de la lógica de negocio de los servicios web. Comparte conceptos con el navegador y reduce los conceptos que el programador necesita conocer. (Ejemplo: al escribir un servicio web, es muy probable que cualquier configuración de systemd sea solo boilerplate innecesario).

Todo ingeniero web ya conoce las APIs del navegador de JavaScript. Debido a que la abstracción del contenedor JS se construye sobre las mismas APIs del navegador, la cantidad total de experiencia que el ingeniero necesita se reduce. La universalidad de Javascript reduce la complejidad.

Shell es el lenguaje de scripting interpretado que se utiliza para invocar programas Unix. Puede hacer condicionales, bucles, tiene variables... pero lamentablemente es limitado y difícil de programar. La verdadera funcionalidad queda relegada a los ejecutables.

En esta emergente capa de abstracción del servidor, JavaScript toma el lugar de Shell. Es bastante más adecuado para el scripting que Bash o Zsh. En lugar de invocar ejecutables de Linux, como hace Shell, el sandbox de JavaScript puede invocar a Wasm. Si tienes algún trabajo pesado de computación, como el redimensionamiento de imágenes, probablemente tenga sentido usar Wasm en lugar de escribirlo en JS. Al igual que no escribirías el código de redimensionamiento de imágenes en bash, sino que invocarías imagemagick.

La Estrella del Norte
El futuro de los lenguajes de scripting es el JavaScript del navegador. El error fundamental de Node.js fue desviarse del navegador a medida que se estandarizaban las nuevas API, inventando demasiado. En 2010, no teníamos módulos ES, pero una vez que se estandarizó, debería haberse introducido en Node. Lo mismo puede decirse de las promesas, async/await, fetch, streams, y más. Las partes no estándar anticuadas como CommonJS require, package.json, node_modules, NPM, el objeto de proceso global serán finalmente estandarizados y añadidos al navegador o suplantados por sustitutos alineados con la web.

Este contenedor de nivel superior aún no se ha estandarizado. No sabemos muy bien cómo resultará todo esto. Por el momento Cloudflare Workers y Deno Deploy utilizan la API FetchEvent:

addEventListener("fetch", (event) => ">);
Es posible que se pueda encontrar una interfaz mejor.

Conclusión
JavaScript es el lenguaje de scripting universal. Debido a la universalidad de JavaScript está surgiendo una nueva abstracción tipo contenedor que simplifica los servidores.

No estoy afirmando que los contenedores de Linux vayan a desaparecer. Ese nivel de abstracción siempre será útil. Sólo que es de bajo nivel para gran parte de la "lógica de negocio" que la gente escribe. Cuando estás construyendo un sitio web, cosas como la configuración de systemd son una rutina.

Quizá la mayoría de los "servicios web" puedan simplificarse pensando en términos de contenedores JavaScript, en lugar de contenedores Linux.

En Deno estamos explorando estas ideas; estamos tratando de simplificar radicalmente la abstracción del servidor. Estamos contratando si esto le parece interesante.

automatiZacion

Edit