3Box Research: Porównanie rozproszonych baz danych GUN, OrbitDB i Scuttlebutt

Podobieństwa i różnice między popularnymi protokołami rozproszonej bazy danych

Ten post zawiera podsumowanie badań przeprowadzonych przez zespół 3Box. Podkreślamy podobieństwa i różnice między popularnymi technologiami rozproszonej bazy danych, a ostatecznie stwierdzamy, dlaczego zdecydowaliśmy się na OrbitDB.

Przegląd popularnych rozproszonych baz danych

W web3 wydaje się, że istnieje niekończąca się podaż nowych i ekscytujących technologii, które rzekomo rozwiązują twoje problemy w nowatorski sposób. Projektując 3Box, bazę danych społecznościowych dla użytkowników Ethereum, potrzebowaliśmy rozwiązania rozproszonej bazy danych (DDB) do przechowywania i udostępniania treści poza łańcuchem. Zaczęliśmy od zbadania niektórych z najpopularniejszych obecnie implementacji DDB na rynku. Jesteśmy bardzo podekscytowani otwarciem naszych odkryć i udostępnieniem ich społeczności.

Badanie to zapewni przegląd trzech różnych protokołów rozproszonej bazy danych, które zostały wzięte pod uwagę podczas badań i rozwoju 3Box: GUN, OrbitDB i Secure Scuttlebutt (SSB).

PISTOLET

GUN to zdecentralizowana baza danych grafów, która jest najpierw offline. Zapewnia programistom łatwy interfejs do tworzenia aplikacji, które działają w trybie offline i które są automatycznie synchronizowane z innymi węzłami po połączeniu aplikacji z serwerem koordynującym. W momencie pisania ma około 3K pobrań miesięcznie (na npm) i ma aktywną społeczność.

OrbitDB

OrbitDB to protokół bazy danych peer-to-peer, a także implementacja protokołu. Zapewnia różne typy baz danych oprócz podstawowego protokołu i umożliwia użytkownikom wdrażanie własnych typów. W chwili pisania tego tekstu ma około 3 000 pobrań miesięcznie (na npm) i jest rozwijany przez sieci Haja.

Secure Scuttlebutt (SSB)

SSB to magazyn dziennika peer-to-peer wykorzystywany jako baza danych, dostawca tożsamości i system przesyłania wiadomości. Jest znany przede wszystkim z tego, że jest wykorzystywany jako sieć społecznościowa; Patchwork to ich najpopularniejszy klient. Ich klient, Scuttlebot, ma obecnie około 3 000 pobrań miesięcznie (na npm). SSB ma dość aktywną społeczność użytkowników w sieci społecznościowej.

Warstwy rozproszonej bazy danych

Podczas badania Gun, OrbitDB i Scuttlebutt zauważyliśmy, że architektury DDB mają kilka podobieństw. Protokoły można rozpatrywać w osobnych warstwach:

  1. Sieć: protokół komunikacyjny, który utrzymuje synchronizację węzłów
  2. Dziennik zdarzeń: podstawowy model danych dla bazy danych
  3. Uwierzytelnianie użytkownika: metoda kontroli dostępu do bazy danych
  4. Interfejs: interfejs API udostępniony programistom

W dalszej części tej sekcji zostaną ocenione trzy dyski DDB według tych warstw, poczynając od sieci.

1. Sieć

Rozproszone systemy baz danych muszą niezawodnie komunikować aktualizacje między węzłami równorzędnymi. Warstwa sieciowa określa, w jaki sposób węzły DDB komunikują się i zgadzają się na te aktualizacje. Warstwa sieciowa jest bardzo ważnym aspektem każdej rozproszonej bazy danych, ponieważ zła warstwa sieciowa może prowadzić do utraty aktualizacji i niespójnego stanu między węzłami.

Przyjrzyjmy się, jak trzy DDB implementują swoje protokoły sieciowe p2p:

GUN wdraża stos sieci za pomocą najnowocześniejszej technologii webrtc i websocket. Oznacza to, że przeglądarki mogą komunikować się ze sobą bezpośrednio, bez potrzeby posiadania jakiegokolwiek serwera (z wyjątkiem serwera webrtc do negocjacji połączenia, co jest prawdą dla wszystkich technologii p2p opartych na przeglądarce).

SSB definiuje i implementuje niestandardową sieć p2p. Umożliwia odkrywanie rówieśników w sieci lokalnej, łączenie się z pubami (węzłami publicznymi) i odkrywanie pubów reklamowanych przez innych użytkowników. Dzięki temu SSB może działać bez polegania na centralnym serwerze, który ma być uruchomiony.

OrbitDB wykorzystuje libp2p, który jest modułową biblioteką p2p, która może komunikować się przez wiele różnych transportów i działa w wielu różnych środowiskach. js-libp2p pozwala klientom przeglądarki komunikować się z serwerami websocket, z innymi klientami przeglądarki przez webrtc i wiele innych. Jest obecnie używany w IPFS, substracie parzystości i będzie używany w Eth2.0.

2. Zarządzanie stanem

Rozproszone systemy baz danych muszą modelować dane w taki sposób, aby użytkownicy mogli zagwarantować ich integralność. Jest to osiągane na różne sposoby przez różne systemy. Jednym z podejść jest utworzenie połączonej listy z danymi. Można również stosować różne typy CRDT.

Połączona lista jest używana jako podstawowy model danych w dwóch rozproszonych systemach baz danych, które zbadaliśmy. Każdy link jest skrótem poprzedniego wpisu; a każdy wpis jest samodzielną aktualizacją bazy danych. Istnieją jednak różnice w sposobie wdrażania list połączonych w systemach:

SSB korzysta z dziennika tylko do dołączania, który nazywają kanałem. Z tego, co możemy znaleźć w ich dokumentach, wydaje się, że ten dziennik zakłada, że ​​nie ma konfliktów. W tym modelu zakładają, że użytkownik zawsze zna najnowszy stan swojego kanału. Może to powodować problemy, jeśli użytkownik ma wiele urządzeń dostarczających sprzeczne aktualizacje, co może łatwo nastąpić, jeśli użytkownik przejdzie w tryb offline na jednym urządzeniu, ale nie na innym. Daj nam znać, jeśli masz więcej wglądu w to, czy SSB zajmuje się nim w jakiś sposób, ponieważ nie jesteśmy tego świadomi.

OrbitDB korzysta z CRDT, które są oparte na dzienniku tylko do dołączania, który może rozwidlać i łączyć, zapewniając ostateczną spójność. Oznacza to, że klienci mogą przejść w tryb offline i tworzyć sprzeczne aktualizacje, ale kiedy ponownie przejdą w tryb online, zostaną zsynchronizowani i staną się tak samo.

GUN korzysta z CRDT opartego na stanie, co oznacza, że ​​nie używa tylko dziennika dołączania. Zamiast tego komunikuje stan systemu w dowolnym momencie. Mają tutaj krótki opis.

3. Uwierzytelnianie użytkownika

Bazy danych potrzebują sposobu zarządzania uprawnieniami nad tym, kto może wykonywać różne działania. Ponieważ rozproszone bazy danych nie mogą polegać na centralnym serwerze do zarządzania uprawnieniami kontroli dostępu, uwierzytelnianie może polegać na kryptografii klucza publicznego.

SSB ma pojęcie tożsamości, w której plik danych może być własnością tylko jednej tożsamości. Tożsamość w przypadku SSB jest po prostu asymetryczną parą kluczy. Jest to doskonałe rozwiązanie w przypadkach użycia, takich jak sieci społecznościowe podobne do Twittera, w których użytkownicy publikują globalne posty, ale mogą być mniej idealne do sekcji komentarzy itp.

OrbitDB ma system kontroli dostępu, w którym definiujesz zestaw kluczy publicznych podczas tworzenia bazy danych. To pozwala mieć bazę danych, którą wielu użytkowników może aktualizować jednocześnie. Obecnie nie ma możliwości zmiany początkowego zestawu kluczy publicznych, chociaż pracujemy nad bardziej zaawansowanym systemem uwierzytelniania.

GUN ma system uwierzytelniania oparty na aliasie i haśle. Patrząc na ich przykłady, wydaje się, że można dynamicznie przyznać ludziom dostęp, jednak ich dokumentacji brakuje.

4. Interfejs

Przy wyborze bazy danych programiści są zainteresowani i elastyczni. Zadaliśmy sobie zatem pytanie, jak łatwy jest interfejs lub interfejs API, który umożliwia programistom interakcję z bazą danych i tworzenie aplikacji na niej opartych?

SSB ma koncepcję wtyczek, które zapewniają różne „widoki” w dzienniku SSB. Naprawdę nie mogliśmy znaleźć dużej dokumentacji na temat pisania tych wtyczek, ale wygląda na to, że w zasadzie musisz napisać mapę i ograniczyć funkcję.

OrbitDB oferuje różne opcje dla różnych typów magazynów danych, które mają dość przejrzysty interfejs API. Magazyny dzienników są dość podobne do kanałów SSB, a magazyny klucz-wartość mają interfejs podobny do localStorage, który jest dostępny we wszystkich zwykłych przeglądarkach internetowych.

GUN używa koncepcji wykresu jako interfejsu do manipulowania bazą danych. Zasadniczo dostajesz węzeł, możesz następnie umieszczać w nim dane lub nasłuchiwać aktualizacji. Ich przykład witaj na świecie pomoże ci zrozumieć, jak to działa.

Kopia zapasowa i hosting danych

Nie dyskutowaliśmy jeszcze, gdzie w różnych systemach są tworzone kopie zapasowe danych użytkownika. Wynika to z faktu, że rozproszone bazy danych świetnie sobie radzą z rozwiązywaniem problemów z pamięcią masową od programistów. Jednak zdecydowanie chcemy ocenić podstawowe sieci do przechowywania danych i hostingu tych trzech systemów, aby sprawdzić dostępność, odporność i użyteczność. Utrata dostępu do danych, nawet na krótki czas, byłaby dla użytkowników straszna.

Kilka pytań, które możesz rozważyć: Co zrobić, jeśli użytkownik straci telefon lub komputer, na którym przechowywane są wszystkie dane? A co jeśli użytkownik A chce uzyskać informacje o użytkowniku B, gdy użytkownik A jest offline?

GUN pozwala użytkownikom połączyć się z serwerem http, który hostuje wszystkie dane w bazie danych użytkownika. Serwer http uruchamia instancję bazy danych pistoletu i replikuje wszystkie zmiany od swoich klientów.

SSB ma pojęcie pubów, które są po prostu publicznymi węzłami SSB, które śledzą wielu użytkowników. Jeśli użytkownicy stracą swoje dane, mogą otrzymać kopię z pubu - jeśli nadal jest dostępna. Uwaga: użytkownicy muszą wyraźnie poprosić o śledzenie przez pub.

Z drugiej strony OrbitDB nie ma natywnej koncepcji węzła, który tworzy kopię zapasową danych. Zamiast tego używa protokołu pubsub libp2p do wykrywania peerów replikujących daną instancję DB. Umożliwia to aktywną kopię zapasową bazy danych użytkownika w wielu instancjach równorzędnych, bez konieczności jawnego łączenia się z którąkolwiek z nich. Uważamy, że to całkiem miłe.

Wniosek

Ogólnie rzecz biorąc, trzy bazy danych mają kilka podobieństw, a wszystkie z nich są wciąż na wczesnym etapie rozwoju. W przyszłości wyobrażamy sobie, że niektóre z tych projektów mogą zacząć zmieniać niektóre warstwy. Na przykład pomyślelibyśmy, że byłoby naprawdę fajnie, gdyby SSB działało na libp2p!

OrbitDB

OrbitDB

Obecnie wydaje się, że OrbitDB zapewnia najbardziej elastyczny system rozproszonej bazy danych spośród trzech rozważanych opcji.

  • Interfejs Orbit oferuje najszerszy zakres potencjalnych zastosowań. Różnorodność magazynów danych oferowanych przez Orbit zapewnia opcjonalność i elastyczność w budowaniu wielu różnych rodzajów aplikacji i narzędzi dla bardzo szerokiego zakresu zastosowań.
  • Sieć Orbit oparta jest na znanych, dobrze utrzymanych technologiach. libp2p i ipfs stanowią solidne podstawy dla systemu Orbit, z którym wielu członków społeczności Ethereum prawdopodobnie już się zapoznało. Inne znaczące zalety libp2p to fakt
  • Orbitę można bardzo łatwo uruchomić w przeglądarce. Dzieje się tak ponownie z powodu libp2p.
  • Sieć Orbit pozwala wielu uczestnikom hostować i udostępniać dane. libp2p pozwala OrbitDB na łatwą synchronizację aktualizacji bazy danych z wielu peerów, co pozwala wielu hostom na hostowanie danych. Z tego powodu Orbit pozwala na stworzenie sieci, do której każdy może się przyłączyć, aby zapewnić dostępność danych, dzięki czemu cała sieć jest bardziej niezawodna.

PISTOLET

Zespół 3Box uznał, że GUN jest interesujący i będziemy dalej badać koncepcję graficzną. Jednak jedną z wad projektu jest to, że dokumentacja jest dość nieuporządkowana, co utrudnia dobre zrozumienie, w jaki sposób można korzystać z DB.

SSB

Bezpieczny Scuttlebutt bardziej przypomina konkretną rozproszoną aplikację sieci społecznościowej niż bazę danych, na której można budować aplikacje. I rzeczywiście, sieć społecznościowa jest tym, co buduje zespół. SSB to fajny system, ale wydaje się być ograniczony i nieelastyczny w działaniu. To prawdopodobnie spowoduje, że programiści spróbują zbudować coś poza standardową siecią społecznościową opartą na pojedynczym kanale, z bardzo ograniczonymi opcjami. Stworzenie na nim różnorodnego zestawu aplikacji będzie trudne.

3Box jest oparty na OrbitDB

3Box buduje profile społecznościowe dla web3; i postanowiliśmy budować na OrbitDB ze wszystkich wyżej wymienionych powodów.

Aplikacja 3Box pozwala użytkownikom utworzyć profil społecznościowy dla ich adresu Ethereum, przesłać swoje informacje i zalogować się do dapps.

Nasz interfejs API profilów ułatwia pobieranie i ustawianie informacji o kontach Ethereum, co usprawnia wdrażanie, sprawia, że ​​udostępnianie danych jest bezbolesne, a także pomaga programistom dać użytkownikom kontrolę nad danymi, które są ważne.

Kontynuacja dyskusji

3Box to aktywna społeczność zainteresowana wszystkimi rzeczami rozproszonych baz danych. Jeśli masz przemyślenia, opinie, doświadczenie, chcesz wnieść swój wkład lub chcesz się zintegrować:

Dołącz do naszego Discorda

Będziemy wdzięczni i zachęcamy do dialogu wokół tych badań. Naszym celem jest uczynienie wartościowym dla członków społeczności. Nie wahaj się i zostaw komentarz, zwłaszcza jeśli coś przeoczyliśmy lub jest niepoprawny. Dziękujemy za wsparcie i szczęśliwego #buidling!