19 points par GN⁺ 2025-04-11 | 5 commentaires | Partager sur WhatsApp
  • SpacetimeDB est un système qui combine base de données et fonctions serveur
  • Au lieu d’avoir séparément un serveur web ou de jeu traditionnel, les clients se connectent directement à la base de données pour exécuter la logique applicative
  • Il est possible de téléverser directement la logique de l’application dans la base de données via des procédures stockées sous forme de « modules » écrits en Rust
  • L’application entière peut être déployée sous la forme d’un unique binaire Rust, ce qui rend inutiles DevOps, conteneurs, serveurs et microservices

Principales caractéristiques

  • Le concept est similaire à celui des smart contracts, mais sans lien avec la blockchain
  • Beaucoup plus rapide que les systèmes de smart contracts existants
  • Le backend du MMORPG BitCraft Online repose uniquement sur SpacetimeDB
  • Tous les éléments du jeu sont traités en temps réel dans la base de données et synchronisés avec les clients
  • Optimisé pour les applications temps réel, avec une conception visant à minimiser la latence
  • L’état de l’application est conservé en mémoire et enregistré dans le WAL (Write-Ahead Log) pour permettre la récupération

Installation

Installation sur macOS / Linux

Installation sur Windows

Exécution avec Docker

  • Si vous utilisez Docker
    docker run --rm --pull always -p 3000:3000 clockworklabs/spacetime start

4 étapes pour démarrer

  1. Installer l’outil CLI spacetime
  2. Lancer un nœud unique avec la commande spacetime start
  3. Écrire et téléverser un module dans l’un des langages pris en charge
  4. Se connecter à la base de données avec une bibliothèque cliente

Prise en charge des langages

Modules côté serveur

Bibliothèques clientes

Informations sur la licence

  • Distribué sous licence BSL 1.1
  • Bascule après une certaine période vers AGPL v3.0 + exception de liaison
  • N’exige pas la publication du code source des applications intégrées à SpacetimeDB
  • Une approche de licence de logiciel libre conçue pour que les contributions reviennent à la communauté

Documentation officielle

5 commentaires

 
ethanhur 2025-04-11

Idée intéressante. Je me demande comment ils ont bien résolu des aspects comme le DDoS ou l'authentification.

 
turastory 2025-04-11

Le nom a vraiment un style incroyable.

 
jujumilk3 2025-04-11

Je trouvais ça vraiment original et prometteur, mais il s'avère que j'avais déjà mis une étoile sur GitHub il y a longtemps. Ma mémoire...

 
xguru 2025-04-11

SpaceTimeDB - fusion de la base de données et du serveur en un seul

Il avait déjà été présenté il y a un an et demi, et il continue d’être bien mis à jour. a16z et Supercell ont également investi.

 
GN⁺ 2025-04-11
Avis Hacker News
  • SpacetimeDB appartient à une catégorie technique de « reconfiguration de la pensée à l’échelle cosmique ». Cela offre la possibilité d’améliorer fortement les performances via une réorganisation structurelle

    • Ce type de technologie oblige les développeurs à réordonner leur façon de penser, et il est difficile de distinguer si les problèmes viennent d’une adoption incomplète de la technologie ou du fait que sa promesse ne correspond pas à certains cas d’usage
    • Des technologies similaires incluent Elixir et Node, où il faut adopter toute la stack et accepter de nouvelles limites pour obtenir des garanties rares
    • Ces technologies ont plus de chances de réussir lorsque des pionniers avec une vision claire démontrent leurs forces dans l’open source
    • Espérons que Clockwork Labs réussira à livrer son jeu d’exemple
  • Meilleur commentaire du précédent post :

    • SpacetimeDB est une base de données généraliste, avec prise en charge d’une faible latence et de procédures stockées WASM
    • Cela semble être un bloc de base solide pour les mondes persistants de jeux multijoueurs
    • Il faut implémenter soi-même le netcode qui masque la latence
  • SpacetimeDB a été développé pour prendre en charge BitCraft, un MMORPG de grande ampleur

    • Il a été conçu pour répondre aux exigences de performance du jeu
    • Il affiche une très faible latence et un débit élevé
    • Pour construire un nouveau MMO, il vaut mieux examiner les approches du marché existant
    • En prenant l’exemple de World of Warcraft, la fiabilité du client et la coordination des événements côté serveur sont au cœur des hacks de scalabilité
  • Il est difficile de comprendre comment écrire un serveur de jeu avec cette technologie

    • On se demande comment intégrer la simulation physique, le pathfinding, l’animation, etc., lorsqu’il faut les simuler côté serveur
    • En général, on utilise le mode headless d’Unreal/Unity, mais avec SpacetimeDB il faudrait abandonner le moteur de jeu et tout réimplémenter depuis zéro
  • BitCraft a l’air mignon

    • Voir le terme tarifaire « maincloud » m’a donné un a priori personnel, mais ce n’est qu’un nom pour des crédits d’hébergement
  • YouTube recommande SpacetimeDB mais n’a jamais créé de jeu vidéo

    • J’aimerais que des développeurs de jeux donnent leur avis sur l’utilité réelle de cette technologie
    • Il est difficile de juger à quel point cela relève surtout du marketing
  • Ce projet est couvert par la BSL, avec une limite de temps assez contraignante

    • Une seule instance par service est autorisée
  • Il ne faut pas confondre le schéma d’une base de données relationnelle avec la manière dont une app traite les données

    • Un contrôle explicite est nécessaire, et il faut éviter la magie des annotations
  • Je me demande s’il est pertinent d’exécuter la base de données en local pour un jeu solo

    • Je doute de l’intérêt de faire passer tout l’état du jeu par une base de données locale
    • S’il existait un gestionnaire d’état robuste comme logiciel séparé, on aurait l’impression qu’il ne resterait plus qu’à écrire le moteur graphique
  • Cela ressemble à une base de données en mémoire, avec un runtime WASM pour héberger la logique métier

    • On ne voit pas clairement comment sont gérées la scalabilité et le clustering
    • Il semble qu’il faille faire soi-même le partitionnement des données
    • La réplication et la cohérence sont les parties difficiles dans une base de données distribuée
    • Des tables en mémoire et sur disque sont toutes deux disponibles
    • Les bases de données classiques font déjà cela, et écrire la logique métier en procédures stockées est fastidieux
    • Pour l’instant, embarquer sqlite dans un binaire avec des tables en mémoire semble équivalent
    • Il faut écrire le code qui publie les mises à jour des tables aux clients
    • Il existe de la documentation sur le clustering, mais elle manque de concret