¿Alguna vez has pensado en cómo debería de ser el desarrollo de sitios web en el 2025? ¿Has usado serverless y te gusta pero sientes que aún le falta algo?¿Quieres saber cómo podrías usar WASM para mejorar el desempeño de tus sitios?
Si es así, hoy es tu día de suerte, en este post voy a hablar de una tecnología que descubrí hace unos meses y que puede ayudarte a crear sitios web y APIs con wasm de una manera rápida y eficiente. Este es un post informativo, es decir, no mostraré ningún código y sólo daré una pequeña introducción a esta tecnología, pero si tienes interés agrega el sitio a tus favoritos por que próximamente pondré algunos post técnicos y un par de tutoriales sobre Spin.
Vamos a empezar por lo básico, pensando en que el post sea al mismo tiempo útil para usuarios que empiezan con la programación web, e interesante para usuarios más avanzados que ya llevan un rato programando. Por lo tanto, empezaremos con unas cuantas definiciones poco formales que te ayudarán a tener una idea.
Serverless es un término bastante común en estos días, por lo que existen bastantes definiciones en línea, por ejemplo, la definición de wikipedia, sin embargo, a veces por intentar que la definición sea muy completa deja de ser clara o requiere mucho conocimiento previo.
Serverless se traduciría como “sin servidor”, pero debe de ser obvio que para poder recibir información en internet alguien debe de enviarla, es decir, siempre existe un servidor. La idea es que en serverless el servidor se presenta al desarrollador como un servicio que es administrado por un tercero, es decir, el desarrollador no tiene que preocuparse de la configuración y se puede concentrar en lo que necesita. Se registra en una empresa y sigue los pasos para poder servir archivos, y funciones, sin necesidad de configurar el servidor.
El hecho de no tener que preocuparse de mantener un servidor es muy importante para algunos grupos, en particular, los desarrolladores front-end, y algunos emprendedores o creadores de contenido que aunque no se especializan en la parte técnica no se dejan intimidar por las máquinas.
Wasm, a veces escrito con mayúsculas, es una contracción que se refiere a WebAssembly, que es un formato binario para código ejecutable. Inicialmente se creó con la idea de mejorar el desempeño del código de las páginas web permitiendo ejecutar código binario producido a partir de otros lenguajes diferentes a javascript en el navegador, sin tener mayores riesgos de seguridad. Conforme el formato se desarrollaba se descubrió que tenía otras posibles aplicaciones asociadas con la portabilidad del código, es decir, la posibilidad de usar el mismo código en diferentes sistemas sin necesidad de ajustes adicionales.
Otra de las ventajas de wasm es que los motores de javascript que correrían el código ya habían sido demasiado optimizados, por lo que se tenía la posibilidad de correr un código bastante eficiente en los dispositivos que soportaran el estandar. Es necesario entender que esto es un modo de indirección y que tiene también algunas desventajas, dependiendo del caso de uso, pero en general fue una tecnología muy bien recibida.
Spin es un framework de código abierto usado para construir y ejecutar aplicaciones de microservicios mediante componentes wasm. Inicialmente era un proyecto desarrollado por una empresa privada llamada Fermyon, los creadores trabajaron en un equipo de Microsoft relacionado con wasm y decidieron que la tecnología era muy interesante y podía comercializarse como un producto. Actualmente Fermyon sigue siendo el principal contribuyente al código de Spin, pero recientemente fue aceptado como proyecto de la CNCF(Cloud Native Computing Foundation), lo que de algún modo asegura cierta estabilidad y transparencia en cuanto al desarrollo y gestión del producto, es decir, es menos probable que cambie mucho o que se vuelva cerrado en un futuro cercano.
El hecho de que Spin use wasm hace que sea portable, rápido, y seguro (se ejecuta en un ambiente con acceso limitado al sistema que lo ejecuta), además una de las promesas es que los tiempos de inicio de las funciones se reducirán significativamente de segundos a milisegundos cuando se empieza desde cero.
Es una alternativa a otros servicios serverless que permiten hacer uso de tecnologías de servidor sin tener que administrarlo, particularmente si se usa como servicio en la nube de Fermyon. Sólo por dejar las cosas claras, hago la anotación de que se considera un framework para serverless porque permite separar la creación de los componentes, que sería la carga, del mantenimiento del sistema que los ejecuta, que sería el servidor que tiene Spin instalado, por lo que aún si se corriera en infraestructura propia permitiría mucha flexibilidad para que diferentes usuarios o proyectos ejecutaran funciones serverless sin tener que preocuparse de la configuración del sistema que corre spin.
Una de las cosas que me parecieron muy interesantes es que el modelo de componentes permite que se usen diferentes lenguajes en diferentes partes de un proyecto, por ejemplo, se puede hacer un API que tenga partes en javascript, python, y rust. Actualmente la oferta en el modelo de subscripción gratuito es bastante buena, incluye acceso a una base de datos SQL, a una base de datos key-value, y a un LLM gratuitamente.
Spin se basa en wasmtime, pero construye muchas herramientas y abstracciones para permitir que el desarrollo sea más sencillo. Permite que el desarrollador se enfoque en los conceptos con los que ya está familiarizado sin tener que aprender como funciona wasm a un nivel más técnico. En particular creo que Fermyon Cloud es una excelente opción para empezar a usar funciones serverless desde aplicaciones front-end y empezar a familiarizarse con la tecnología sin tener que pagar. Puede que parezca un anuncio para el servicio que ofrece Fermyon, pero en realidad me parece que Spin es una muy buena alternativa aún si no se usa su servicio, sólo que se vuelve bastante más complicado el poner las aplicaciones en línea.