До вчерашнего вечера считал, что из адекватных мессенджеров с поддержкой федерации есть Jabber (XMPP) и как альтернатива ему — Matrix. Что ж, забираю свои слова обратно — Matrix вряд ли можно считать адекватной альтернативой.
Не так давно купил VPS’ку и домен для написания мануала для JabberWorld по Prosody. Чисто как тестовый сервер, который можно спокойно перезагружать, ставить все, что угодно и не трогать при этом основной. Мануал уже закончен, поэтому в качестве эксперимента решил попробовать развернуть референсный Matrix-сервер — Synapse — чтобы хотя бы посмотреть, что там и как. Что ж, вчера вечером развернул.
Думаю, можно пропустить чисто административные моменты — например, бесконечные попытки запуститься и последующие вылеты с дефолтным конфигом без доступа к несуществующим сертификатам — это можно списать на косяк маинтайнеров Debian’а. В целом, настройка несложная: включаем прослушивание всех интерфейсов (дефолтно — только локалхост. Похоже, обычной практикой тут является проксирование трафика через какой-то веб-сервер), вписываем адрес и ключ coturn’a, копируем сертификаты letsencrypt’а и даем на них права. Потом, как выяснилось, надо еще придумать какой-то ключ для работы регистрации (а если просто найти параметр разрешения регистрации и включить — сервер вылетает) — ок, вписал. Где-то в сети видел фразу о том, что типичный сетап — с СУБД типа Postgres’а, но я решил, что для тестового варианта штатного Sqlite будет достаточно. Позже начал понимать, зачем там таскать внешнюю СУБД.
Запустил, правда, со второго раза, так как synadm грохнул мне готовый конфиг и пришлось разворачивать пакет заново.
Со старта пустой сервер выжирает столько, сколько ejabberd с десятками пользователей. Поставил снова Element, прописал аккаунт, подключился. Не сказать, что бодро, но кто его знает… Но дальше — веселее. Попробовал зайти в публичные комнаты, чтобы проверить, как работает s2s (или как тут это зовется — федерация). Вход в публичные конференции на matrix.org затянулся на несколько часов: зашел в одну — что-то где-то подгружается; ткнул другую, где поменьше людей. В логах побежали сообщения вида
2023-11-11 21:43:47,125 - synapse.handlers.federation_event - 1692 - INFO - sync_partial_state_room-2-$16997386160CDyTR:mychat.name-$1699725896973268HCkeV:t2bot.io- Persisting 1 of 5108 remaining outliers: ['$168686924821984yKmEl:matrix.org']
В общем, закончилось это только спустя пару часов. Почему не делать это в фоне — хз. В одной из комнат я успел получить сообщение с капчей от бота и даже ответить на него, но дальше — «висим».
В процессе сервер раздулся до 2,4 ГБ. Память потом так и не отдал. Даже после синхронизации сервер выжирал проц. В таком состоянии оставил на всю ночь:
Утром перезагрузил — до того отключившись от тех чатов. При попытке захода снова выжирается память — правда, уже в меньших масштабах. На сейчас сервер занял 650 МБ — при том, что конференции я уже покинул. CPU — когда как. Вот прямо сейчас, спустя продолжительное время бездействия и без присутствия в «больших» конференциях — загрузка упала. До того — см. график. По графику логинов можно понять, когда я ушел спать, а по LA — когда спала нагрузка на проц.
/var/lib/matrix-synapse/homeserver.db на сейчас занимает 2,6 ГБ, ну и на 230 МБ в /var/lib/matrix-synapse/media.
Особенно дико это все смотрится после Prosody, который потребляет 21 МБ после полутора недель аптайма с подключенной одной конференцией. По-быстрому поискал и зашел еще в несколько чатов (всякие там gajim@ с 300+ участников; саппорты серверов и т.п. — всего штук 6) — сервер начал потреблять аж на 1,5 МБ больше.
Про тупящий Element и потребление им ресурсов уже молчу. Несколько раз ловил вылеты. Грохнул ему конфиги, чтобы тот стартовал уже с чистым профилем. Как-то раз тот не мог отрисовать интерфейс, что-то там подгружая на логин-странице с тремя кнопками.
Так что… Есть некоторые хорошие и/или более проработанные вещи, чем в джаббере — например, тут в порядке вещей треды и реакции — в джаббере это пока не везде реализовано (но тут больше вопрос к разработчикам клиентов и админам — так-то все готово). Видел интересные моменты в плане приглашений новых участников. Update: а, опросы забыл еще. Опросов в jabber’e пока вроде нет — но это делается ботами при желании, так что не обязательно тащить в протокол.
Но необходимость мини-датацентра как для «домашнего сервера», так и для работы клиента ставит крест на всех преимуществах — тем более, оно вполне реализуемо и в Jabber.
Update по ходу дела:
- Звонки у меня в Matrix так и не заработали — Element на десктопе моментально пишет про «пропущенный» звонок, а при попытке инициировать звонок с него — «нет доступа к микрофону», хотя любое другое приложение при этом работает (и сам он звуки тоже издает — т.е., со звуковой картой общается).
- Android (свой сервер) -> десктоп (matrix.org) — уведомления о звонке вообще никакого. При этом сообщения пересылаются.
- Десктоп -> Android — звонок появляется. Но соединение не устанавливается.
- По тому же адресу, по которому я прекрасно логинюсь в Element на десктопе — я получаю «No network» на Андроиде.
- Методом проб и ошибок выяснил, что на Андроиде такая ругань идет в случае префикса http://. А дефолтно (без префикса) оно считает, что там есть TLS — который на другом порту.
- Вход в конфу по Ruby на gitter.im на 500 человек занял несколько минут. Больше всего времени ушло на подгрузку «400 человек сменили свой статус».
- Вход в #debian:matrix.debian.social (1700 человек) — +100 МБ памяти у сервера, 2,5 минуты вход — плюс продолжительное выжирание проца после.
- Поскроллил историю — доступна за 2 недели. В целом, за все время работ с чатом потребление памяти сервером выросло с 275 до 419 МБ.
- Сервер — 1.95.1-1~bpo12+1 100

Одна мысль про “IM Matrix — неюзабельное говно”