LINUX.ORG.RU

Первый выпуск Peer-to-Peer клиента федеративной сети Matrix

 dendrite, , , ,


1

3

Состоялся выпуск экспериментального клиента Riot P2P.

Riot — изначально клиент для федеративной сети Matrix. P2P-модификация добавляет в клиент реализацию сервера и федерацию без использования централизованного DNS посредством интеграции libp2p, которая также используется в IPFS. Это первая версия клиента, которая сохраняет сессию после перезагрузки страницы, но в следующих мажорных обновлениях (например, 0.2.0) данные всё равно будут удалены. Поэтому использовать клиент для чего-то важного не рекомендуется.

В клиенте реализована федерация, создание комнат и отображение глобального (бессерверного!) каталога комнат.

При этом основная сеть Matrix, использующая DNS, и сеть Matrix на libp2p пока что не могут федерироваться и взаимодействовать друг с другом.

Для использования клиента достаточно нажать кнопку входа, после чего вы получите сгенерированный ID в сети. Экспорт данных пока не поддерживается.

Так как это нестабильная презентация возможной концепции, вы можете столкнуться с неприятностями:

  • Вы не сможете зайти в свой аккаунт или взаимодействовать с другими клиентами, если сервер, запущенный в виде Service Worker, будет убит браузером по истечении времени ожидания. Такая проблема замечена у Firefox, который делает это спустя 30 секунд бездействия].
  • На уровне сети libp2p действуют ограничения на количество выполняемых действий по времени, что может вызвать проблемы с федерацией.

Начало работы над P2P-версией Matrix обусловлено желанием разработчиков дать больше свободы своим пользователем. Отвязка от центрального сервера позволяет облегчить коммуникацию внутри локальных и mesh-сетей, и в целом, в условиях, когда выход во внешнюю сеть ограничен или отсутствует. Также это положительно сказывается на приватности, ввиду минимизации передаваемых метаданных, которые в таком сценарии хранятся только участниками переписки. В конечном итоге это заставляет задуматься о рефакторинге текущих концепций Matrix для достижения большей переносимости и безопасности.

Реализация серверного API достигается благодаря компиляции сервера Dendrite в код WebAssembly, который запускается одновременно с клиентом в виде Service Worker, использующий IndexedDB и SQLite для хранения данных локально, в случае с веб-версией и Electron-обёрткой. Dendrite — это разрабатываемый «сервер второго поколения» Matrix на языке Go, ориентированный на полную модульность, который также возможно использовать в монолитном виде. В модульном виде для взаимодействия микросервисов используется Apache Kafka, а в монолитном — Naffka. Документацию по сборке P2P-версии Dendrite можно найти на GitHub.

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

Текущая реализация Dendrite находится ещё на ранней стадии разработки, но этого уже достаточно для простой федерации:

Client-Server APIs: 34% (227/672 tests) - up from 33%
Federation APIs: 34% (35/103 tests) - up from 27%

Это не первая попытка реализации P2P. Ранее появлялась инициатива по созданию CoAP-прокси в сеть Yggdrasil для Synapse.

Разработчики протокола Matrix не зацикливаются на одной только федерации и экспериментируют с инструментами для ещё большей децентрализации. Например, был проведён эксперимент для сокращения издержек на транспортном уровне. Развивается демон Pantalaimon — прокси, к которому может подключиться любой клиент без поддержки шифрования и взаимодействовать с зашифрованными сообщениями. Все проведённые инициативы нацелены на то, чтобы в будущем избавиться от привязки логина к серверу, упразднив MXID, взаимодействуя с сетью с помощью публичного ключа, что уже частично реализовано в Riot P2P.

Найти более подробную информацию по концепциям планируемых реализаций можно в презентации FOSDEM 2020 на YouTube и недавно вышедшем блог-посте.

Существует также вариант Riot P2P для Android, основанный на коде старого приложения. В будущем планируется перевести его на актуальный RiotX.


Кроме того

  • Представлен проект TARDIS (Time Agnostic Room DAG Inspection Service) — отладчик линейного графа событий (DAG) для Matrix-комнат на основе Riot P2P.

  • В проекте Conduit (разрабатываемом сообществом сервере на языке Rust) теперь реализованы шифрование и вложения.

  • Появился экспериментальный сервер на Scala — Mascarene.

>>> Подробности

★★★★★

Проверено: alpha ()
Последнее исправление: alpha (всего исправлений: 30)
Ответ на: комментарий от mertvoprog

По сравнению с планшетом-то?

Ну 7 дюймовый плашет во внутренний карман куртки вполне таки влезет. Емнип плэйбук ежевичный умудрялся запихать)

anonymous
()
Ответ на: комментарий от anonymous

И что, UMPC в тот же карман уже не влезет?

А вообще, это фигня всё. Карманный ПК должен даже в нагрудный карман рубашки помещаться (на то он и карманный, дык), а не только в куртку.

mertvoprog
()
Последнее исправление: mertvoprog (всего исправлений: 1)
Ответ на: комментарий от bernd

При чём здесь дизайн? А фичи?

И о каком «быстрее» может идти речь, когда на каждый чих раундтрипы через сервер с полной перезагрузкой страницы?

mertvoprog
()
Ответ на: комментарий от mertvoprog

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

bernd ★★★★★
()
Ответ на: комментарий от bernd

они идут в любом случае

Нет, не идут. Кучу фич современной вебни, которая сейчас делается локально без обращения к серверу, придётся гонять через сервер. Вы явно Opera Mini не пользовались, если предлагаете такую дичь. Мы вот каждый день пользуемся по сей день, и никому не пожелаем, чтобы банально на каждый onchange для валидации, взаимного обновления элементов формы и прочего такого шёл раундтрип через сервер. Это не говоря уже о чём-то чуть более сложном типа канвасов.

забит всяким говном

Говном можно и статику забить, от сотни жирных гифок с рекламой браузер ляжет ;) Причём отдавать их можно по рандомным адресам вместе с необходимой для отображения страницы статикой, чтобы адблоколюбы соснули ;)

страница быстро перезагружается

Сфига это, когда там вместо махонького AJAX-запроса надо кучу всего заново дёргать, пусть даже лишь чтобы получить 304-отлуп на большую часть запросов? Ещё и повторять заново полный цикл рендеринга страницы. А то и FOUC-ом юзера помучать.

mertvoprog
()
Ответ на: комментарий от mertvoprog

ты мне скажи зачем клиенту отдавать кучу говна, которую можно выполнить без проблем на сервере?

bernd ★★★★★
()
Ответ на: комментарий от bernd
  1. Клиентов много, а сервер на них один. И у большинства клиентов огромные мощности, которые некуда девать.

  2. Быстрее выполнить локально, чем: 1) гонять на сервер; 2) ждать обработки; 3) качать новое; 4) всё равно что-то сделать на клиенте (распарсить и отрендерить хотя бы).

mertvoprog
()
Ответ на: комментарий от mertvoprog

мне мои мощности есть куда девать, я за них бабло заплатил и плачу за электричество. пусть сервера работают, если они хотят что-то продавать мне.

bernd ★★★★★
()
Ответ на: комментарий от bernd

мне мои мощности есть куда девать

Вы в технарском меньшинстве. Делайте свой веб вместе со всякими @saahriktu.

пусть сервера работают, если они хотят что-то продавать мне

А если наоборот? Вы за доступ на ЛОР платите что-то, например?

mertvoprog
()
Ответ на: комментарий от mertvoprog

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

bernd ★★★★★
()
Ответ на: комментарий от bernd

но на лоре нет всяких говняных жс технологий

Есть, ReCaptcha ;)

лор такой, какой должен быть веб

Веб не только лишь из форумов состоит.

mertvoprog
()
Ответ на: комментарий от mertvoprog

И о каком «быстрее» может идти речь, когда на каждый чих раундтрипы через сервер с полной перезагрузкой страницы?

Можно turbolinks прикрутить, и не будет «трипов». Бэкенду однохренственно, зато на клиенте будет быстро и без мегатонн жопаскрипта. Правда зачем тогда нужны петухи на самокатах с реакт/редукс и прочей такой парашей? Общество защиты жывотных негодуе!

anonymous
()
Ответ на: комментарий от anonymous

turbolinks принципиально не отличается от «классического» AJAX, которым подгружались куски HTML, а не сырые данные. Ключевая проблема такого подхода в том, что обработчики на элементы надо заново перенавешивать. А без обработчиков это никак не решает проблему убогости голого HTML.

mertvoprog
()
Последнее исправление: mertvoprog (всего исправлений: 1)
Ответ на: комментарий от mertvoprog

убогости голого HTML

А сам мне в любви признавался…

@html

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.