Pull to refresh

Comments 33

Что касается потребляемых ресурсов

А можно поподробнее о цифирках? Если есть возможность, конечно.
Конечно! Двухпроцессорный сервер с 8 физическими ядрами имеет LA порядка 2-4, памяти съедается (после нескольких дней работы) на мастере ~25-30Gb, на слейвах процентов на 25 меньше. На mysql-сервере база с 5 млн. пользователей и 20+ млн записей в rosterusers умещается в 20 гб.

Простите, о каком сервисе идет речь? jabber.ru?
Большинству читателей топика нужен легкий и простой jabber сервер на 10-50 юзеров, максимум пару сотен.
Простите, о каком сервисе идет речь? jabber.ru?

нет, к общедоступным jabber-серверам сервис отношения не имеет) Сделан для организации чатов / рассылки уведомлений / и т.п. функций, которыми обладает jabber, в рамках нами же написанного приложения.

Большинству читателей топика нужен легкий и простой jabber сервер на 10-50 юзеров, максимум пару сотен.

Согласен с Вами, поэтому и упомянул в статье, что очень мало компаний, где реализован опыт работы с ejabberd и большим количеством подключенных пользователей.

А вообще, было бы интересно узнать что используется в Вконтакте, Facebook'е, WhatsApp'е. В mail.ru и их агенте в конце концов!)
про контакт вроде писали что у них на node.js была реализация xmpp, а потом ее закопали в пользу vk messenger :/
В портах есть erlang 17.1 и ejabberd 14.07.
Java надо отдельно качать и ставить.
Устанавливать вручную из исходников — очень плохая мысль, потом при обновлении, очень долго вычищать.
Смешивать установку из портов и pkg не стоит, к тому же установка из портов имеет EOL.
На момент написания «чернового» гайда в портах была 16-я версия erlang, а по факту больше месяца была уже релизнута 17-я, в которой много чего поправлено. К тому же, с 16-й ejabberd вел себя нестабильно, поэтому и пришлось отказаться от портов на тот момент.

Увлекаться смешиванием установок не стоит, согласен.
> установка из портов имеет EOL

Можно про это подробнее?
Это не EOL установки из портов, это обновление утилит для работы с пакетами.
А возьмите любой порт с меню опций и попробуйте собрать через make [config].
И увидите, что собирается по-дефолту (на основе Makefile).
Для меня ситуация с портами в сентябре сего года равнозначно EOL портов.
Порты собираются с теми опциями которые выбраны. Я не понял в чём у вас проблема.
Которые выбраны по дефолту.
make config не работает :(
Замечательно работает — с теми которые выбрал пользователь. Пишите в личку, попробуем разобраться что не работает у вас.
Нашел.
В моем случае помогла установка (переустановка) dialog4ports.
Это не EOL портов, это EOL pkg_*.
Java надо отдельно качать и ставить.
Это оракловую джаву надо отдельно качать и ставить, OpenJDK вполне себе пакетирован:

$ pkg search openjdk
bootstrap-openjdk-r351880
openjdk-7.65.17,1
openjdk6-b32,1
openjdk6-jre-b32,1
openjdk8-8.11.12
openjdk8-jre-8.11.12_4
rxtx-openjdk7-2.2p2_1
> Смешивать установку из портов и pkg не стоит, к тому же установка из портов имеет EOL.

pkg и порты на FreeBSD изначально дополняли друг друга и не возникало проблем их совместного использования. Другое дело, что в портах ПО, как правило, немного свежее, на одну цифру в суффиксе версии. При установке pkg install <имя> можно получить набор ПО старее, чем при установке из портов.

Что такое EOL для портов? В принципе, всё ПО, нуждающееся в обновлении в конкретный момент времени, уже превысило «время жизни» и надо решать: обновлять на следующую версию, учитывая зависимости, либо не трогать («работает — не трожь»).
UFO just landed and posted this here
Спасибо! FreeBSD нигде кроме jabber-серверов не используем и никогда не использовали, поэтому советы по тюннингу будут очень полезными.
FreeBSD используется в IP-телефонии (Asterisk).
Качаем последнюю версию эрланга (на момент написания статьи 17.2.2):

Ну зачем вы так? можно было же взять из PM'ом свежий порт.
если в портах нет нужной свежей версии софта, то надо не компилять этот софт из исходников, а делать новую версию порта, использовать её и отправлять сначала мейнтейнеру, а потом в багзиллу, если мейнтейнер не отвечает.
Правильно. Но только отправлять надо всегда в багзиллу.
Спасибо за статью. Не совсем понял для чего java устанавливается на сервер? В старом ёжике точно зависимости не было от нее, за это в свое время именно он был выбран, а не openfire…
И еще вопрос по поводу транспортов — вы пользуетесь ими в своем решении? Особенно интересно было бы узнать как сейчас обстоят дела с icq/gtalk/skype?
Транспорты не используем, так как коммуникации нужны только в пределах своего пользовательского сообщества.

А что касается Java — можно и без неё, если указать erlang при компиляции --without-javac.
Мы с коллегами в свое время не смогли добиться нормальной и стабильной работы кластера ejabberd с количеством узлов более 2 и количеством пользователей на узел 100К, из-за того, что при таких нагрузках mnesia-ю начинает страшно плющить и колбасить, особенно если возникает ситуация, когда например, одновременно отключается 10-20 тысяч пользователей от сервера, или они подключаются с большой скоростью. В итоге уже несколько лет, как совсем отказались от mnesia для хранения данных и используем доработанный форк MongooseIM от Erlang Solutions, который умеет хранить информацию о сессиях (активных подключениях) в Redis. Стоит также заметить, что выдерживаемая нагрузка и потребление памяти очень сильно (в разы) изменяется в худшую сторону, если используется SSL. Частично эту проблему удалось решить, пропатчив драйвер tls_drv.c так, чтобы не использовалось сжатие при инициализации OpenSSL, при использовании которого на каждое подключение выделяется около 150 Кб памяти, плюс другие доработки.
Да, с mnesia'ей много нюансов, поэтому тоже отказались от неё и перешли на mysql. Про MongooseIM совсем недавно читал, тоже заинтересовал этот проект, но в всерьез об его использовании пока не думали. А не могли бы вы немного подробнее рассказать об вашей инсталляции, если это возможно? Какую операционную систему используете?
Так 100 (200, 300 при увеличении кол-ва узлов) тысяч сессий-то у вас по-прежнему будут храниться в mnesia, так что толк от MySQL в данном случае небольшой. Мы, кстати, тоже пытались перейти на него, но на тот момент в реализации было множество багов, на которые мы не захотели тратить время, например EJAB-1583. Мы тоже используем FreeBSD и MongooseIM с некоторыми доработками в части повышения быстродействия и увеличения масштабируемости. Подключения идут через old ssl (не starttls), в качестве БД для сессий, офлайн-сообщений и других данных используется Redis с репликацией данных между узлами кластера.
Никто не подскажет как автоматически обновлять ростер? У меня авторизация через AD, но новые пользователи появляются только после рестарта ejabberd.
Спасибо за подсказку, разобрался. Оказывается обновление идет с интервалом 300 сек (ldap_user_cache_validity и ldap_group_cache_validity), осталось найти как обновлять ростер у клиентов (у меня сейчас используется PSI++)
ejabberd 14.07 есть в портах: www.freshports.org/net-im/ejabberd/
Зачем ставить всё ПО на FreeBSD «врукопашную» и писать об этом статью в том ключе, что это правильный ход, — не понимаю.
Ведь рано или поздно возникает масса вопросов: как обновить установленное таким образом ПО? Кто поручится за его безопасность в будущем? Что будем делать, если уволится тот человек, кто развёртывал ПО, и придёт новый человек, который будет вынужден разбираться со всем этим «добром»?

Непрофессионально.
Sign up to leave a comment.

Articles