Dendrite é um servidor de comunicações que está sendo desenvolvido pela equipe Matrix e se posiciona como uma implementação de segunda geração dos componentes do servidor Matrix.
Ao contrário do servidor de referência Synapse escrito em Python, o código Dendrite é desenvolvido em Go. Ambas as implementações oficiais são distribuídas sob a licença Apache 2.0.
Como parte do projeto Ruma, uma versão separada do servidor Matrix na linguagem Rust está sendo desenvolvida, que é distribuída sob a licença do MIT.
O novo servidor visa alcançar alta eficiência, confiabilidade e escalabilidade.
Sobre Dendrito
O Dendrite está à frente do Synapse em termos de desempenho, requer muito menos memória para operar e pode ser escalado através do balanceamento de carga em vários nós.
A arquitetura Dendrite suporta escalonamento horizontal e é baseada na separação de controladores na forma de microsserviços, onde cada instância de um microsserviço possui suas próprias tabelas no banco de dados.
O balanceador de carga é responsável por enviar chamadas para microsserviços. Threads (rotinas go) são usados para paralelizar operações no código, o que permite que os recursos de todos os núcleos da CPU sejam usados sem dividi-los em processos separados.
O Dendrite suporta o funcionamento em dois modos: monolítico e multicomponente (polilito).
- No modo monolítico, Todos os microsserviços são vinculados em um arquivo executável, executados em um processo e interagem diretamente entre si.
- No modo multi-componente (cluster), os microsserviços podem ser iniciados separadamente, mesmo com diversidade em nós diferentes. A interação do componente em modo multicomponente é realizada usando a API HTTP interna e a plataforma Apache Kafka.
O desenvolvimento é realizado com base nas especificações do protocolo Matrix e utilizando dois conjuntos de testes: os testes sytest comuns com Synapse e o novo pacote Complement.
Na fase atual de desenvolvimento, o Dendrite passou com sucesso em 56% dos testes de API cliente-servidor e em 77% dos testes de API de federação, enquanto a cobertura real da funcionalidade é estimada em 70% para a API cliente-servidor e 95% para a API de federação.
A fase beta indica que o Dendrite está pronto para a implantação inicial e a transição para o desenvolvimento com lançamentos regulares. Entre os lançamentos, o esquema de armazenamento do banco de dados será atualizado (diferentemente da instalação de fragmentos do repositório, após a atualização, o conteúdo do banco de dados não será perdido).

Mudanças que quebram a compatibilidade com versões anteriores, mudam a estrutura do banco de dados ou requerem mudanças de configuração só serão oferecidas nas versões principais.
Atualmente, recomenda-se o uso do Dendrite em modo monolítico com o SGBD PostgreSQL para a criação de pequenos servidores domésticos e nós P2P. O SQLite ainda não é recomendado devido a problemas não resolvidos no tratamento de operações simultâneas.
Funcionalidades ainda não implementadas no Dendrite incluem : confirmações de mensagens, recibos de leitura, notificações push, OpenID, vinculação de e-mails, busca no servidor, diretório de usuários, listas de ignorados, criação de grupos e comunidades, avaliação da presença online do usuário, entrada de dados de convidados e interação com redes de terceiros.
Funcionalidades básicas para o funcionamento de salas de chat (criação, convites, regras de autenticação), meios de federação de participantes nas salas, sincronização de eventos após retorno offline, contas, perfis, indicação de discagem, download e upload de Arquivos de edição (API de mídia) estão disponíveis para uso de mensagens, ACLs, rotulagem e dispositivo de criptografia ponta a ponta e listas de chaves.
Lembre-se de que a plataforma Matrix para organizar comunicações descentralizadas utiliza HTTPS + JSON como protocolo de transporte, com a possibilidade de utilizar WebSockets ou um protocolo baseado em CoAP + Noise. O sistema é estruturado como uma comunidade de servidores que podem interagir entre si e se combinar em uma rede descentralizada comum.
As mensagens são replicadas em todos os servidores aos quais os participantes da troca de mensagens estão conectados. A propagação de mensagens entre servidores ocorre de maneira semelhante à propagação de commits entre repositórios Git.
Fonte: https://matrix.org