До вчерашнего вечера считал, что из адекватных мессенджеров с поддержкой федерации есть 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 – неюзабельное говно”