Dendrite to serwer komunikacyjny opracowywany przez zespół Matrix i pozycjonowany jako implementacja drugiej generacji komponentów serwera Matrix.
W przeciwieństwie do referencyjnego serwera Synapse napisanego w Pythonie, kod Dendrite jest tworzony w Go. Obie oficjalne implementacje są rozpowszechniane na licencji Apache 2.0.
W ramach projektu Ruma tworzona jest oddzielna wersja serwera Matrix w języku Rust, który jest rozpowszechniany na licencji MIT.
Nowy serwer ma zapewniać wysoką wydajność, niezawodność i skalowalność.
O Dendrite
Dendrite wyprzedza Synapse pod względem wydajności, wymaga znacznie mniej pamięci do działania i może być skalowany poprzez równoważenie obciążenia na wielu węzłach.
Architektura Dendrite obsługuje skalowanie poziome i opiera się na rozdzieleniu kontrolerów w formie mikrousług, gdzie każda instancja mikrousługi ma własne tabele w bazie danych.
Moduł równoważenia obciążenia jest odpowiedzialny za wysyłanie wywołań do mikrousług. Wątki (procedury go) służą do zrównoleglenia operacji w kodzie, co pozwala na wykorzystanie zasobów wszystkich rdzeni procesora bez dzielenia ich na oddzielne procesy.
Dendryt obsługuje pracę w dwóch trybach: monolitycznym i wieloskładnikowym (polilitycznym).
- W trybie monolitycznym Wszystkie mikrousługi są połączone w pliku wykonywalnym, uruchamiane w procesie i bezpośrednio współdziałają ze sobą.
- W trybie wielokomponentowym (klaster), mikrousługi mogą być uruchamiane osobno, nawet z różnorodnością na różnych węzłach. Interakcja komponentów w trybie wieloskładnikowym odbywa się za pomocą wewnętrznego interfejsu API HTTP i platformy Apache Kafka.
Rozwój jest prowadzony w oparciu o specyfikacje protokołu Matrix i przy użyciu dwóch zestawów testów: wspólnych testów sytest z Synapse i nowego pakietu Complement.
Na obecnym etapie rozwoju Dendrite pomyślnie przechodzi 56% testów interfejsu API klient-serwer i 77% testów interfejsu API federacyjnego, podczas gdy rzeczywiste pokrycie funkcjonalności szacuje się na 70% w przypadku interfejsu API klient-serwer i 95% w przypadku interfejsu API federacyjnego.
Etap beta oznacza, że Dendrite jest gotowy do wstępnego wdrożenia i przejścia do fazy rozwoju wraz z regularnymi nowymi wersjami. Pomiędzy wersjami schemat przechowywania danych w bazie danych będzie teraz aktualizowany (w przeciwieństwie do instalowania fragmentów z repozytorium, po aktualizacji zawartość bazy danych nie zostanie utracona).

Zmiany, które naruszają zgodność z poprzednimi wersjami, zmieniają strukturę bazy danych lub wymagają zmian w konfiguracji, będą oferowane tylko w wersjach głównych.
Obecnie do tworzenia małych serwerów domowych i węzłów P2P zaleca się używanie Dendrite w trybie monolitycznym z systemem DBMS PostgreSQL . SQLite nie jest jeszcze zalecany ze względu na nierozwiązane problemy z obsługą operacji współbieżnych.
Funkcje, które nie zostały jeszcze zaimplementowane w Dendrite , obejmują : potwierdzanie wiadomości, potwierdzenia odczytu, powiadomienia push, OpenID, łączenie wiadomości e-mail, wyszukiwanie po stronie serwera, katalog użytkowników, listy ignorowanych użytkowników, tworzenie grup i społeczności, ocenę obecności użytkownika w sieci, opinie gości i interakcję z sieciami zewnętrznymi.
Podstawowe funkcjonalności do obsługi czatów (tworzenie, zaproszenia, zasady uwierzytelniania), sposób federacji uczestników w pokojach, synchronizacja wydarzeń po powrocie z trybu offline, konta, profile, wskazanie numeru, pobieranie i wysyłanie plików do edycji (Media API) są dostępne do użytku z wiadomościami, listami ACL, znakowaniem i kompleksowym urządzeniem szyfrującym oraz listami kluczy.
Przypomnijmy, że platforma Matrix do organizacji zdecentralizowanej komunikacji wykorzystuje protokół transportowy HTTPS + JSON, z możliwością wykorzystania WebSockets lub protokołu opartego na CoAP + Noise. System jest zbudowany jako społeczność serwerów, które mogą ze sobą współdziałać i łączyć się we wspólną, zdecentralizowaną sieć.
Wiadomości są replikowane na wszystkich serwerach, z którymi połączeni są uczestnicy przesyłania wiadomości. Wiadomości propagują się między serwerami w sposób podobny do propagacji zatwierdzeń między repozytoriami Git.
Źródło: https://matrix.org