Stockage SQLite à latence nulle dans chaque Durable Object
(simonwillison.net)-
Zero-latency SQLite storage in every Durable Object
- Kenton Varda présente la prochaine version de la plateforme Durable Object de Cloudflare. Celle-ci a récemment été mise à niveau d’un stockage clé/valeur vers un système relationnel complet basé sur SQLite
- Pour un contexte utile sur la première version de Durable Objects, on peut consulter durable multiplayer moat de Cloudflare par Paul Butler. Cette approche est populaire pour créer des applications collaboratives en temps réel basées sur WebSocket
- Les nouveaux Durable Objects basés sur SQLite constituent un élément fascinant de conception de systèmes distribués, proposant une manière intéressante de concevoir des applications à grande échelle
-
Idée centrale des Durable Objects
- Un Durable Object place la logique applicative et les données sur le même hôte physique, ce qui permet des lectures et écritures très rapides
- Un objet unique s’exécute sur un seul thread d’une seule machine, donc son débit est limité. Pour gérer davantage de trafic, on crée plus d’objets. Cela fonctionne surtout lorsque chaque unité d’état a un trafic suffisamment faible pour être géré par un seul objet
-
Exemple d’un système de réservation de vols
- Chaque vol peut être mappé à un Durable Object dédié avec sa propre base de données SQLite. Des milliers de nouvelles bases de données sont créées chaque jour pour chaque compagnie aérienne
- Chaque DO possède un nom unique, et le réseau de Cloudflare achemine les requêtes vers cet objet où qu’il se trouve dans le monde
-
Détails techniques
- Inspiré de Litestream, chaque DO diffuse en continu une séquence d’entrées WAL vers un object store. Cela est regroupé tous les 16 Mo ou toutes les 10 secondes
- Pour garantir la durabilité pendant cette fenêtre de 10 secondes, les écritures sont transmises dès leur validation à cinq répliques dans des data centers proches, et l’écriture est reconnue une fois que trois d’entre elles l’ont confirmée
-
Conception de l’API JavaScript
- Elle est conçue de manière bloquante plutôt qu’asynchrone. L’objectif est de fournir des opérations de persistance rapides sur un seul thread
- Des exemples montrent volontairement un motif de requêtes N+1 que SQLite sait bien gérer
-
Storage Relay Service
- Il s’agit du système sous-jacent des Durable Objects, et il prend déjà en charge le système SQLite D1 existant de Cloudflare depuis plus d’un an
-
Lieu de création des Durable Objects
- Une fois créés, les Durable Objects ne changent pas d’emplacement. Par défaut, ils sont instanciés dans le data center où la requête
get()initiale est effectuée - Pour créer manuellement des Durable Objects à un autre endroit, on fournit le paramètre optionnel
locationHintàget()
- Une fois créés, les Durable Objects ne changent pas d’emplacement. Par défaut, ils sont instanciés dans le data center où la requête
-
Site where.durableobjects.live
- Il s’agit d’un site qui permet de suivre l’endroit où les DO sont créés sur le réseau Cloudflare
Récapitulatif GN⁺
- Les Durable Objects de Cloudflare, désormais basés sur SQLite, ouvrent de nouvelles possibilités pour la conception d’applications à grande échelle. Ils offrent de hautes performances en plaçant les données et la logique applicative sur le même hôte physique
- Ce système est particulièrement utile pour les applications collaboratives en temps réel et offre la flexibilité nécessaire pour gérer diverses unités d’état
- Durable Objects crée des répliques dans plusieurs data centers afin de garantir la durabilité des données, ce qui renforce la stabilité et la fiabilité
- Cette technologie peut intéresser les développeurs qui travaillent sur la conception de grands systèmes distribués. Des systèmes offrant des fonctionnalités similaires incluent Amazon DynamoDB et Google Firestore
1 commentaires
Commentaires Hacker News
L’API d’écriture est synchrone, mais comporte une attente asynchrone cachée. Si une écriture échoue, le runtime remplace la réponse par un échec HTTP, ce qui permet de traiter automatiquement les écritures par lots et de supposer leur réussite
Chaque DO diffuse une séquence d’entrées WAL vers object storage, regroupée par lots tous les 16 Mo ou toutes les 10 secondes
J’aime la conception des Durable Objects. Leur fonctionnement interne est facile à comprendre
Il est difficile de comprendre où se trouvent physiquement les Durable Objects
Il est difficile de comprendre les nouvelles technologies cloud
Je me demande comment gérer les migrations de schéma
La conception des DO est intéressante, mais j’ai l’impression qu’elle ne convient qu’aux systèmes à forte charge ou aux projets jouets
Je suis impressionné par la conception des DO. J’ai l’impression que leur manière de traiter des tâches complexes à petite échelle ressemble à la structure d’un vrai produit
Je remarque que CF encourage les développeurs à utiliser les DO
Je me demande si les DO correspondent au « modèle » dans une architecture MVC