- Serverless no significa realmente que no haya servidores, sino que simplemente usas los servidores de otra persona
- La arquitectura ServerFree propone el concepto de ejecutar código sin servidores backend, contenedores ni máquinas virtuales
- En esta arquitectura, el código se ejecuta dentro del navegador y solo se necesita un servidor que entregue archivos estáticos
- Se demuestra una forma de empaquetar una aplicación web para que pueda ejecutarse en el navegador
- El código frontend se compila como de costumbre, el backend se empaqueta para ejecutarse en un Web Worker y la base de datos usa SQLite compilado a WebAssembly
Idea
- Se decidió crear un proyecto demo mediante content marketing y, con inspiración de Hacker News, hacer un rastreador de postulaciones laborales destacado por su enfoque en la privacidad
- Este proyecto evolucionó en el proceso de desarrollar una nueva arquitectura mientras se resolvían problemas como Web Workers, discrepancias en la documentación y documentación faltante.
Primer intento con una arquitectura clásica (la parte fácil)
- Se construyó la app usando SubZero CLI para cambiar el esquema de la base de datos y configurar permisos.
- Ofrece funciones CRUD y filtrado, pero se avanzó en personalizar una UI más cercana a un producto que a una demo.
- La barra lateral se movió a la parte superior para reducir el espacio desperdiciado a la izquierda.
- Se agregaron componentes Show, Create, Edit y List a la página "Opportunities".
- Se implementó un flujo de filtrado complejo sin tocar el código backend.
- Se mejoró el dashboard para mostrar datos relevantes como "oportunidades abiertas", "progreso promedio / postulación" y "días promedio después de postular".
- Para el despliegue en producción, se construyó una imagen de Docker, se cargaron datos semilla en la base de datos y se ejecutó el contenedor.
- El archivo de base de datos SQLite se mantuvo fuera del contenedor para conservar los datos de forma persistente.
- Se usó Turso DB para resolver los problemas de persistencia y respaldo de la base de datos SQLite.
Cambio a la arquitectura ServerFree (la parte divertida)
- SQLite se compiló a WebAssembly para usarlo como base de datos.
- Se usó OPFS (Origin-Private FileSystem) para almacenar los datos.
- El código backend se ejecutó en un Web Worker para evitar bloquear el hilo de la UI.
- Express fue reemplazado por itty-router para asegurar compatibilidad con el navegador.
- Se usó un Service Worker para interceptar y procesar solicitudes entre la UI y el backend.
- Se implementó una comunicación confiable entre el Service Worker y el Web Worker a través del hilo principal.
- Se eliminó del hilo principal (UI) el código relacionado con autenticación.
- Los datos se almacenan en la computadora del usuario y no se envían al servidor.
Conclusión
- Esta arquitectura es especialmente útil cuando los datos del cliente son independientes y no necesitan compartirse entre usuarios.
- Al no haber un servidor backend, se reducen los costos de hosting, se fortalece la privacidad de los datos y mejora la seguridad.
- Con herramientas como Electric, se puede sincronizar parte de la base de datos con el cliente y procesar algunas solicitudes/consultas en el navegador
1 comentarios