- Serverless bedeutet nicht wirklich, dass es keine Server gibt, sondern nur, dass man die Server anderer Leute nutzt
- Die ServerFree-Architektur schlägt ein Konzept vor, mit dem sich Code ohne Backend-Server, Container oder virtuelle Maschinen ausführen lässt
- In dieser Architektur wird der Code im Browser ausgeführt, und es wird nur ein Server benötigt, der statische Dateien bereitstellt
- Es wird demonstriert, wie sich eine Webanwendung so paketieren lässt, dass sie im Browser ausgeführt werden kann
- Der Frontend-Code wird wie gewohnt gebaut, das Backend wird paketiert und in einem Web Worker ausgeführt, und als Datenbank dient SQLite, das zu WebAssembly kompiliert wurde
Idee
- Es wurde beschlossen, über Content-Marketing ein Demo-Projekt zu erstellen, inspiriert von Hacker News einen Job-Application-Tracker zu bauen, der aus Datenschutzsicht Aufmerksamkeit erregen könnte
- Dieses Projekt entwickelte sich zu einem Prozess, in dem eine neue Architektur entstand, während Probleme mit Web Workern, Dokumentenabweichungen, fehlenden Dokumenten und Ähnlichem gelöst wurden.
Erster Versuch mit klassischer Architektur (der einfache Teil)
- Mit der SubZero CLI wurde die Datenbankschema geändert und Berechtigungen wurden gesetzt, um die App zu erstellen.
- Es wurden CRUD- und Filterfunktionen bereitgestellt, aber die UI wurde eher in Richtung Produkt als Demo angepasst.
- Die Sidebar wurde nach oben verschoben, um verschwendeten Platz auf der linken Seite zu reduzieren.
- Auf der Seite "Opportunities" wurden Show-, Create-, Edit- und List-Komponenten hinzugefügt.
- Es wurde ein komplexer Filterablauf implementiert, ohne den Backend-Code anzufassen.
- Das Dashboard wurde verbessert, um relevante Daten wie "offene Chancen", "durchschnittlicher Fortschritt / Bewerbung" und "durchschnittliche Tage nach der Bewerbung" anzuzeigen.
- Für das Produktions-Deployment wurden Docker-Images gebaut, die Datenbank mit Seed-Daten befüllt und Container ausgeführt.
- Die SQLite-Datenbankdatei wurde außerhalb des Containers gehalten, um die Daten dauerhaft zu speichern.
- Mit Turso DB wurden die Probleme bei Persistenz und Backups der SQLite-Datenbank gelöst.
Umstieg auf die ServerFree-Architektur (der spannende Teil)
- SQLite wurde zu WebAssembly kompiliert und als Datenbank verwendet.
- OPFS (Origin-Private FileSystem) wurde zum Speichern der Daten verwendet.
- Der Backend-Code wurde in einem Web Worker ausgeführt, um ein Blockieren des UI-Threads zu vermeiden.
- Express wurde durch itty-router ersetzt, um Browser-Kompatibilität sicherzustellen.
- Ein Service Worker wurde verwendet, um Anfragen zwischen UI und Backend abzufangen und zu verarbeiten.
- Eine zuverlässige Kommunikation zwischen Service Worker und Web Worker wurde über den Main Thread implementiert.
- Authentifizierungsbezogener Code wurde aus dem Main Thread (UI) entfernt.
- Daten werden auf dem Computer der Nutzer gespeichert und nicht an einen Server übertragen.
Fazit
- Diese Architektur ist besonders nützlich, wenn Kundendaten unabhängig sind und nicht zwischen Nutzern geteilt werden müssen.
- Da es keinen Backend-Server gibt, sinken die Hosting-Kosten, der Datenschutz wird gestärkt und die Sicherheit verbessert sich.
- Mit Tools wie Electric lassen sich Teile der Datenbank mit dem Client synchronisieren und bestimmte Requests/Queries im Browser verarbeiten
1 Kommentare