{"id":715,"date":"2025-03-30T20:18:20","date_gmt":"2025-03-30T20:18:20","guid":{"rendered":"https:\/\/cloudlab.urv.cat\/catedracloud\/?p=715"},"modified":"2025-03-30T23:03:43","modified_gmt":"2025-03-30T23:03:43","slug":"webassembly-el-proximo-paso-en-la-evolucion-de-la-conteinarizacion","status":"publish","type":"post","link":"https:\/\/cloudlab.urv.cat\/catedracloud\/2025\/03\/30\/webassembly-el-proximo-paso-en-la-evolucion-de-la-conteinarizacion\/","title":{"rendered":"WebAssembly: \u00bfel pr\u00f3ximo paso en la evoluci\u00f3n de la conteinarizaci\u00f3n?"},"content":{"rendered":"\n<figure class=\"wp-block-pullquote\"><blockquote><p>WebAssembly (Wasm) ha evolucionado significativamente desde su creaci\u00f3n. Originalmente concebido para ser ejecutado en un entorno aislado en el navegador, Wasm soporta ahora un grupo notable de funcionalidades fuera de \u00e9ste, como el acceso a sistemas de ficheros, ejecuci\u00f3n multihilo o un mecanismo de composici\u00f3n.  Uno de los casos de uso que se investigan en la actualidad es la del remplazo de los contenedores por Wasm. <\/p><cite>\u00bfEs esto factible? \u00bfLo ser\u00e1 en el futuro pr\u00f3ximo?<\/cite><\/blockquote><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">La evoluci\u00f3n de WebAssembly y WASI<\/h2>\n\n\n\n<p>Wasm fue originalmente creado como<strong> una alternativa a JavaScript<\/strong> en los navegadores que fuera capaz de ejecutar c\u00f3digo con un <strong>rendimiento cercano al de una aplicaci\u00f3n nativa<\/strong>, es decir, una aplicaci\u00f3n fuera del navegador compilada para una plataforma espec\u00edfica. Con la introducci\u00f3n de WASI las aplicaciones de Wasm pueden ejecutarse fuera del navegador e interactuar con el sistema anfitri\u00f3n. WASI ha pasado por varias versiones, introduciendo nuevas caracter\u00edsticas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Preview 1<\/strong>. Introdujo sistemas de ficheros b\u00e1sicos, variables de entorno, relojes y generaci\u00f3n de n\u00fameros aleatorios.<\/li>\n\n\n\n<li><strong>Preview 2<\/strong>. Introdujo los componentes de Wasm para mejorar la interoperabilidad entre m\u00f3dulos.<\/li>\n<\/ul>\n\n\n\n<p>Al margen de las versiones de WASI, tambi\u00e9n existen implementaciones de hilos en Wasm actualmente incompatibles con la Preview 2 y el modelo de componentes.  A la vista de las funcionalidades implementadas actualmente, queda patente que todav\u00eda queda un largo camino por recorrer, puesto que faltan elementos clave por implementar, como sockets, memoria compartida, funcionalidades avanzadas del sistema de ficheros, etc.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">WebAssembly como alternativa a los contenedores tradicionales<\/h2>\n\n\n\n<p>Wasm presenta una serie de caracter\u00edsticas que han centrado el foco de la investigaci\u00f3n en remplazar los contenedores por entornos de ejecuci\u00f3n de Wasm para desplegar aplicaciones en la nube. En primer lugar, Wasm es <strong>varios \u00f3rdenes de magnitud m\u00e1s r\u00e1pido en iniciar la ejecuci\u00f3n<\/strong> de una aplicaci\u00f3n que los contenedores cl\u00e1sicos (unas mil\u00e9simas de segundo en el caso de Wasm y hasta varios segundos en las aplicaciones containerizadas).  En segundo lugar, Wasm es <strong>m\u00e1s portable<\/strong>, ya que las aplicaciones no son compiladas para una plataforma (arquitectura y sistema operativo) espec\u00edfica, mientras que los contenedores s\u00ed. Finalmente el entorno de ejecuci\u00f3n de Wasm es <strong>considerablemente m\u00e1s ligero<\/strong> que uno basado en contenedores y, de la misma forma, las aplicaciones de Wasm tambi\u00e9n son m\u00e1s ligeras que las im\u00e1genes de contenedores.<\/p>\n\n\n\n<p>A pesar de estas propiedades, Wasm a\u00fan enfrenta una serie de desaf\u00edos.  Por un lado, la <strong>falta de madurez de WASI<\/strong> a\u00fan impide implementar algunas funcionalidades en Wasm, lo que hace que no todas las aplicaciones existentes que se puedan ejecutar en contenedores puedan ser portadas a Wasm. Por el otro,  las dependencias deben ser compiladas y a\u00f1adidas al binario resultante, lo cual dificulta la gesti\u00f3n de dependencias. Adicionalmente, las <strong>dependencias incompatibles<\/strong> con algunas funcionalidades de Wasm y WASI <strong>no pueden ser compiladas<\/strong> directamente a Wasm.  Finalmente, Wasm no implementa<strong> ning\u00fan mecanismo que permita asignar recursos<\/strong> a los m\u00f3dulos en funci\u00f3n de la demanda.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Lo mejor de ambos mundos: Spin y wasmCloud<\/h2>\n\n\n\n<p>En la actualidad ya existen varios sistemas comerciales que utilizan una mezcla de Wasm con sistemas basados en contenedores como Kubernetes. Esta uni\u00f3n de ambas tecnolog\u00edas trata de superar las limitaciones de ambas explotando sus puntos fuertes. Dos de estos ejemplos son <strong>Spin<\/strong> y <strong>wasmCloud<\/strong>, dos sistemas que utilizan Kubernetes para lanzar m\u00e1quinas virtuales de WebAssembly.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Spin<\/strong>. Actualmente Microsoft <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/aks\/use-wasi-node-pools\">Azure<\/a> y <a href=\"https:\/\/www.fermyon.com\/spin\">Fermyon<\/a> ofrecen la ejecuci\u00f3n de aplicaciones Wasm en Kubernetes utilizando Spin. Spin utiliza Kubernetes para gestionar y orquestar las aplicaciones de Wasm, pero remplaza los contenedores dentro de los pods por m\u00e1quinas virtuales de Wasm.<\/li>\n\n\n\n<li><strong>wasmCloud<\/strong>. A diferencia de Spin, wasmCloud no elimina totalmente los contenedores: en lugar de desplegar m\u00e1quinas de Wasm directamente dentro de los pods, lanza contenedores que pueden contener m\u00faltiples instancias de la m\u00e1quina virtual de Wasm. <\/li>\n<\/ul>\n\n\n\n<p>Este tipo de sistemas se benefician de las ventajas de los contenedores (la gesti\u00f3n de dependencias y la gesti\u00f3n de recursos) y de las de Wasm (una mayor portabilidad, un entorno de ejecuci\u00f3n m\u00e1s ligero y tiempos de inicio inferiores).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n<\/h2>\n\n\n\n<p>Aunque WebAssembly fuera del navegador ha avanzado considerablemente con la introducci\u00f3n de WASI, todav\u00eda existen limitaciones que impiden la adopci\u00f3n generalizada de Wasm como remplazo de los contenedores en entornos como el de la nube.  La falta de madurez de WASI junto a la dificultad para gestionar las dependencias que no pueden ser compiladas dificulta la adopci\u00f3n de Wasm. A\u00fan as\u00ed, podemos ver ejemplos en la industria que demuestran el creciente inter\u00e9s por esta nueva tecnolog\u00eda. Podemos concluir que Wasm no est\u00e1 listo todav\u00eda para remplazar los contenedores, pero el entorno de ejecuci\u00f3n del futuro ser\u00e1 probablemente una <strong>mezcla de ambos<\/strong>.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>WebAssembly (Wasm) ha evolucionado significativamente desde su creaci\u00f3n. Originalmente concebido para ser ejecutado en un entorno aislado en el navegador, Wasm soporta ahora un grupo notable de funcionalidades fuera de \u00e9ste, como el acceso a sistemas de ficheros, ejecuci\u00f3n multihilo o un mecanismo de composici\u00f3n. Uno de los casos de uso que se investigan en [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":1172,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_uag_custom_page_level_css":"","_swt_meta_header_display":false,"_swt_meta_footer_display":false,"_swt_meta_site_title_display":false,"_swt_meta_sticky_header":false,"_swt_meta_transparent_header":false,"footnotes":""},"categories":[33],"tags":[],"class_list":["post-715","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-webassembly"],"jetpack_featured_media_url":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/ChatGPT-Image-30-mar-2025-22_16_49.png","uagb_featured_image_src":{"full":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/ChatGPT-Image-30-mar-2025-22_16_49.png",1024,1024,false],"thumbnail":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/ChatGPT-Image-30-mar-2025-22_16_49-150x150.png",150,150,true],"medium":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/ChatGPT-Image-30-mar-2025-22_16_49-300x300.png",300,300,true],"medium_large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/ChatGPT-Image-30-mar-2025-22_16_49-768x768.png",768,768,true],"large":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/ChatGPT-Image-30-mar-2025-22_16_49.png",1024,1024,false],"1536x1536":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/ChatGPT-Image-30-mar-2025-22_16_49.png",1024,1024,false],"2048x2048":["https:\/\/cloudlab.urv.cat\/catedracloud\/wp-content\/uploads\/2025\/03\/ChatGPT-Image-30-mar-2025-22_16_49.png",1024,1024,false]},"uagb_author_info":{"display_name":"Pablo Gimeno Sarroca","author_link":"https:\/\/cloudlab.urv.cat\/catedracloud\/author\/pgimeno\/"},"uagb_comment_info":3,"uagb_excerpt":"WebAssembly (Wasm) ha evolucionado significativamente desde su creaci\u00f3n. Originalmente concebido para ser ejecutado en un entorno aislado en el navegador, Wasm soporta ahora un grupo notable de funcionalidades fuera de \u00e9ste, como el acceso a sistemas de ficheros, ejecuci\u00f3n multihilo o un mecanismo de composici\u00f3n. Uno de los casos de uso que se investigan en&hellip;","_links":{"self":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/715","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/comments?post=715"}],"version-history":[{"count":2,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/715\/revisions"}],"predecessor-version":[{"id":1173,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/posts\/715\/revisions\/1173"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media\/1172"}],"wp:attachment":[{"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/media?parent=715"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/categories?post=715"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudlab.urv.cat\/catedracloud\/wp-json\/wp\/v2\/tags?post=715"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}