3Box Research: Usporedba distribuiranih baza podataka GUN, OrbitDB i Scuttlebutt

Sličnosti i razlike između popularnih protokola distribuirane baze podataka

Ovaj post sadrži sažetak istraživanja koje je proveo 3Box tim. Izdvajamo sličnosti i razlike između popularnih tehnologija distribuirane baze podataka i na kraju kažemo zašto smo odlučili graditi na OrbitDB.

Pregled popularnih distribuiranih baza podataka

U webu 3 čini se da postoji neprekidna ponuda novih i uzbudljivih tehnologija za koje se tvrdi da vaše probleme rješavaju na nove načine. Dok smo dizajnirali 3Box, društvenu bazu podataka za korisnike Ethereuma, trebalo nam je rješenje distribuirane baze podataka (DDB) za čuvanje i razmjenu sadržaja izvan lanca. Započeli smo istraživanjem nekih od najpopularnijih DDB implementacija na tržištu danas. Izuzetno smo uzbuđeni što otvaramo svoja otkrića i dijelimo ih sa zajednicom.

Ovo će istraživanje pružiti pregled tri različita protokola distribuirane baze podataka koji su uzeti u obzir tijekom istraživanja i razvoja 3Boxa: GUN, OrbitDB i Secure Scuttlebutt (SSB).

PIŠTOLJ

GUN je decentralizirana baza podataka s grafičkim prikazima. Programerima pruža jednostavno sučelje za izradu aplikacija koje rade izvan mreže, a koje se automatski sinkroniziraju s drugim čvorovima nakon što se aplikacija poveže na koordinirajući poslužitelj. U vrijeme pisanja ima oko 3K preuzimanja mjesečno (na npm) i aktivnu zajednicu.

OrbitDB

OrbitDB je peer-to-peer baza podataka, kao i implementacija protokola. Na jezgru protokola pruža različite vrste baza podataka i korisnicima omogućuje implementaciju vlastitih vrsta. U vrijeme pisanja ima oko 3K mjesečnih preuzimanja (u npm), a razvijaju ih mreže Haja.

Sigurni Scuttlebutt (SSB)

SSB je trgovina podataka za vršnjake koja se koristi kao baza podataka, davatelj identiteta i sustav za razmjenu poruka. Prije svega je poznata po upotrebi kao društvena mreža; Patchwork je njihov najpopularniji klijent. Njihov klijent, Scuttlebot, trenutno ima oko 3K mjesečnih preuzimanja (u npm). SSB ima prilično aktivnu zajednicu korisnika na svojoj društvenoj mreži.

Slojevi distribuirane baze podataka

Dok smo istraživali Gun, OrbitDB i Scuttlebutt, primijetili smo da DDB arhitekture imaju nekoliko sličnosti. Protokoli se mogu zamisliti u zasebnim slojevima:

  1. Umrežavanje: komunikacijski protokol koji čvorove čuva u sinkronizaciji
  2. Zapisnik događaja: osnovni model podataka za bazu podataka
  3. Autentifikacija korisnika: metoda kontrole pristupa bazi podataka
  4. Sučelje: api izložen programerima

Ovaj ostatak ovog odjeljka procijenit će tri DDB-a prema tim slojevima, počevši s umrežavanjem.

1. Umrežavanje

Distribuirani sustavi baza podataka trebaju pouzdano komunicirati ažuriranja između peer čvorova. Mrežni sloj definira kako DDB čvorovi komuniciraju i slažu se s tim ažuriranjima. Mrežni sloj vrlo je važan aspekt bilo koje distribuirane baze podataka, jer loš mrežni sloj može dovesti do propuštenih ažuriranja i nedosljednog stanja po čvorovima.

Ispitajmo kako tri DDB implementiraju svoje mrežne protokole p2p:

GUN implementira svoj mrežni niz koristeći najsuvremeniju tehnologiju webrtc i websocket. To znači da preglednici mogu izravno komunicirati jedni s drugima bez potrebe za bilo kojim poslužiteljem (osim webrtc servera koji bi pregovarao o vezi, što vrijedi za sve p2p tehnologije temeljene na pregledniku).

SSB definira i implementira prilagođenu p2p mrežu. Omogućuje vam otkrivanje vršnjaka u vašoj lokalnoj mreži, povezivanje s pabovima (javnim čvorovima) i otkrivanje pabova koje oglašavaju drugi korisnici. To omogućava SSB-u da radi bez oslanjanja na rad centralnog poslužitelja.

OrbitDB koristi libp2p koji je modularna p2p knjižnica koja može komunicirati preko mnogo različitih prijevoza i radi u puno različitih okruženja. js-libp2p omogućava klijentima preglednika da komuniciraju s websocket poslužiteljima, s drugim klijentima preglednika putem webrtc-a i još više. Trenutno se koristi u IPFS-u, Parity Supstratu i koristit će se u programu Eth2.0.

2. Upravljanje državom

Distribuirani sustavi baza podataka trebaju modelirati podatke na način da korisnici mogu jamčiti njihovu cjelovitost. To se na različite načine postiže različitim sustavima. Jedan od pristupa je stvaranje povezanog popisa s podacima. Također se mogu koristiti različite vrste CRDT-a.

Povezani popis koristi se kao model osnovnih podataka u dva distribuirana sustava baza podataka koje smo istraživali. Svaka veza je hash iz prethodnog unosa; i svaki je unos samostalno ažuriranje baze podataka. Međutim, postoje razlike u načinu na koji se povezani sustavi implementiraju u sustave:

SSB koristi zapisnik samo za dodatak koji nazivaju feedom. Iz onoga što možemo pronaći u njihovim dokumentima, čini se da ovaj dnevnik pretpostavlja da nema sukoba. U ovom modelu pretpostavljaju da korisnik uvijek zna najnovije stanje svojih feedova. To može postati problematično ako korisnik ima više uređaja koji pružaju oprečna ažuriranja, što se lako može dogoditi ako korisnik isključi izvan mreže na jednom uređaju, ali ne i na drugom. Javite nam ako imate još uvida u to da li se SSB rješava na neki način jer toga nismo svjesni.

OrbitDB koristi CRDT-ove koji se temelje na zapisu samo za dodavanje koji se može viliti i spajati, pružajući eventualnu dosljednost. To znači da klijenti mogu krenuti izvan mreže i stvarati oprečna ažuriranja, ali kad ponovno krenu na mrežu, sinkronizirat će se i završiti s istim stanjem.

GUN koristi CRDT temeljen na državi, što znači da ne koristi samo zapisnik dodavanja. Umjesto toga, on komunicira o stanju sustava u bilo kojem trenutku. Ovdje su kratki opis.

3. Provjera autentičnosti korisnika

Bazama podataka potreban je način upravljanja dozvolama nad kojima mogu obavljati različite radnje. Budući da se distribuirane baze podataka ne mogu osloniti na središnji poslužitelj koji će upravljati dozvolama kontrole pristupa, umjesto toga provjera autentičnosti može se osloniti na kriptografiju s javnim ključem.

SSB ima koncept identiteta gdje feed može biti u vlasništvu samo jednog identiteta. Identitet u slučaju SSB-a jednostavno je asimetrični par ključeva. Ovo je izvrsno za slučajeve upotrebe poput Twitter sličnih društvenih mreža u kojima korisnici objavljuju globalne postove, ali može biti manje idealan za odjeljke s komentarima itd.

OrbitDB ima sustav kontrole pristupa u kojem definirate skup javnih ključeva za izradu DB-a. To vam omogućuje da imate DB koji više korisnika može ažurirati odjednom. Trenutno ne postoji način da se promijeni početni skup javnih ključeva, iako se na naprednijem sustavu provjere autentičnosti radi.

GUN ima sustav za provjeru autentičnosti zasnovan na pseudonimu i lozinci. Iz gledanja njihovih primjera čini se da je moguće dinamički odobriti pristup ljudima, međutim nedostaje njihova dokumentacija.

4. Sučelje

Upotrebljivost i fleksibilnost zabrinjavaju programere pri odabiru baze podataka. Stoga smo se zapitali koliko je jednostavno sučelje ili API koji programerima omogućuje interakciju s bazom podataka i izgradnju aplikacija na njoj?

SSB ima koncept dodataka koji pružaju različite "prikaze" na SSB dnevniku. Nismo mogli pronaći puno dokumentacije o tome kako napisati te dodatke, ali čini se da u osnovi morate napisati kartu i smanjiti funkciju.

OrbitDB nudi različite mogućnosti za razne vrste spremišta podataka s prilično jasnim API-jem. Trgovine dnevnika prilično su slične SSB feedovima, dok prodavaonice ključnih vrijednosti imaju sučelje localStorage koje je dostupno u svim redovitim web preglednicima.

GUN koristi koncept grafa kao sučelje za manipuliranje DB-om. U osnovi imate čvor, na njega možete staviti podatke ili na njemu slušati ažuriranja. Njihov primjer zdravog svijeta pomoći će vam da shvatite kako to funkcionira.

Sigurnosna kopija podataka i hosting

Nismo još raspravljali o sigurnosnim kopijama podataka korisnika na tim različitim sustavima. To je zato što distribuirane baze podataka sjajno apstrahiraju problem za pohranu daleko od programera. Ipak definitivno želimo procijeniti temeljne mreže za pohranu podataka i hosting ovih triju sustava kako bismo provjerili dostupnost, otpornost i upotrebljivost. Bilo bi užasno iskustvo za vaše korisnike da izgube pristup svojim podacima, pa makar i nakratko.

Nekoliko pitanja koja biste mogli razmotriti: što ako vaš korisnik izgubi telefon ili računalo na kojem su pohranjeni svi podaci? Ili što ako userA želi dobiti informacije o userB-u kada je korisnikA offline?

GUN omogućava korisnicima povezivanje s http poslužiteljem koji ugošćuje sve podatke u korisnikovom DB-u. Http poslužitelj pokreće primjerak DB pištolja i replicira sve promjene od strane svojih klijenata.

SSB ima koncept pubova, koji su jednostavno javni SSB čvorovi koji prate mnogi korisnici. Ako korisnici izgube svoje podatke, mogu dobiti kopiju iz pub - ako je još uvijek dostupna. Napomena: korisnici moraju izričito zatražiti da ih prati pub.

OrbitDB, s druge strane, nema izvorni koncept čvora koji izrađuje sigurnosnu kopiju podataka. Umjesto toga, on koristi libp2p pubsub protokol za otkrivanje vršnjaka koji repliciraju datu DB instancu. To omogućuje aktivnu izradu sigurnosnih kopija baze podataka na više vršnjačkih instanci, bez potrebe da se korisnik izričito poveže s bilo kojom od njih. Mislimo da je to prilično uredno.

Zaključak

Tri baze podataka sveukupno imaju nekoliko sličnosti i sve su još uvijek u razvoju. U budućnosti zamišljamo da bi neki od tih projekata mogli početi zamijeniti neke svoje slojeve. Na primjer, mogli bismo pomisliti da bi bilo stvarno u redu kada bi SSB radio na libp2p!

OrbitDB

OrbitDB

U ovom trenutku, čini se da OrbitDB pruža najfleksibilniji sustav distribuirane baze podataka od tri razmatrane opcije.

  • Orbit sučelje nudi najširi raspon slučajeva potencijalnog korištenja. Raznolikost prodavaonica podataka koje nudi Orbit pruža mogućnost i fleksibilnost za izgradnju različitih tipova aplikacija i alata za vrlo širok raspon slučajeva uporabe.
  • Mreža Orbit izgrađena je na temelju poznatih, dobro održavanih tehnologija. libp2p i ipfs pružaju čvrste temelje sustavu Orbit s kojim su vjerojatno već poznati mnogi članovi Ethereum zajednice. Ostale zapažene prednosti libp2p su da je to
  • Orbit se vrlo lako može pokrenuti u pregledniku. Ovo je opet zbog libp2p.
  • Mreža Orbit omogućava mnogim vršnjacima da domaćin i razmjenjuju podatke. libp2p omogućava OrbitDB-u da lako sinkronizira ažuriranja baze podataka s više vršnjaka, što omogućava mnogim vršnjacima da hostuju podatke. Zbog toga Orbit omogućava stvaranje mreže kojoj se svatko može pridružiti kako bi podaci bili dostupni, što cijelu mrežu čini robusnijom.

PIŠTOLJ

3Box tim smatrao je da je GUN zanimljiv, a mi ćemo dalje istražiti koncept grafa. Međutim, nedostatak projekta je taj što je dokumentacija prilično neuredna, što otežava dobro razumijevanje načina na koji se DB može koristiti.

SSB

Sigurni Scuttlebutt izgleda više kao specifična distribuirana aplikacija na društvenoj mreži nego baza podataka na kojoj se grade aplikacije. I doista, društvena mreža je ono što tim kaže da grade. SSB je cool sustav, ali čini se da je ograničen i nefleksibilan u funkcionalnosti. To će vjerovatno ostaviti programere koji pokušavaju izraditi bilo što izvan standardne socijalne mreže utemeljene na jednom feedu s vrlo ograničenim opcijama. Bilo bi izazovno izgraditi raznovrstan skup aplikacija na vrhu.

3Box je izgrađen na OrbitDB

3Box gradi društvene profile za web3; i odlučili smo se nadograditi na OrbitDB iz svih gore navedenih razloga.

Aplikacija 3Box omogućuje korisnicima stvaranje društvenog profila za svoju Ethereum adresu, prijenos njihovih podataka i prijavljivanje u dapps.

Naš API Profiles pojednostavljuje dobivanje i postavljanje informacija o Ethereum računima, što poboljšava ugrađivanje, čini razmjenu podataka bezbolnim i pomaže programerima da korisnicima daju kontrolu nad važnim podacima.

Nastavak rasprave

3Box je aktivna zajednica zainteresirana za sve distribuirane baze podataka. Ako imate misli, povratne informacije, iskustvo, želite doprinijeti ili se želite integrirati:

Pridružite se našem neslaganju

Iskreno bismo cijenili i ohrabrili dijalog oko ovog istraživanja. Cilj nam je učiniti vrijednim za članove zajednice. Ne ustručavajte se ostaviti komentar, posebno ako smo nešto propustili ili smo netočni. Hvala na podršci i sretno #buidling!