Recherche 3Box: Comparaison de bases de données distribuées GUN, OrbitDB et Scuttlebutt

Similarités et différences entre les protocoles de base de données distribués populaires

Ce message contient un résumé des recherches menées par l'équipe 3Box. Nous soulignons les similitudes et les différences entre les technologies de base de données distribuées les plus répandues et, finalement, nous expliquons pourquoi nous avons choisi de tirer parti d'OrbitDB.

Présentation des bases de données distribuées populaires

Dans web3, il semble qu'il existe un nombre infini de technologies nouvelles et passionnantes qui prétendent résoudre vos problèmes de manière novatrice. Lors de la conception de 3Box, une base de données sociale pour les utilisateurs Ethereum, nous avions besoin d’une solution de base de données distribuée (DDB) pour conserver et partager le contenu hors chaîne. Nous avons commencé par rechercher certaines des implémentations de DDB les plus populaires sur le marché. Nous sommes super excités d'ouvrir nos résultats et de les partager avec la communauté.

Cette recherche fournira un aperçu des trois protocoles de base de données distribués différents qui ont été pris en compte lors de la recherche et du développement de 3Box: GUN, OrbitDB et Secure Scuttlebutt (SSB).

PISTOLET

GUN est une base de données de graphes décentralisée, connectée d'abord. Il fournit une interface simple permettant aux développeurs de créer des applications fonctionnant hors ligne et synchronisées automatiquement avec d'autres nœuds une fois l'application connectée à un serveur de coordination. Au moment de la rédaction de cet article, il compte environ 3 000 téléchargements mensuels (sur npm) et possède une communauté active.

OrbitDB

OrbitDB est un protocole de base de données entre homologues, ainsi que son implémentation. Il fournit divers types de bases de données en plus du protocole principal et permet aux utilisateurs d'implémenter leurs propres types. Au moment de la rédaction de cet article, il compte environ 3 000 téléchargements mensuels (sur npm) et est développé par les réseaux Haja.

Secure Scuttlebutt (SSB)

SSB est un magasin de journaux poste à poste utilisé comme base de données, fournisseur d'identité et système de messagerie. Il est principalement connu pour son utilisation en tant que réseau social. Patchwork est leur client le plus populaire. Leur client, Scuttlebot, a actuellement environ 3 000 téléchargements mensuels (sur NPM). SSB a une communauté assez active d'utilisateurs dans leur réseau social.

Les couches d'une base de données distribuée

En enquêtant sur Gun, OrbitDB et Scuttlebutt, nous avons constaté que les architectures DDB partageaient quelques similitudes. Les protocoles peuvent être pensés dans des couches séparées:

  1. Mise en réseau: protocole de communication qui maintient les nœuds synchronisés
  2. Journal des événements: modèle de données de base pour la base de données
  3. Authentification utilisateur: méthode de contrôle d'accès à la base de données
  4. Interface: l'API exposée aux développeurs

La suite de cette section évaluera les trois DDB en fonction de ces couches, en commençant par la mise en réseau.

1. mise en réseau

Les systèmes de base de données distribués doivent communiquer de manière fiable les mises à jour entre les nœuds homologues. La couche réseau définit comment les nœuds DDB communiquent et s’accordent sur ces mises à jour. La couche réseau est un aspect très important de toute base de données distribuée, car une couche réseau défectueuse peut entraîner des mises à jour manquées et un état incohérent entre les nœuds.

Voyons maintenant comment les trois DDB implémentent leurs protocoles de réseau P2P:

GUN implémente sa pile de mise en réseau en utilisant les technologies Web et de pointe webrtc. Cela signifie que les navigateurs peuvent communiquer directement les uns avec les autres sans qu'aucun serveur ne soit nécessaire (à l'exception d'un serveur Web pour négocier une connexion, ce qui est vrai pour tous les techniciens P2P basés sur un navigateur).

SSB définit et implémente un réseau p2p personnalisé. Il vous permet de découvrir des pairs sur votre réseau local, de vous connecter à des pubs (nœuds publics) et de découvrir des pubs annoncés par d'autres utilisateurs. Cela permet à SSB de fonctionner sans s'appuyer sur un serveur central pour être opérationnel.

OrbitDB utilise libp2p, une bibliothèque p2p modulaire pouvant communiquer sur de nombreux transports et fonctionnant dans de nombreux environnements. js-libp2p permet aux clients de navigateur de communiquer avec des serveurs websocket, avec d'autres clients de navigateur via webrtc, et plus encore. Il est actuellement utilisé dans IPFS, Subity Substrate, et sera utilisé dans Eth2.0.

2. Gestion de l'état

Les systèmes de base de données distribués doivent modéliser les données de manière à ce que les utilisateurs puissent en garantir l'intégrité. Ceci est réalisé de différentes manières par différents systèmes. Une approche consiste à créer une liste chaînée avec les données. Différents types de CRDT peuvent également être utilisés.

Une liste chaînée est utilisée comme modèle de données de base dans les deux systèmes de base de données distribués que nous avons étudiés. Chaque lien est un hachage de l'entrée précédente; et chaque entrée est une mise à jour autonome de la base de données. Cependant, il existe des différences dans la manière dont les listes chaînées sont implémentées dans les systèmes:

SSB utilise un journal avec ajout uniquement, qu’il appelle un flux. D'après ce que nous pouvons trouver dans leur documentation, il semble que ce journal suppose qu'il n'y a pas de conflits. Dans ce modèle, ils supposent qu'un utilisateur connaît toujours l'état le plus récent de son flux. Cela risque de devenir problématique si l'utilisateur dispose de plusieurs périphériques fournissant des mises à jour en conflit, ce qui peut facilement se produire si un utilisateur se connecte hors ligne sur un périphérique mais pas sur un autre. S'il vous plaît laissez-nous savoir si vous avez plus de perspicacité dans si cela est traité par SSB d'une certaine manière parce que nous ne sommes pas au courant.

OrbitDB utilise des CRDT basés sur un journal contenant uniquement des ajouts, capable de créer et de fusionner, offrant ainsi une cohérence éventuelle. Cela signifie que les clients peuvent se déconnecter et créer des mises à jour conflictuelles, mais lorsqu'ils se reconnecteront, ils seront synchronisés et se retrouveront dans le même état.

GUN utilise un CRDT basé sur l’état, ce qui signifie qu’il n’utilise pas de journal uniquement. Au lieu de cela, il communique l’état du système à tout moment. Ils ont une courte description ici.

3. Authentification de l'utilisateur

Les bases de données ont besoin d'un moyen de gérer les autorisations pour déterminer qui peut effectuer diverses actions. Étant donné que les bases de données distribuées ne peuvent pas compter sur un serveur central pour régir les autorisations de contrôle d'accès, l'authentification peut à la place s'appuyer sur la cryptographie à clé publique.

SSB a le concept d'identité, un flux pouvant appartenir à une seule identité. Dans le cas de la SSB, une identité est simplement une paire de clés asymétrique. Ceci est idéal pour les cas d'utilisation tels que les réseaux sociaux de type Twitter, où les utilisateurs publient des publications globales, mais peut être moins idéal pour les sections de commentaire, etc.

OrbitDB dispose d'un système de contrôle d'accès dans lequel vous définissez un ensemble de clés publiques lors de la création d'une base de données. Cela vous permet d'avoir une base de données que plusieurs utilisateurs peuvent mettre à jour simultanément. Il n’existe actuellement aucun moyen de modifier l’ensemble initial de clés publiques, bien qu’un système d’authentification plus perfectionné soit en cours d’élaboration.

GUN a un système d'authentification basé sur un alias et un mot de passe. À partir de leurs exemples, il semble possible d’accorder un accès dynamique aux utilisateurs, mais leur documentation manque tout à fait.

4. interface

La facilité d'utilisation et la flexibilité sont des préoccupations pour les développeurs lors du choix d'une base de données. Nous nous sommes donc demandé si l'interface ou l'API qui permet aux développeurs d'interagir avec la base de données et de créer des applications par-dessus est simple.

SSB a le concept de plugins qui fournissent différentes «vues» sur le journal SSB. Nous n'avons pas trouvé beaucoup de documentation sur la manière d'écrire ces plugins, mais il semble que vous deviez écrire une carte et réduire les fonctions.

OrbitDB propose différentes options pour différents types de magasins de données dotés d'une API très claire. Les magasins de journaux sont assez similaires aux flux SSB, tandis que les magasins de valeurs-clés ont une interface similaire à localStorage, disponible dans tous les navigateurs Web standard.

GUN utilise le concept de graphe comme interface pour manipuler la base de données. En gros, vous obtenez un nœud, vous pouvez alors y mettre des données ou écouter des mises à jour. Leur exemple hello world vous aidera à comprendre comment cela fonctionne.

Sauvegarde de données et hébergement

Nous n’avons pas encore indiqué où les données de l’utilisateur sont sauvegardées sur ces différents systèmes. C’est parce que les bases de données distribuées font un excellent travail pour résoudre le problème de stockage loin des développeurs. Cependant, nous souhaitons absolument évaluer les réseaux de stockage et d'hébergement de données sous-jacents de ces trois systèmes afin de vérifier leur disponibilité, leur résilience et leur convivialité. Ce serait une expérience terrible pour vos utilisateurs de perdre l'accès à leurs données, même pour une courte période.

Quelques questions à considérer: Que se passe-t-il si votre utilisateur perd son téléphone ou son ordinateur sur lequel toutes les données sont stockées? Ou que se passe-t-il si l'utilisateurA souhaite obtenir des informations sur l'utilisateurB lorsque l'utilisateurA est hors ligne?

GUN permet aux utilisateurs de se connecter à un serveur http qui héberge toutes les données de la base de données de l’utilisateur. Le serveur http exécute une instance de la base de données de pistolet et réplique toutes les modifications apportées par ses clients.

SSB a le concept de pubs, qui sont simplement des noeuds SSB publics qui suivent de nombreux utilisateurs. Si les utilisateurs perdent leurs données, ils peuvent en obtenir une copie à partir de la publication - si elle est toujours disponible. Remarque: les utilisateurs doivent explicitement demander à être suivis par un pub.

OrbitDB, d’autre part, n’a pas de concept natif de noeud sauvegardant les données. Au lieu de cela, il utilise le protocole libp2p pubsub pour détecter les homologues qui répliquent l'instance de base de données donnée. Cela permet de sauvegarder activement la base de données d'un utilisateur sur plusieurs instances homologues sans que l'utilisateur ait besoin de se connecter explicitement à l'une d'elles. Nous pensons que c'est plutôt chouette.

Conclusion

Dans l’ensemble, les trois bases de données partagent quelques similitudes et toutes en sont encore au tout début du développement. A l'avenir, nous imaginons que certains de ces projets pourraient commencer à changer certaines de leurs couches. Par exemple, nous penserions que ce serait vraiment cool si SSB travaillait sur libp2p!

OrbitDB

OrbitDB

À l'heure actuelle, il semble qu'OrbitDB fournit le système de base de données réparti le plus flexible des trois options considérées.

  • L'interface Orbit offre le plus grand nombre de cas d'utilisation possibles. La variété de magasins de données proposés par Orbit offre une option et une flexibilité pour la création de nombreux types d'applications et d'outils pour une très large gamme de cas d'utilisation.
  • Le réseau Orbit repose sur des technologies bien connues et bien entretenues. libp2p et ipfs fournissent une base solide au système Orbit que de nombreux membres de la communauté Ethereum connaissent probablement déjà. D'autres avantages notables de libp2p sont qu'il
  • Orbit peut très facilement être exécuté dans le navigateur. C'est encore à cause de libp2p.
  • Le réseau Orbit permet à de nombreux pairs d’héberger et de partager des données. libp2p permet à OrbitDB de synchroniser facilement les mises à jour de bases de données provenant de plusieurs homologues, ce qui permet à de nombreux homologues d’héberger des données. De ce fait, Orbit permet de créer un réseau auquel tout le monde peut adhérer pour que les données restent disponibles, ce qui rend le réseau plus robuste.

PISTOLET

L’équipe 3Box a trouvé GUN intéressant, et nous explorerons plus avant le concept de graphe. Cependant, un inconvénient du projet réside dans le fait que la documentation est assez confuse, ce qui rend difficile la compréhension du mode d’utilisation de la base de données.

SSB

Secure Scuttlebutt semble plus être une application de réseau social distribuée spécifique qu'une base de données sur laquelle construire des applications. Et en effet, l’équipe dit construire un réseau social. La SSB est un système cool, mais sa fonctionnalité semble limitée et inflexible. Cela laissera probablement les développeurs essayant de construire quelque chose en dehors du réseau social standard basé sur un flux unique avec des options très limitées. Il sera difficile de créer un ensemble diversifié d'applications.

3Box est construit sur OrbitDB

3Box construit des profils sociaux pour web3; et nous avons choisi de construire sur OrbitDB pour toutes les raisons mentionnées ci-dessus.

L'application 3Box permet aux utilisateurs de créer un profil social pour leur adresse Ethereum, de télécharger leurs informations et de se connecter à dapps.

Notre API Profils facilite l'obtention et la configuration des informations sur les comptes Ethereum, ce qui améliore l'intégration, simplifie le partage des données et aide les développeurs à donner aux utilisateurs le contrôle des données importantes.

Continuer la discussion

3Box est une communauté active intéressée par toutes les bases de données distribuées. Si vous avez des idées, des commentaires, de l'expérience, si vous souhaitez contribuer ou si vous souhaitez intégrer:

Rejoignez notre discorde

Nous apprécierions vraiment et encouragerions le dialogue autour de cette recherche. Notre objectif est de rendre précieux pour les membres de la communauté. N'hésitez pas à laisser un commentaire, surtout si nous avons oublié quelque chose ou si nous sommes incorrects. Merci pour votre soutien, et joyeux #buidling!