uitgave van de Matrix-server , dat de overgang van de ontwikkeling naar de bètatestfase markeert. Dendrite wordt ontwikkeld door het kernteam van ontwikkelaars van het gedecentraliseerde communicatieplatform Matrix en wordt gepositioneerd als de implementatie van de tweede generatie servercomponenten van Matrix. In tegenstelling tot de referentieserver , geschreven in de programmeertaal Python, is de code van Dendrite in de programmeertaal Go. Beide officiële implementaties worden verspreid onder de Apache 2.0-licentie. In het kader van het project wordt een versie van de Matrix-server in de programmeertaal Rust apart ontwikkeld, die valt onder de MIT-licentie.
De nieuwe server is gericht op het bereiken van hoge efficiëntie, betrouwbaarheid en schaalbaarheid. Dendrite overtreft Synapse in prestaties, vereist aanzienlijk minder geheugen om te functioneren en kan worden geschaald via load balancing over meerdere knooppunten. De architectuur van Dendrite ondersteunt horizontale schaalbaarheid en is gebaseerd op het scheiden van handlers in de vorm van microservices, waarbij elk exemplaar van de microservice zijn eigen tabellen in de database heeft. De afhandeling van aanvragen naar microservices wordt verzorgd door de load balancer. Voor het paralleliseren van operaties in de code worden goroutines gebruikt, wat het mogelijk maakt om de middelen van alle CPU-kernen te benutten zonder ze te splitsen in afzonderlijke processen.
Dendrite ondersteunt werking in twee modi - monolithisch en meervoudig component (polylith). In de monolithische modus zijn alle microservices samengevoegd in één uitvoerbaar bestand, draaien ze in één proces en communiceren ze rechtstreeks met elkaar. In de meervoudig component (cluster) modus kunnen microservices afzonderlijk worden gestart, ook verspreid over verschillende knooppunten. De interactie tussen de componenten in
de meervoudige component modus vindt plaats via een interne HTTP API en het platform .
De ontwikkeling is gebaseerd op de specificaties van het Matrix-protocol en maakt gebruik van twee testsets - de gezamenlijke tests met Synapse en een nieuwe set . In de huidige stadium van ontwikkeling slaagt Dendrite met succes in 56% van de tests van de Client-Server API en 77% van de tests van de Federation API, terwijl de feitelijke functionele dekking wordt geschat op 70% voor de Client-Server API en 95% voor de Federation API.
De bèta-testfase getuigt van de gereedheid van Dendrite voor de initiële implementatie en de overgang naar ontwikkeling met periodieke vrijgaven van nieuwe versies. Tussen de versies zal nu een update van het database opslagschema worden gegarandeerd (in tegenstelling tot het installeren van snapshots vanuit de repository, na de update gaat de inhoud van de database niet verloren). Wijzigingen die de backward compatibility schenden, de database-structuur wijzigen of aanpassing van de configuratie vereisen, worden alleen in significante versies voorgesteld. Dendrite wordt momenteel aanbevolen om in een monolithische modus te gebruiken in combinatie met de PostgreSQL-database voor het creëren van kleine originele servers (homeserver) en P2P-knooppunten. Het gebruik van SQLite wordt voorlopig niet aanbevolen vanwege onopgeloste problemen met het verwerken van gelijktijdige operaties.
Van de nog niet geïmplementeerde mogelijkheden in Dendrite zijn er meldingen over het ontvangen van berichten, leesbevestigingen, pushmeldingen, OpenID, koppeling aan e-mail, server-side zoeken, gebruikerscatalogus, gebruikers negeren lijsten, het creëren van groepen en gemeenschappen, het inschatten van de online aanwezigheid van een gebruiker, gasttoegang, en interactie met externe netwerken.
De basisfunctionaliteit voor het werken met chatruimtes is beschikbaar (aanmaken, uitnodigen, authenticatieregels), middelen voor federatie van deelnemers in kamers, synchronisatie van evenementen na terugkeer uit offline, accounts, profielen, indicator voor het typen, uploaden en downloaden van bestanden (Media API), het bewerken van berichten, ACL, tag-koppeling en het beheren van lijsten van apparaten en sleutels voor end-to-end encryptie.
Ter herinnering, het platform voor het organiseren van gedecentraliseerde communicatie, Matrix, gebruikt HTTPS+JSON als transportmiddel met de mogelijkheid om WebSockets of een protocol gebaseerd op +. Het systeem wordt gevormd als een gezamenlijke van servers die met elkaar kunnen communiceren en worden samengevoegd in een gedeeld gedecentraliseerd netwerk. Berichten worden gerepliceerd over alle servers waarop de deelnemers aan de berichtuitwisseling zijn aangesloten. Berichten worden verspreid over de servers op een manier die lijkt op hoe commits worden verspreid tussen Git-repositories. In het geval van tijdelijke uitschakeling van een server gaan berichten niet verloren, maar worden ze aan gebruikers overgedragen zodra de server weer operationeel is. Verschillende opties voor gebruikersidentificatie worden ondersteund, waaronder e-mail, telefoonnummer, Facebook-account, enz.
In het netwerk is er geen enkel punt van falen of controle over de berichten. Alle servers die deel uitmaken van de discussie zijn gelijkwaardig aan elkaar.
Elke gebruiker kan zijn eigen server opzetten en deze verbinden met het gezamenlijke netwerk. Het is mogelijk om te creëren voor de interactie van Matrix met systemen op basis van andere protocollen, bijvoorbeeld, diensten voor bidirectionele berichtverzending naar IRC, Facebook, Telegram, Skype, Hangouts, E-mail, WhatsApp en Slack. Naast directe tekstcommunicatie en chatorganisatie kan het systeem worden gebruikt voor bestandsoverdracht, het verzenden van meldingen,
het organiseren van videoconferenties, het maken van spraak- en video-oproepen. Ook worden geavanceerde mogelijkheden zoals tekstinvoer notificaties, online aanwezigheid van gebruikers, leesbevestiging, push-notificaties, server-side zoekopdrachten, synchronisatie van geschiedenis en clientstatus ondersteund.
Bron: opennet.ru
