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

Опубликован выпуск Matrix-сервера Dendrite 0.1.0, который ознаменовал переход разработки на стадию бета-тестирования. Dendrite развивается основной командой разработчиков децентрализованной коммуникационной платформы Matrix и позиционируется как реализация второго поколения серверных компонентов Matrix. В отличие от эталонного сервера Synapse, написанного на языке Python, код Dendrite развивается на языке Go. Обе официальные реализации распространяются под лицензией Apache 2.0. В рамках проекта Ruma отдельно развивается вариант сервера Matrix на языке Rust, который распространяется под лицензией MIT.

Новый сервер нацелен на достижение высокой эффективности, надёжности и масштабируемости. Dendrite опережает Synapse по производительности, требует для своей работы существенно меньше памяти и может масштабироваться через балансировку нагрузки на несколько узлов. Архитектура Dendrite поддерживает горизонтальное масштабирование и основывается на разделении обработчиков в форме микросервисов, где каждый экземпляр микросервиса имеет свои таблицы в БД. Диспетчеризацией обращения к микросервисам занимается балансировщик нагрузки. Для распаралелливания операций в коде применяются Go-сопрограммы, позволяющие задействовать ресурсы всех ядер CPU без разделения на отдельные процессы.

0_1602433207.png

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

Разработка ведётся на основе спецификаций протокола Matrix и с использованием двух тестовых наборов — общих с Synapse тестов sytest и нового набора Complement. На текущем этапе развития Dendrite успешно проходит 56% тестов Client-Server API и 77% тестов Federation API, при этом фактический охват функциональности оценивается в 70% для Client-Server API и 95% для Federation API.

Стадия бета-тестирования свидетельствует о готовности Dendrite для начального внедрения и переходе к разработке с периодическим формированием новых выпусков. Между выпусками теперь будет обеспечиваться обновление схемы хранения данных в БД (в отличие от установки срезов из репозитория, после обновления содержимое базы теряться не будет). Изменения, нарушающие обратную совместимость, меняющие структуру БД или требующие правки конфигурации, будут предлагаться только в значительных выпусках. Dendrite пока рекомендуется использовать в монолитном режиме совместно с СУБД PostgreSQL для создания небольших исходных серверов (homeserver) и P2P-узлов. Использование SQLite пока не рекомендуется из-за нерешённых проблем с обработкой одновременных операций.

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

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

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

В сети отсутствует единая точка отказа или контроля за сообщениями. Все серверы, которые охватывает обсуждение, равноправны между собой. Любой пользователь может запустить собственный сервер и подключить его к общей сети. Возможно создание шлюзов для взаимодействия Matrix с системами на базе других протоколов, например, подготовлены сервисы для двусторонней отправки сообщений в IRC, Facebook, Telegram, Skype, Hangouts, Email, WhatsApp и Slack. Помимо мгновенного обмена текстовыми сообщениями и организации чатов, система может использоваться для передачи файлов, отправки уведомлений, организации телеконференций, совершения голосовых и видео звонков. Поддерживаются также такие расширенные возможности как уведомление о наборе текста, оценка присутствия пользователя в online, подтверждение прочтения, push-уведомления, поиск на стороне сервера, синхронизация истории и состояния клиентов.


Источник: http://www.opennet.ru/opennews/art.shtml? num=53869

© OpenNet