XMPP/Jabber глазами мантейнера jabber.org.by
LVEE 2013
Технология XMPP/Jabber
Общие сведения
Протокол XMPP (Extensible Messaging and Presence Protocol – расширяемый протокол обмена сообщениями и информацией о присутствии). Основан на формате XML и изначально спроектирован расширяемым. Стандартизирован в настоящее время в RFC 6120, RFC 6121, и RFC 6122. Плюс расширения (XEP) от XMPP Standarts Foundation .
Существует огромное множество реализаций XMPP, клиентских и серверных, как общего назначения, так и специализированных.
Поддерживаются очевидные для Instant Messenging возможности передачи текстовых сообщений, групповых чатов, серверной истории, передачи голоса и видео, а также файлов.
Существенным отличием от многих других IM является децентрализованность. В XMPP адрес пользователя состоит из двух частей: login@server. Каждый сервер является независимой сущностью, которая договаривается о доставке сообщений с другими серверами посредством протокола XMPP. Этот процесс называется XMPP Federation или XMPP s2s.
Наиболее интересные возможности XMPP
- серверные шлюзы (“транспорты”) в сети на других технологиях (ICQ, Skype, MSN, SIP, IRC, Email). Включая другие сервера на XMPP. Включая подписку на транспорты других серверов.
- Шифрование: канал клиент-сервер и сервер-сервер. Также можно шифровать отдельные сообщения открытым ключом.
- Удалённая передача команд и мониторинг состояния, в том числе управление клиентами и серверами XMPP.
- Инструменты совместной работы (Abiword, Inkscape, LibreOffice, Coccinella, всевозможные whiteboard)
- Микроблоггинг
- Различные сетевые распределённые настольные игры
- Geolocation
- Сервисы идентификации : OpenID, OAuth
- Облачные вычисления
XMPP vs другие IM
Подъём и, одновременно, падение XMPP.
На настоящий момент технология XMPP очевидно устоялась и заняла свои позиции на рынке. Многие популярные интернет сервисы имеют XMPP на борту, в частности Facebook, GTalk, Vkontakte, WhatApp. Большинство бизнес-ориентированных решений или имеют транспорты для подключения к XMPP Federation (Microsft Lync, Cisco Unified Presence), или прямо основаны на XMPP.
С другой стороны, большинство разработчиков корпоративных и открытых решений делает продукты под себя. Выбрасывая или обрезая штатный функционал протокола и широко распространённые расширения.
С серверной стороны – зачастую мы можем видеть отключение s2s (Facebook), невозможность поменять личные данные через VCard (почти все), странное нестандартное поведение аккаунтов и серверов (Google Talk), отключенной server-side history, нет поддержки групп и т.д.
С клиентской – нет поддержки Service Discovery (imo, im+, xabber), и связанной с ней регистрации на транспортах и выполнения команд, нет поддержки конференций, а иногда даже групп пользователей в ростере (imo). Особенно этим грешат многопротокольные клиенты, где XMPP лишь одна из опций.
Суммируем – теоретическое богатство возможностей XMPP, описанных в предыдущем пункте, недоступно в коробочном, простом для использования, продукте. Требует дополнительных ощутимых усилий со стороны оператора сервера и конечного пользователя по настройке окружения.
Таким образом, мы можем смело говорить об протоколах, расширениях и програмном обеспечении XMPP как о наборе заготовок “сделай сам”.
Заметки о Первой и Второй Великой Войне среди IM’s.
Первая Великая Война IM началась после взлёта ICQ в конце 90х. Ключевым функционалом того времени являлась передача текста и групповые чаты. В короткое время были созданы конкурирующие продукты: AIM, Yahoo Messenger, MSN и другие, мало отличающиеся функционалом, но абсолютно несовместимые друг с другом и обладающие закрытыми двоичными протоколами.
Со стороны пользователей практически сразу возник спрос на интеграцию множества несовместимых аккаунтов в одну точку входа.
Сформировалось 2 магистральных подхода:
- Многопротокольные клиенты. Примеры Miranda, Gaim/Pidgin, Trillian, Empathy/Telepathy.
- Сервер выступает в роли интегратора, клиент работает по одному протоколу. Примеры: XMPP, MS Lync, Cisco Unified Meeting Place, IMO.
К середине 2000х все протоколы IM подверглись реверс-инженерингу, и к ним были написаны реализации XMPP-транспортов, что позволило использовать свой XMPP-аккаунт как единую точку входа во все сети, а особенности реализации маскировались.
Вторая Великая Война IM началась после повсеместного внедрения широкополосного доступа в интернет и появившейся возможностью передавать звук (VoIP) и видео. Чуть позже появилась и разрослась ниша мобильных устройств, планшетов и связанные с ними новые операционные системы. Традиционные участники рынка, с трудом пережившие 1-ю войну IM, не смогли оперативно среагировать и начался взлёт новых игроков, таких как Skype.
Мы видим снова ту же ситуацию, что и 10 лет назад. Коммерческие вендоры, стремясь наглухо привязать пользователей исключительно к своим сервисам, снова активно выбрасывают на рынок и продвигают полностью закрытые решения, зачастую не имеющие даже внешнего API. В частности отдельным недобрым словом можно отметить Skype, Viber, WhatsApp. Отмечу однако, что в настоящий момент есть минимум 2 стандартизированных стека протоколов, SIP и XMPP, которые позволили бы обеспечить совместимость решений. Но вендоры указанных сервисов в совместимости категорически не заинтересованы.
Уже сейчас появились признаки того, что конец 2-й мировой войны IM будет таким же, как и для первой. Рынок поделят несколько коммерческих решений. Их протоколы чуть позднее пройдут Reverse Engineering и будут реализованы в СПО как библиотеки. Библиотеки будут подключены к многопротокольным клиентам и XMPP-транспортам.
Проприеритарные игры в открытый XMPP на примере Facebook.
Согласно утечкам информации – архитектура чата Facebook вообще не основана на XMPP. XMPP-gate написан дополнительно и имеет предельно ограниченный функционал.
Facebook via XMPP, текущий статус.
есть:
- чат с пользователями в Facebook
- их статус онлайн/оффлайн
- поддерживает несколько соединений одновременно
нет:
- S2S
- сервисов и транспортов
- групп и управления группами
- видео и аудио
- не работает VCard (нельзя публиковать и просмотреть, у пользователей только имя)
- запутанная схема подключения
- нельзя публиковать материалы в ленту
- нельзя подключать новых пользователей
- нельзя читать ленту
Вывод – годится только для подключения через J2J транспорт к вашему основному Jabber-аккаунту.
Былинный отказ Google Talk.
Попробуем выделить из PR-шума на тему отказа Google от XMPP факты.
От старта в 2006 и к маю 2013 Google Talk стал крупнейшим сервером XMPP, поддерживающим XMPP Federation. Такой результат мог быть достигнут только за счёт навязывания Google Talk в нагрузку к GMail, Android и другим популярным продуктам компании. Голос, видео и звонки на телефонные сети в GTalk появились позже чем в Skype, более того их реализация сейчас мало совместима с остальным XMPP. Т.к. стандарт Jingle 1.0, разработанный по мотивам реализации Google Jingle 0.9 – сам Google не внедрил.
Google не замечен в активной работе над стандартами XMPP (RFC и XEP) кроме Jingle, выпуске клиентских или серверных реализаций под свободными лицензиями. Также серверная реализация GTalk имеет ряд неприятных особенностей, вынуждающие авторов решений на XMPP вставлять костыли на @gmail.com в свои продукты.
Из ощутимого вклада в развитие XMPP можем отметить только:
- публикацию libjingle (voice, video, streaming, file sharing)
- программа Google Summer of a Code (GSoC), где регулярно участвует XSF Foundation.
Компания пока не собирается отключать Google Talk и S2S, но уже принудительно производит перевод клиентской базы на Hangout. Путём необратимого обновления GTalk на Hangout на Android и замены функциональности Talk на Hangout во всех своих продуктах (GMail, Google+ и др).
Новый продукт Hangout закрывает пользовательскую базу Google от внешнего мира. И сказка о компании, поддерживающей открытые протоколы, рассеялась. За RSS последовал XMPP.
Детально о произошедшем вы можете прочитать в отличном материале на Habrahabr 3.
Community-driven XMPP сервер.
XMPP/Jabber сервера, создаваемые сообществом, составляют становой хребет и, одновременно, передний край технологии XMPP. Им, возможно, не достаёт блёсток и конфети, сыплющихся из коммерческих продуктов. Зато наполнение и функционал зачастую значительно превосходят коммерческие аналоги. И изначально лишены многих из проблем, описанных в предыдущей главе.
Корневое отличие в том, что на развитие Community-сервера можно повлиять, не покупая целиком компании Google, Viber или Facebook. Влияние через кооперацию с другими участниками: развитие серверного ПО, внедрение и тестирование новых сервисов, диагностику ошибок и проблем.
Сервер jabber.org.by возник и базируется на кадрах из белорусского FOSS-community, как производное Minsk Linux Users Group и сообщества вокруг Linux.by.
В полном соответствии с классическим эссе Эрика Реймонда “Собор и Базар” 2:
- операторы пользуются сами большей частью функционала
- стараются делать, что просят пользователи, даже если им самим запрошенные функции не нужны
- пользователи привлекаются к тестированию и улучшению сервисов
- по мере сил взаимодействовуют с upstream (spectrum, pyicqt)
- время от времени происходит смена личного состава
Важнейшей технической и социальной ролью любого подобного проекта является преобразование разрозненного набора заготовок (а XMPP определённо им является) в готовый к использованию “коробочный” продукт, с последующей технической поддержкой пользователей. И сокращение дистанции, вплоть до полного её исчезновения, между пользователями и участниками создания сервиса.
К примеру, автор этой статьи в момент старта сервера был обычным пользователем. С второй половины 2006 – постепенно занял позицию резервного администратора, а к 2008 – стал основным оператором сервера. И продолжает им пользоваться ежедневно.
Коммерческие поставщики IM-решений серьёзно ограничены дихотомией “выгодно”-“невыгодно”. Тогда как community-driven проекты могут внедрять даже используемый только одним пользователем функционал.
Сервер jabber.org.by
Сервер jabber.org.by – первый и в настоящее время единственный в Беларуси публичный XMPP/Jabber сервер.
Отличительные особенности:
- открытая регистрация
- community-driven
- широкий набор транспортов (ICQ, MSN, AIM, Yahoo, Twitter, MRIM и несколько транспортов в XMPP под разными именами)
- физически расположен в Беларуси (провайдер BASNET).
Опыт поддержки и эксплуатации указанного сервера в течении 9 лет и положен в основу настоящей статьи.
Внутренняя политика: оператор вмешивается в происходящее только тогда, когда деятельность пользователей мешает работать серверу и ставит под угрозу его работоспособность. Всё остальное – на полное усмотрение участников.
Физически со времени старта сервиса располагается по адресу г. Минск, ул. Академическая 25, 5й этаж, в сети Национальной академии наук Беларуси BASNET. Раз в несколько лет перемещается внутри этого здания с сервера на сервер.
Hardware:
- Контейнер в OpenVZ
- RAM 2GB гарантировно / до 4GB если другие контейнеры не требуют.
- 40 GB HDD
- Intel® Xeon® CPU E5506 @ 2.13GHz .
Software: - Debian GNU/Linux 6.x (oldstable)
- Ejabberd 2.1.12
- транспорты на основе сервисов Spectrum2
Вехи развития jabber.org.by
- 14 декабря 2004 года. Запуск. Александр Бутенко aka Mr_Death разместил анонс в рассылке Minsk Linux Users Group .
- конец 2005. Пользователи во главе с С.Антоничевым (cymrak), И. Гречишко (booxter) и Е.Калютой (trenka) по своей инициативе собирают деньги и апгрейдят сервер. Подробности
- 14.12.2006 Внутренний hackaton проекта по исправлению утечек памяти в PyICQt.
- 09.03.2007. Эмиграция Mr_Death в Доминиканскую Республику и постепенный отход от дел.
У него всё хорошо:
- март 2008. Остановка сервиса и далее переезд на FreeBSD 6.2/jail. Подробнее
- август 2009. Участие в тестировании под нагрузкой и исправлении утечки памяти в PyICQt 0.8.1.5
- февраль 2011. Переезд на Debian 6.x/OpenVZ. Переход на сервисы Spectrum.
- сентябрь 2012-май 2013. Эпическая Борьба с сирийскими ботами.
- июнь 2013. Потеря пользовательских паролей (неудачный апдейт)
Текущее состояние сервера.
Непосредственно на сервере (учётные записи jabber.org.by и jabber.linux.by) 50-70 активных пользователей онлайн одновременно. Цифра снизилась в 2 раза за 3 года, в основном за счёт оттока в GTalk и Skype.
Транспорты: ICQ – до 150 пользователей онлайн, MSN – до 140 пользоватей, различные варианты J2J – до 100 пользователей.
Среди внешних пользователей транспортов наибольшее количество пришельцев c серверов GTalk, jabber.ru и jabber.org, не имеющих собственных транспортов.
S2S (соединения с другими серверами через XMPP Federation) – 130-150 одновременно.
Литература и ссылки
Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 Unported License. license
Back