Der neue Server soll eine hohe Effizienz, Zuverlässigkeit und Skalierbarkeit erreichen. Dendrite übertrifft Synapse, benötigt deutlich weniger Arbeitsspeicher und kann durch Lastausgleich über mehrere Knoten hinweg skaliert werden. Die Dendrite-Architektur unterstützt die horizontale Skalierung und basiert auf der Trennung von Handlern in Form von Microservices, wobei jede Microservice-Instanz über eigene Tabellen in der Datenbank verfügt. Der Load Balancer leitet Aufrufe an Microservices weiter. Um Vorgänge im Code zu parallelisieren, werden Threads (Go-Routinen) verwendet, die es ermöglichen, die Ressourcen aller CPU-Kerne zu nutzen, ohne sie in separate Prozesse aufzuteilen.
Dendrite unterstützt zwei Modi: monolithisch und polylithisch. Im monolithischen Modus werden alle Microservices in einer einzigen ausführbaren Datei verpackt, in einem einzigen Prozess ausgeführt und interagieren direkt miteinander. Im Mehrkomponentenmodus (Cluster) können Microservices separat gestartet werden, auch über verschiedene Knoten verteilt. Zusammenspiel von Komponenten in
Der Mehrkomponentenmodus wird mithilfe der internen HTTP-API und -Plattform ausgeführt
Die Entwicklung erfolgt auf Basis der Matrix-Protokollspezifikationen und unter Verwendung von zwei Testsuiten – Tests, die für Synapse üblich sind
Die Beta-Testphase zeigt, dass Dendrite für die erste Implementierung und den Übergang zur Entwicklung bereit ist, wobei regelmäßig neue Versionen veröffentlicht werden. Zwischen den Releases wird nun das Datenspeicherschema in der Datenbank aktualisiert (anders als bei der Installation von Slices aus dem Repository gehen die Inhalte der Datenbank nach der Aktualisierung nicht verloren). Änderungen, die die Abwärtskompatibilität beeinträchtigen, die Datenbankstruktur ändern oder Konfigurationsänderungen erfordern, werden nur in Hauptversionen angeboten. Derzeit wird empfohlen, Dendrite im monolithischen Modus in Verbindung mit dem PostgreSQL-DBMS zu verwenden, um kleine Homeserver und P2P-Knoten zu erstellen. Die Verwendung von SQLite wird aufgrund ungelöster Probleme bei der Handhabung gleichzeitiger Vorgänge noch nicht empfohlen.
Zu den Funktionen, die noch nicht in Dendrite implementiert wurden, gehören Bestätigungen des Nachrichtenempfangs, Lesemarkierungen, Push-Benachrichtigungen, OpenID, E-Mail-Bindung, serverseitige Suche, Benutzerverzeichnis, Benutzer-Ignorierlisten, Erstellen von Gruppen und Communities, Bewertung der Online-Präsenz von Benutzern, Gasteingaben, Interaktion mit Netzwerken Dritter.
Zur Nutzung stehen Grundfunktionen für Chatrooms (Erstellung, Einladungen, Authentifizierungsregeln), Mittel zur Zusammenführung von Teilnehmern in Räumen, Synchronisierung von Ereignissen nach der Rückkehr aus dem Offline-Modus, Konten, Profile, Wählanzeige, Herunterladen und Hochladen von Dateien (Medien-API) zur Verfügung. Bearbeiten von Nachrichten, ACLs, Tag-Bindung und Arbeiten mit Geräte- und Schlüssellisten für die End-to-End-Verschlüsselung.
Erinnern wir uns daran, dass die Plattform zur Organisation der dezentralen Kommunikation Matrix HTTPS+JSON als Transportmittel mit der Möglichkeit zur Verwendung von WebSockets oder einem darauf basierenden Protokoll verwendet
Es gibt keinen Single Point of Failure oder Nachrichtenkontrolle im gesamten Netzwerk. Alle in der Diskussion behandelten Server sind einander gleich.
Jeder Benutzer kann seinen eigenen Server betreiben und ihn an ein gemeinsames Netzwerk anschließen. Es ist möglich zu erstellen
Organisation von Telefonkonferenzen, Durchführung von Sprach- und Videoanrufen. Es unterstützt auch erweiterte Funktionen wie Benachrichtigungen über Eingaben, Auswertung der Online-Präsenz des Benutzers, Lesebestätigung, Push-Benachrichtigungen, serverseitige Suche, Synchronisierung des Verlaufs und des Client-Status.
Source: opennet.ru