Matrix-Server Veröffentlichung , der den Übergang der Entwicklung in die Beta-Testphase markiert hat. Dendrite wird von dem Hauptteam der Entwickler der dezentralen Kommunikationsplattform Matrix entwickelt und positioniert sich als eine Implementierung der zweiten Generation von Matrix-Serverkomponenten. Im Gegensatz zum Referenzserver , der in der Programmiersprache Python geschrieben ist, ist der Dendrite-Code in der Programmiersprache Go. Beide offiziellen Implementierungen werden unter der Lizenz Apache 2.0 verteilt. Im Rahmen des Projekts wird außerdem eine Variante des Matrix-Servers in der Programmiersprache Rust entwickelt, die unter der MIT-Lizenz.
Der neue Server zielt darauf ab, hohe Effizienz, Zuverlässigkeit und Skalierbarkeit zu erreichen. Dendrite übertrifft Synapse in der Leistung, benötigt deutlich weniger Speicher und kann durch Lastverteilung auf mehrere Knoten skaliert werden. Die Architektur von Dendrite unterstützt horizontale Skalierung und basiert auf der Trennung von Handlern in Form von Microservices, wobei jede Instanz eines Microservices ihre eigenen Tabellen in der Datenbank hat. Die Verwaltung der Anfragen an die Microservices erfolgt durch den Lastverteiler. Zur Parallelisierung von Operationen im Code werden Goroutinen eingesetzt, die es ermöglichen, die Ressourcen aller CPU-Kerne ohne Trennung in separate Prozesse zu nutzen.
Dendrite unterstützt den Betrieb in zwei Modi — monolithisch und mehrkomponentig (Polylith). Im monolithischen Modus sind alle Microservices in einer ausführbaren Datei gebündelt, laufen in einem Prozess und interagieren direkt miteinander. Im mehrkomponentigen (Cluster-)Modus können Microservices separat gestartet werden, auch auf unterschiedlichen Knoten verteilt. Die Interaktion der Komponenten erfolgt in
Im Multi-Component-Modus erfolgt dies über die interne HTTP-API und die Plattform .
Die Entwicklung basiert auf den Spezifikationen des Matrix-Protokolls und verwendet zwei Testsuiten — die gemeinsamen Tests mit Synapse und einer neuen Suite . In der aktuellen Entwicklungsphase besteht Dendrite erfolgreich aus 56 % der Client-Server-API-Tests und 77 % der Federation-API-Tests, wobei die tatsächliche Funktionalitätsabdeckung für die Client-Server-API auf 70 % und für die Federation-API auf 95 % geschätzt wird.
Die Beta-Testphase zeigt, dass Dendrite bereit für die erste Implementierung ist und der Übergang zur Entwicklung mit regelmäßigen neuen Versionen erfolgt. Zwischen den Versionen wird nun ein Update des Datenbankschemas in der DB sichergestellt (im Gegensatz zur Installation von Snapshots aus dem Repository wird der Inhalt der Datenbank nach dem Update nicht verloren gehen). Änderungen, die die Abwärtskompatibilität verletzen, die Struktur der DB ändern oder Anpassungen der Konfiguration erfordern, werden nur in bedeutenden Versionen vorgeschlagen. Dendrite wird derzeit empfohlen, im monolithischen Modus gemeinsam mit der PostgreSQL-Datenbank zur Erstellung kleiner Ausgangsserver (homeserver) und P2P-Knoten zu verwenden. Die Verwendung von SQLite wird derzeit aufgrund ungelöster Probleme mit der Verarbeitung gleichzeitiger Operationen nicht empfohlen.
Zu den derzeit in Dendrite nicht umgesetzten Funktionen gehören Nachrichtenbestätigungen, Lesebestätigungen, Push-Benachrichtigungen, OpenID, E-Mail-Bindung, serverseitige Suche, Benutzerverzeichnis, Benutzer-Sperrlisten, Gruppen- und Community-Erstellung, Online-Präsenzbewertung, Gäseeingänge und Interaktionen mit Drittanbietern.
Verfügbar sind grundlegende Funktionen für die Nutzung von Chat-Rooms (Erstellung, Einladungen, Authentifizierungsregeln), Methoden zur Föderation von Teilnehmern in Räumen, Synchronisierung von Ereignissen nach der Rückkehr aus dem Offline-Modus, Benutzerkonten, Profile, Statusanzeige, Hochladen und Teilen von Dateien (Media API), Bearbeitung von Nachrichten, ACL, Tag-Bindung und Verwaltung von Gerätelisten sowie Schlüsseln für End-to-End-Verschlüsselung.
Zur Erinnerung: Die Plattform für die Organisation dezentralisierter Kommunikation, Matrix, nutzt HTTPS+JSON als Transportprotokoll mit der Möglichkeit zur Verwendung von WebSockets oder einem Protokoll auf Basis von +. Das System wird als ein Netzwerk von Servern gebildet, die miteinander interagieren können und sich zu einem gemeinsamen dezentralen Netzwerk zusammenschließen. Nachrichten werden über alle Server, mit denen die Teilnehmer verbunden sind, repliziert. Nachrichten verbreiten sich über die Server ähnlich, wie Commits zwischen Git-Repositories verbreitet werden. Im Falle einer vorübergehenden Serverabschaltung gehen keine Nachrichten verloren, sondern werden den Nutzern nach Wiederherstellung des Serverbetriebs übermittelt. Verschiedene Varianten von Nutzer-IDs werden unterstützt, einschließlich E-Mail, Telefonnummer, Facebook-Konto usw.
Im Netzwerk gibt es keinen einzelnen Ausfall- oder Kontrollpunkt für Nachrichten. Alle Server, die das Gespräch abdecken, sind gleichberechtigt.
Jeder Benutzer kann seinen eigenen Server betreiben und ihn mit dem gemeinsamen Netzwerk verbinden. Es ist möglich, für die Interaktion von Matrix mit Systemen auf Basis anderer Protokolle zu erstellen, zum Beispiel Dienste für die bidirektionale Nachrichtenübertragung in IRC, Facebook, Telegram, Skype, Hangouts, E-Mail, WhatsApp und Slack. Neben der sofortigen Textkommunikation und der Organisation von Chats kann das System auch zum Dateitransfer, zum Versenden von Benachrichtigungen,
zur Organisation von Konferenzen sowie für Sprach- und Videoanrufe verwendet werden. Darüber hinaus werden erweiterte Funktionen wie die Benachrichtigung über Texteingaben, die Anwesenheitsbewertung eines Benutzers online, Lesebestätigungen, Push-Benachrichtigungen, serverseitige Suche, Synchronisierung von Historie und Benutzerstatus unterstützt.
Quelle: opennet.ru
