Το Dendrite είναι ένας διακομιστής επικοινωνιών που αναπτύσσεται από την ομάδα Matrix και τοποθετείται ως υλοποίηση δεύτερης γενιάς των στοιχείων του διακομιστή Matrix.
Σε αντίθεση με τον διακομιστή αναφοράς Synapse που είναι γραμμένος στο Python, ο κώδικας Dendrite αναπτύσσεται στο Go. Και οι δύο επίσημες υλοποιήσεις διανέμονται με την άδεια Apache 2.0.
Ως μέρος του έργου Ruma, αναπτύσσεται μια ξεχωριστή έκδοση του διακομιστή Matrix στη γλώσσα Rust, η οποία διανέμεται με την άδεια MIT.
Ο νέος διακομιστής στοχεύει στην επίτευξη υψηλής απόδοσης, αξιοπιστίας και επεκτασιμότητας.
Σχετικά με το Dendrite
Το Dendrite προηγείται του Synapse όσον αφορά την απόδοση, απαιτεί πολύ λιγότερη μνήμη για να λειτουργήσει και μπορεί να κλιμακωθεί με εξισορρόπηση φορτίου σε πολλαπλούς κόμβους.
Η αρχιτεκτονική Dendrite υποστηρίζει οριζόντια κλιμάκωση και βασίζεται στον διαχωρισμό των ελεγκτών με τη μορφή μικρουπηρεσιών, όπου κάθε στιγμιότυπο μιας μικρουπηρεσίας έχει τους δικούς της πίνακες στη βάση δεδομένων.
Ο εξισορροπητής φορτίου είναι υπεύθυνος για την αποστολή κλήσεων σε μικροϋπηρεσίες. Τα νήματα (go ρουτίνες) χρησιμοποιούνται για να παραλληλίσουν τις λειτουργίες στον κώδικα, οι οποίες επιτρέπουν τη χρήση των πόρων όλων των πυρήνων της CPU χωρίς να χωρίζονται σε ξεχωριστές διαδικασίες.
Ο δενδρίτης υποστηρίζει την εργασία σε δύο λειτουργίες: μονολιθική και πολυσυστατική (πολυλιθική).
- Σε μονολιθική λειτουργία, Όλες οι μικροσυσκευές συνδέονται σε ένα εκτελέσιμο αρχείο, εκτελούνται σε μια διαδικασία και αλληλεπιδρούν απευθείας μεταξύ τους.
- Σε λειτουργία πολλών συστατικών (σύμπλεγμα), οι μικροσυσκευές μπορούν να ξεκινήσουν ξεχωριστά, ακόμη και με διαφορετικότητα σε διαφορετικούς κόμβους. Η αλληλεπίδραση συστατικών σε λειτουργία πολλών συστατικών πραγματοποιείται χρησιμοποιώντας το εσωτερικό HTTP API και την πλατφόρμα Apache Kafka.
Η ανάπτυξη πραγματοποιείται με βάση τις προδιαγραφές του πρωτοκόλλου Matrix και χρησιμοποιεί δύο σετ δοκιμών: τις κοινές δοκιμές sytest με το Synapse και τη νέα σουίτα συμπλήρωσης.
Στο τρέχον στάδιο ανάπτυξης, το Dendrite περνάει με επιτυχία το 56% των δοκιμών API client-server και το 77% των δοκιμών API ομοσπονδίας, ενώ η πραγματική κάλυψη λειτουργικότητας εκτιμάται στο 70% για το API client-server και στο 95% για το API ομοσπονδίας.
Το στάδιο beta υποδεικνύει ότι το Dendrite είναι έτοιμο για αρχική ανάπτυξη και μετάβαση στην ανάπτυξη με τακτικές νέες εκδόσεις. Μεταξύ των εκδόσεων, το σχήμα αποθήκευσης της βάσης δεδομένων θα ενημερώνεται πλέον (σε αντίθεση με την εγκατάσταση τμημάτων από το αποθετήριο, μετά την ενημέρωση, το περιεχόμενο της βάσης δεδομένων δεν θα χαθεί).

Αλλαγές που διακόπτουν την συμβατότητα προς τα πίσω, αλλάζουν τη δομή της βάσης δεδομένων ή απαιτούν αλλαγές στη διαμόρφωση θα προσφέρονται μόνο σε μεγάλες εκδόσεις.
Προς το παρόν, η χρήση του Dendrite σε μονολιθική λειτουργία με το PostgreSQL DBMS συνιστάται για τη δημιουργία μικρών οικιακών διακομιστών και κόμβων P2P. Το SQLite δεν συνιστάται ακόμη λόγω ανεπίλυτων προβλημάτων με τον χειρισμό ταυτόχρονων λειτουργιών.
Χαρακτηριστικά που δεν έχουν ακόμη υλοποιηθεί στο Dendrite περιλαμβάνουν : επιβεβαιώσεις μηνυμάτων, αποδεικτικά ανάγνωσης, ειδοποιήσεις push, OpenID, σύνδεση email, αναζήτηση από την πλευρά του διακομιστή, κατάλογο χρηστών, λίστες αγνόησης χρηστών, δημιουργία ομάδων και κοινοτήτων, αξιολόγηση της διαδικτυακής παρουσίας ενός χρήστη, σχόλια επισκεπτών και αλληλεπίδραση με δίκτυα τρίτων.
Βασική λειτουργικότητα για τη λειτουργία αιθουσών συνομιλίας (δημιουργία, προσκλήσεις, κανόνες ελέγχου ταυτότητας), μέσα ομοσπονδίας συμμετεχόντων σε δωμάτια, συγχρονισμός εκδηλώσεων μετά την επιστροφή από εκτός σύνδεσης, λογαριασμοί, προφίλ, ένδειξη κλήσης, λήψη και μεταφόρτωση αρχείων επεξεργασίας (Media API) είναι διαθέσιμα για χρήση μηνυμάτων, ACLs, ετικετών και συσκευών κρυπτογράφησης από άκρο σε άκρο και κλειδιών.
Υπενθυμίζεται ότι η πλατφόρμα Matrix για την οργάνωση αποκεντρωμένων επικοινωνιών χρησιμοποιεί HTTPS + JSON ως πρωτόκολλο μεταφοράς, με δυνατότητα αξιοποίησης WebSockets ή ενός πρωτοκόλλου που βασίζεται στο CoAP + Noise. Το σύστημα είναι δομημένο ως μια κοινότητα διακομιστών που μπορούν να αλληλεπιδρούν μεταξύ τους και να συνδυάζονται σε ένα κοινό αποκεντρωμένο δίκτυο.
Τα μηνύματα αναπαράγονται σε όλους τους διακομιστές στους οποίους είναι συνδεδεμένοι οι συμμετέχοντες στην ανταλλαγή μηνυμάτων. Τα μηνύματα διαδίδονται μεταξύ των διακομιστών με τρόπο παρόμοιο με τον τρόπο που διαδίδονται οι υποβολές μεταξύ των αποθετηρίων Git.
Πηγή: https://matrix.org