28 puntos por xguru 2024-02-01 | 1 comentarios | Compartir por WhatsApp
  • 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

 
[Este comentario fue ocultado.]