Першы выпуск Peer-to-Peer кліента федэратыўнай сеткі Matrix

Адбыўся выпуск эксперыментальнага кліента Riot P2P.


Бунт - Першапачаткова кліент для федэратыўнай сеткі матрыца. P2P-мадыфікацыя дадае ў кліент рэалізацыю сервера і федэрацыю без выкарыстання цэнтралізаванага DNS пасродкам інтэграцыі. libp2p, Якая таксама выкарыстоўваецца ў ОПЗ. Гэта першая версія кліента, якая захоўвае сесію пасля перазагрузкі старонкі, але ў наступных мажорных абнаўленнях (напрыклад, 0.2.0) дадзеныя ўсё роўна будуць выдаленыя. Таму выкарыстоўваць кліент для нечага важнага не рэкамендуецца.

У кліенце рэалізавана федэрацыя, стварэнне пакояў і адлюстраванне глабальнага (бессервернага!) каталога пакояў.

Пры гэтым асноўная сетка Matrix, якая выкарыстоўвае DNS, і сетка Matrix на libp2p пакуль што не могуць федэравацца і ўзаемадзейнічаць сябар з сябрам.

Для выкарыстання кліента дастаткова націснуць кнопку ўваходу, пасля чаго вы атрымаеце згенераваны ID у сетцы. Экспарт даных пакуль не падтрымліваецца.

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

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

Пачатак працы над P2P-версіяй Matrix абумоўлена жаданнем распрацоўшчыкаў даць больш свабоды сваім карыстальнікам. Адвязка ад цэнтральнага сервера дазваляе палегчыць камунікацыю ўсярэдзіне лакальных і mesh-сетак, і ў цэлым, ва ўмовах, калі вынахад у вонкавую сетку абмежаваны або адсутнічае. Таксама гэта станоўча адбіваецца на прыватнасці, з прычыны мінімізацыі метаданых, якія перадаюцца, якія ў такім сцэнары захоўваюцца толькі ўдзельнікамі перапіскі. У канчатковым выніку гэта прымушае задумацца аб рэфактарынгу бягучых канцэпцый Matrix для дасягнення большай пераноснасці і бяспекі.

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

Dendrite першапачаткова задумваўся як сервер агульнага прызначэння, які мусіў быць прамой заменай. Сінапсы, напісанага на 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 не зацыкляюцца на адной толькі федэрацыі і эксперыментуюць з прыладамі для яшчэ большай дэцэнтралізацыі. Напрыклад, быў праведзены эксперымент для скарачэння выдаткаў на транспартным узроўні. Развіваецца дэман Панталеймон - проксі, да якога можа падлучыцца любы кліент без падтрымкі шыфравання і ўзаемадзейнічаць з зашыфраванымі паведамленнямі. Усе праведзеныя ініцыятывы накіраваны на тое, каб у будучыні пазбавіцца ад прывязкі лагіна да сервера, скасаваўшы MXID, узаемадзейнічаючы з сеткай з дапамогай публічнага ключа, што ўжо часткова рэалізавана ў Riot P2P.


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

Існуе таксама варыянт Riot P2P для Android, заснаваны на кодзе старога прыкладання. У будучыні плануецца перавесці яго на актуальны. RiotX.

Акрамя таго

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

  • У праекце вадавод (распрацоўваным супольнасцю серверы на мове Rust) зараз рэалізаваны шыфраванне і ўкладанні.

  • З'явіўся эксперыментальны сервер на Scala Mascarene.

Крыніца: linux.org.ru

Дадаць каментар