Pierwsza wersja klienta Peer-to-Peer sieci federacyjnej Matrix

Mieliśmy do czynienia z premierą eksperymentalnego klienta Riot P2P.


Riot — pierwotnie klient dla federacyjnej sieci Matrix. Modyfikacja P2P dodaje do klienta implementację serwera oraz federację bez użycia scentralizowanego DNS poprzez integrację libp2p, która jest również używana w IPFS. To pierwsza wersja klienta, która zachowuje sesję po ponownym załadowaniu strony, jednak w kolejnych dużych aktualizacjach (np. 0.2.0) dane nadal będą usuwane. Dlatego nie zaleca się korzystania z klienta do ważnych zadań.

W kliencie zrealizowano federację, tworzenie pokoi oraz wyświetlanie globalnego (bezserwerowego!) katalogu pokoi.

Jednak główna sieć Matrix, korzystająca z DNS, oraz sieć Matrix na libp2p na razie nie mogą się federować i współdziałać ze sobą.

Aby skorzystać z klienta, wystarczy nacisnąć przycisk logowania, po czym otrzymasz wygenerowane ID w sieci. Eksport danych nie jest na razie wspierany.

Ponieważ jest to niestabilna prezentacja możliwej koncepcji, możesz napotkać trudności:

  • Nie będziesz mógł zalogować się na swoje konto ani współdziałać z innymi klientami, jeśli serwer uruchomiony jako Service Worker zostanie zabity przez przeglądarkę po upływie czasu oczekiwania. Problem ten odnotowano w Firefoxie, który robi to po 30 sekundach bezczynności].
  • Na poziomie sieci libp2p obowiązują ograniczenia na liczbę wykonywanych działań w czasie, co może powodować problemy z federacją.

Rozpoczęcie prac nad wersją P2P Matrix jest motywowane pragnieniem programistów, aby dać większą swobodę swoim użytkownikom. Odłączenie od centralnego serwera pozwala ułatwić komunikację w ramach lokalnych i sieci mesh, a także w sytuacjach, gdy dostęp do zewnętrznej sieci jest ograniczony lub nie istnieje. To również korzystnie wpływa na prywatność, minimalizując przekazywane metadane, które w takim scenariuszu są przechowywane tylko przez uczestników konwersacji. Ostatecznie skłania to do przemyślenia obecnych koncepcji Matrix w celu osiągnięcia większej przenośności i bezpieczeństwa.

Implementacja serwerowego API osiągana jest dzięki kompilacji serwera Dendrite do kodu WebAssembly, który jest uruchamiany jednocześnie z klientem jako Service Worker, wykorzystując IndexedDB i SQLite do lokalnego przechowywania danych, w przypadku wersji webowej oraz opakowania Electron.
Dendryt to rozwijany "serwer drugiej generacji" Matrix napisany w języku Go, zaprojektowany z myślą o pełnej modułowości, który można również używać w monolitycznej formie. W trybie modułowym do komunikacji mikroserwisów używany jest Apache Kafka, a w monolitycznym — Naffka. Dokumentację dotyczącą budowy wersji P2P Dendryt można znaleźć na GitHubie.

Dendryt był pierwotnie koncepowany jako serwer ogólnego przeznaczenia, który miał być bezpośrednią alternatywą dla Synapse, napisanego w Pythonie, mającego problemy z wydajnością i skalowalnością. Jednak z powodu konieczności wsparcia i poważnego refaktoryzowania Synapse, rozwój Dendryt został na pewien czas wstrzymany. Ostatecznie jednak prace nad nim wznowiono, decydując się na rozwijanie istniejącej bazy kodu nie w kontekście ogólnego przeznaczenia, ale skupiając się na dostosowaniu do integracji z przenośnymi i słabymi urządzeniami klienckimi, takimi jak przeglądarki i telefony.

Obecna implementacja Dendryt znajduje się w wczesnym stadium rozwoju, ale już teraz jest wystarczająca do prostej federacji:

API Klient-Serwer: 34% (227/672 testów) — w górę z 33%
API Federacji: 34% (35/103 testów) — w górę z 27%

To nie jest pierwsza próba realizacji P2P. Wcześniej powstała inicjatywa stworzenia proxy CoAP w sieci Yggdrasil dla Synapse.


Twórcy protokołu Matrix nie koncentrują się wyłącznie na federacji i eksperymentują z narzędziami do jeszcze większej decentralizacji. Na przykład przeprowadzono eksperyment w celu obniżenia kosztów na poziomie transportu. Rozwijany jest demon Pantalaimon — proxy, do którego może podłączyć się każdy klient bez wsparcia szyfrowania i komunikować się z wiadomościami szyfrowanymi. Wszystkie przeprowadzone inicjatywy mają na celu w przyszłości pozbycie się powiązania logowania z serwerem, eliminując MXID, komunikując się z siecią za pomocą klucza publicznego, co już częściowo zrealizowano w Riot P2P.


Szczegółowe informacje na temat koncepcji planowanych realizacji można znaleźć w prezentacji FOSDEM 2020 na YouTube i w niedawno opublikowanym poście na blogu.

Istnieje również wersja Riot P2P dla Androida, oparta na kodzie starej aplikacji. W przyszłości planowane jest przeniesienie jej na aktualny RiotX.

Ponadto

  • Przedstawiono projekt TARDIS (Usługa Inspekcji Grafu DAG Bezgodzinnego) — debugger liniowego grafu zdarzeń (DAG) dla pokoi Matrix oparty na Riot P2P.

  • W projekcie Conduit (serwer opracowywany przez społeczność w języku Rust) teraz wprowadzono szyfrowanie i załączniki.

  • Pojawił się eksperymentalny serwer na Scala — Mascarene.

Źródło: linux.org.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster