Dendrite, коммуникационный сервер с реализацией протокола Matrix

Dendrite — это коммуникационный сервер, разрабатываемый командой Matrix и позиционируемый как реализация компонентов сервера Matrix второго поколения.

В отличие от эталонного сервера Synapse, написанного на Python, код Dendrite разработан на Go. Обе официальные реализации распространяются под лицензией Apache 2.0.

В рамках проекта Ruma разрабатывается отдельная версия сервера Matrix на языке Rust, которая распространяется по лицензии MIT.

Новый сервер призван обеспечить высокую эффективность, надежность и масштабируемость.

О дендрите

Dendrite превосходит Synapse по производительности, требует значительно меньше памяти для работы и может масштабироваться за счет балансировки нагрузки между несколькими узлами.

Архитектура Dendrite поддерживает горизонтальное масштабирование и основана на разделении контроллеров в виде микросервисов, где каждый экземпляр микросервиса имеет свои собственные таблицы в базе данных.

Балансировщик нагрузки отвечает за отправку вызовов микросервисам. Потоки (процедуры go) используются для распараллеливания операций в коде, что позволяет использовать ресурсы всех ядер ЦП, не разделяя их на отдельные процессы.

Dendrite поддерживает работу в двух режимах: монолитном и многокомпонентном (полилитном).

  • В монолитном режиме Все микросервисы связаны в исполняемый файл, запускаются в процессе и напрямую взаимодействуют друг с другом.
  • В многокомпонентном режиме (кластер) микросервисы можно запускать по отдельности, даже с разнесением на разных узлах. Взаимодействие компонентов в многокомпонентном режиме осуществляется с помощью внутреннего HTTP API и платформы Apache Kafka.

Разработка осуществляется на основе спецификаций протокола Matrix и с использованием двух наборов тестов: общих тестов Sytest с Synapse и нового набора Complement.

На текущем этапе разработки Dendrite успешно проходит 56% тестов клиент-серверного API и 77% тестов федеративного API, при этом фактическое покрытие функциональности оценивается в 70% для клиент-серверного API и 95% для федеративного API.

Этап бета-тестирования указывает на то, что Dendrite готов к первоначальному развертыванию и переходу к разработке с регулярными новыми релизами. Между релизами схема хранения данных в базе данных будет обновляться (в отличие от установки фрагментов из репозитория, после обновления содержимое базы данных не будет потеряно).

Изменения, которые нарушают обратную совместимость, изменяют структуру базы данных или требуют изменения конфигурации, будут предлагаться только в основных выпусках.

В настоящее время для создания небольших домашних серверов и P2P-узлов рекомендуется использовать Dendrite в монолитном режиме с СУБД PostgreSQL . Использование SQLite пока не рекомендуется из-за нерешенных проблем с обработкой параллельных операций.

В Dendrite пока не реализованы следующие функции : подтверждения получения сообщений, уведомления о прочтении, push-уведомления, OpenID, привязка электронных писем, поиск на стороне сервера, каталог пользователей, списки игнорирования пользователей, создание групп и сообществ, оценка присутствия пользователя в сети, ввод гостевых сообщений и взаимодействие со сторонними сетями.

Базовый функционал для работы чатов (создание, приглашения, правила аутентификации), средства объединения участников в комнаты, синхронизация событий после выхода из офлайн, учетные записи, профили, индикация набора номера, загрузка и выгрузка файлов редактирования (Media API) доступны для использования сообщения, списки контроля доступа, маркировка и сквозное шифрование, устройства и списки ключей.

Напомним, что платформа Matrix для организации децентрализованных коммуникаций использует протокол HTTPS + JSON в качестве транспортного протокола, с возможностью использования WebSockets или протокола на основе CoAP + Noise. Система структурирована как сообщество серверов, которые могут взаимодействовать друг с другом и объединяться в общую децентрализованную сеть.

Сообщения реплицируются на всех серверах, к которым подключены участники обмена сообщениями. Передача сообщений между серверами происходит аналогично тому, как распространяются коммиты между репозиториями Git.

Источник: https://matrix.org


Добавить в качестве предпочтительного источника в Google