Zero-Latency-SQLite-Speicher in jedem Durable Object
(simonwillison.net)-
Zero-latency SQLite storage in every Durable Object
- Kenton Varda stellt die nächste Version von Cloudflares Durable-Object-Plattform vor. Die Plattform wurde kürzlich von einem Key-Value-Store zu einem vollständigen relationalen System auf SQLite-Basis aufgerüstet
- Nützlichen Hintergrund zur ersten Version von Durable Objects bietet Paul Butlers Cloudflare’s durable multiplayer moat. Diese ist beliebt für den Aufbau von Echtzeit-Kollaborationsanwendungen auf WebSocket-Basis
- Die neuen SQLite-basierten Durable Objects sind ein faszinierendes Element des Designs verteilter Systeme und schlagen interessante Wege für den Entwurf von Anwendungen im großen Maßstab vor
-
Grundidee von Durable Objects
- Ein Durable Object platziert Anwendungslogik zusammen mit den Daten auf demselben physischen Host und bietet dadurch sehr schnelle Lese- und Schreibzugriffe
- Ein einzelnes Objekt läuft auf einem einzelnen Thread einer einzelnen Maschine, daher ist der Durchsatz begrenzt. Um mehr Traffic zu verarbeiten, werden mehr Objekte erzeugt. Am einfachsten ist das, wenn jede Zustandseinheit wenig genug Traffic hat, um von einem einzelnen Objekt verarbeitet werden zu können
-
Beispiel eines Flugbuchungssystems
- Jeder Flug kann auf ein dediziertes Durable Object mit eigener SQLite-Datenbank abgebildet werden. Pro Fluggesellschaft entstehen jeden Tag Tausende neuer Datenbanken
- Jedes DO hat einen eindeutigen Namen, und Cloudflares Netzwerk leitet Anfragen zu diesem Objekt weiter, egal wo auf der Welt es sich befindet
-
Technische Details
- Inspiriert von Litestream streamt jedes DO fortlaufend eine Sequenz von WAL-Einträgen in den Objektspeicher. Das geschieht in Batches von jeweils 16 MB oder alle 10 Sekunden
- Um Haltbarkeit innerhalb des 10-Sekunden-Fensters zu garantieren, werden Schreibvorgänge unmittelbar nach dem Commit an fünf Replikate in nahegelegenen Rechenzentren weitergegeben; sobald drei bestätigt haben, wird der Schreibvorgang bestätigt
-
Design der JavaScript-API
- Sie ist blockierend statt asynchron gestaltet. Ziel ist es, schnelle Persistenzoperationen auf einem einzelnen Thread bereitzustellen
- Es sind Beispiele enthalten, die bewusst das N+1-Query-Muster zeigen, das SQLite gut verarbeiten kann
-
Storage Relay Service
- Das zugrunde liegende System für Durable Objects, das bereits seit über einem Jahr Cloudflares bestehendes D1-SQLite-System unterstützt
-
Wo Durable Objects erzeugt werden
- Durable Objects ändern ihren Standort nach der Erzeugung nicht. Standardmäßig werden sie in dem Rechenzentrum instanziiert, in dem die erste
get()-Anfrage erfolgt - Um Durable Objects manuell an einem anderen Ort zu erzeugen, wird an
get()der optionale ParameterlocationHintübergeben
- Durable Objects ändern ihren Standort nach der Erzeugung nicht. Standardmäßig werden sie in dem Rechenzentrum instanziiert, in dem die erste
-
Website where.durableobjects.live
- Eine Website, die verfolgt, wo im Cloudflare-Netzwerk DOs erzeugt werden
Zusammenfassung von GN⁺
- Cloudflares Durable Objects auf SQLite-Basis eröffnen neue Möglichkeiten für das Design großskaliger Anwendungen. Sie liefern hohe Performance, indem Daten und Anwendungslogik auf demselben physischen Host platziert werden
- Das System ist besonders nützlich für Echtzeit-Kollaborationsanwendungen und bietet Flexibilität bei der Verarbeitung verschiedener Zustandseinheiten
- Durable Objects erzeugen Replikate über mehrere Rechenzentren hinweg, um Datenhaltbarkeit sicherzustellen, was Stabilität und Zuverlässigkeit erhöht
- Die Technik könnte für Entwickler interessant sein, die sich für den Entwurf großer verteilter Systeme interessieren. Vergleichbare Systeme mit ähnlichen Funktionen sind Amazons DynamoDB und Googles Firestore
1 Kommentare
Hacker-News-Kommentare
Die Schreib-API ist synchron, hat aber eine versteckte asynchrone Wartefunktion. Wenn ein Schreibvorgang fehlschlägt, ersetzt die Runtime die Antwort durch einen HTTP-Fehler, sodass Schreibvorgänge automatisch gebündelt und als erfolgreich angenommen werden können
Jedes DO streamt eine Sequenz von WAL-Einträgen in den Objektspeicher, die alle 16 MB oder alle 10 Sekunden gebündelt werden
Das Design von Durable Objects gefällt mir. Die interne Funktionsweise ist leicht zu verstehen
Es ist schwer zu verstehen, wo sich Durable Objects physisch befinden
Es ist schwer, neue Cloud-Technologien zu verstehen
Ich frage mich, wie Schema-Migrationen gehandhabt werden sollen
Das DO-Design ist interessant, aber ich denke, es eignet sich nur für Systeme mit hoher Last oder für Spielzeugprojekte
Ich bin vom DO-Design beeindruckt. Die Art, wie komplexe Aufgaben in kleinem Maßstab verarbeitet werden, ähnelt aus meiner Sicht dem Aufbau realer Produkte
Mir ist aufgefallen, dass CF Entwickler zur Nutzung von DOs ermutigt
Ich frage mich, ob DOs dem "Model" in der MVC-Architektur entsprechen