Введение в Matrix

Материал из [matrix] на Русском
Версия от 08:29, 9 сентября 2018; Ma1uta (обсуждение | вклад) (Новая страница: «<big>'''DISCLAIMER'''</big> Статья является переводом https://brendan.abolivier.bzh/enter-the-matrix/ автора @brendan:abolivier.bzh…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

DISCLAIMER

Статья является переводом https://brendan.abolivier.bzh/enter-the-matrix/ автора @brendan:abolivier.bzh и распространяется по лицензии Creative Commons BY-SA (https://creativecommons.org/licenses/by-sa/4.0/). Перевод выполнил пользователь @airin:matrix.org. Все вопросы и предложение можно задать в комнате #perevodators:matrix.org.


Как вы можете знать, если вы некоторое время подписаны на меня в Twitter (или знаете меня в реальной жизни), я очень люблю свободные программы и децентрализацию. Я люблю свободные программы. потому что они соответствуют философии, которой я живу, а децентрализацию -потому что она расширяет пользовательскую свободу и индивидуальность, и я считаю работу над децентрализованными сетями увлекательной. Они заставляют кардинально изменить способ проектирования систем, поскольку большая часть интернета сейчас состоит из централизованных сервисов, которые учат разрабатывать и проектировать только в этом плане (ключе) (=== централизованном).

Сегодня я хочу вам рассказать об одном из моих любимых свободных децентрализованных проектов - Matrix. Давайте уясним, что я не говорю об одной научно-фантастической франшизе или ночном клубе в Берлине. Matrix - это протокол для децентрализованных, федеративных и защищённых коммуникаций, созданный и поддерживаемый New Vector, компанией, базирующейся на территории Британии и Франции (в которую я присоединился для интернатуры в Лондоне прошлым летом). Он основан на RESTful HTTP/JSON API, документирован открытой спецификацией и спроектирован быть пригодным для чего угодно, что требует коммуникацию в реальном времени, он мгновенных сообщений до интернета вещей. Некоторые люди экспериментируют с Matrix, используя его в качестве блога, RSS-читалки и прочих неочевидных вещей, которых вы не ожидаете от такого проекта. Несмотря на это, однако, он в основном используется для мгновенных сообщений, в частности с клиентом Riot (который так же разработан New Vector).

Matrix так же дистанцируется от аргумента "ещё одна штука для сообщений" в своей философии: это не ещё один стандарт для коммуникаций, но инструмент для связывания всех сервисов коммуникации вместе, используя "мосты", интеграции и прочее. Например, у нас на CozyCloud есть комната, соединённая "мостом" с публичным IRC-каналом, и это значит, что все сообщения, отправленные в Matrix, будут направлены на канал в IRC, и наоборот. В свободное время я даже соединил "мостом" эту комнату с нашим сервером Mattermost, чтобы создать связку Mattermost<->Matrix<->IRC и позволить сообществу взаимодействовать с командой, не заставляя её членов запускать еще один чат-клиент и терять время глядя туда, в дополнение к внутренним коммуникациям.

Matrix-Bridges.jpg

Также в последнее время было немало шума вокруг Matrix после того, как правительство Франции анонсировало своё решение по полному переходу на Matrix для внутренних коммуникаций, используя форк Riot, который они в будущем выпустят как свободную программу для всего мира.

Что под капотом

Первичное знакомство это замечательно, но, полагаю, от этой статьи вы ожидаете больших технических подробностей, поэтому давайте рассмотрим как Matrix работает. Небольшая оговорка: я не буду описывать это слишком подробно (потому что в таком случае пост получился бы слишком длинным и я бы не закончил его и за неделю), и остановлюсь главным образом на его основных принципах и базовом использовании.

Как я уже упомянул, Matrix децентрализованный и федеративный. Децентрализованность означает, что вы можете иметь свой собственный matrix сервер (как в принципе и другие сервисы, типа Mattermost), а федеративность означает, что два matrix сервера могут общаться друг с другом. Это значит, что если кто-то (пусть это будет Алиса) имеет свой сервер на matrix.alice.tld, и хочет поговорить с ее другом (назовём его Боб), у которого тоже есть свой сервер на matrix.bob.tld, это будет возможно, и matrix.alice.tld будет знать, как отправить сообщения Алисы Бобу на matrix.bob.tld.

Немного терминологии:
  • В спецификации Matrix есть несколько типов серверов. Хоум-серверы (HS) это серверы, реализующие клиент-серверный и федеративный АПИ, т.е. те, которые позволяют непосредственный обмен сообщениями между Алисой и Бобом. В моём примере выше "Matrix-серверы" matrix.alice.tld и matrix.bob.tld это хоум-серверы. Среди других типов серверов есть серверы идентификации (IS), которые позволяют использовать сторонние идентификаторы (например email или номер телефона) по которым люди могут друг друга найти, и сервисы приложений (AS), которые главным образом используются для создания мостов в другие системы (но не только). В этой статье я буду освещать только базовое использование хоум-серверов, поскольку для понимания принципов работы Matrix этого достаточно.
  • В спецификации Matrix, Алиса и Боб идентифицируются посредством Matrix ID, имеющего вид @имя:сервер. В нашем примере, их Matrix ID могут быть соответственно @Alice:matrix.alice.tld и @Bob:matrix.bob.tld. Matrix ID на самом деле следует более широкому формату наименований любой сущности в Matrix, а именно *имя:хоум-сервер, где "*" - символ, указывающий на тип адреса. "@" означает, что это Matrix ID.


Три жильца на трёх серверах

Теперь, когда у нас есть два общающихся пользователя, давайте посмотрим, как третий (назовём его Чарли), у которого тоже есть хоум-сервер (matrix.charlie.tld) может присоединиться к ним. Это делается при помощи *комнат*, которые можно рассматривать как Matrix-эквивалент IRC каналов. Как любая сущность в Matrix, комнаты имеют идентификатор, начинающийся символом "!". Однако, не смотря на то, что он содержит в себе имя сервера, комнаты, в отличие от ID пользователя, не привязаны к серверам. Фактически, сервер в идентификаторе комнаты, это сервер пользователя, который её создал.

Когда Алиса хочет отправить сообщение в комнату, где находятся Боб и Чарли, её хоум-сервер находит в своёй локальной базе данных, какие еще серверы являются частью этой комнаты (в нашем примере, серверы Боба и Чарли), и отправляет сообщение каждому из них по отдельности (и каждый из них показывает сообщение своим юзерам в данной комнате, т.е. сервер Боба покажет сообщение Бобу). И каждый хоум-сервер сохранит это сообщение в своей локальной базе данных. Это означает:

  • Каждый хоум-сервер в комнате хранит содержимое её истории.
  • Если по любой причине какой-то хоум-сервер отключается, даже если это сервер, адрес которого прописан в названии комнаты, все остальные хоум-серверы в комнате могут продолжать общаться друг с другом.

В общих чертах, комнату можно изобразить следующим рисунком:

Room-schema.png