Масштабирующий сервер Tigase XMPP на Amazon EC2 - PullRequest
9 голосов
/ 29 декабря 2011

Есть ли у кого-нибудь опыт работы с кластерными Tigase XMPP-серверами на EC2 Amazon, в первую очередь я хочу знать обо всем, что может сбить меня с толку, что неочевидно.(Например, очевидно, что запуск Ejabberd на EC2 может вызвать проблемы из-за Mnesia.)

Или если у вас есть какие-либо общие советы по установке и запуску Tigase в Ubuntu.

Дополнительная информация:

Система, которую я разрабатываю, использует XMPP просто для связи (почти в реальном времени) между мобильным приложением и сервером (серверами).

Число пользователей изначально будет небольшим, но, надеюсь, будет расти.Вот почему система должна быть масштабируемой.Предположительно для нескольких тысяч пользователей вам не нужен экземпляр cc1.4xlarge EC2?(В противном случае запуск будет очень дорогим!)

Я планирую использовать базу данных MySQL, размещенную в Amazon RDS , для базы данных сервера XMPP.

Я такжепланировать создание внешнего компонента XMPP, написанного на Python, используя SleekXMPP .Именно этот внешний компонент выполняет всю «работу» сервера, поскольку приложение, которое я создаю, сильно отличается от обмена мгновенными сообщениями.В этой части я не разработал, как подключить внешний компонент XMPP, написанный на Python, к серверу Tigase.Документация предполагает, что компоненты написаны специально для Tigase, а не для обычного XMPP-сервера, с использованием XEP-0114: Протокол компонентов Jabber , как я и ожидал.

С этой дополнительной информацией, если вы можете придумать что-нибудь еще, о чем я должен знать, я был бы рад узнать.

Спасибо:)

1 Ответ

26 голосов
/ 29 декабря 2011

У меня большой опыт. Я думаю, что есть масса неочевидных проблем. Как и единственный надежный экземпляр для запуска приложения, такого как Tigase, это cc1.4xlarge. Другие вызывают проблемы с доступностью ЦП, и это просто лотерея, если вам повезло запустить свой сервис на сервере, который не занят другими людьми, которые работают.

Также вам необходим экземпляр с максимально возможным количеством операций ввода-вывода, чтобы он мог справиться с сетевым трафиком. Высокий уровень ввода-вывода особенно применим к экземпляру базы данных.

Не уверен, очевидно ли это или нет, но есть проблема с именами хостов в EC2, каждый раз, когда вы запускаете экземпляр, имя хоста меняется и IP-адрес меняется. Кластер Tigase довольно чувствителен к именам хостов. Существует способ принудительно / изменить имя хоста для экземпляра, так что это может быть решением проблемы.

Конечно, я говорю о кластере для миллионов онлайн-пользователей и по-настоящему высокоскоростному пакету XMPP со скоростью 100 тыс. В секунду или более. Как правило, для больших установок выделенные серверы дешевле и эффективнее.

Как правило, Tigase очень хорошо работает на Amazon EC2, но вам действительно нужен последний код SVN, поскольку в него добавлено множество оптимизаций, особенно после тестирования в облаке. Если вы предоставите более подробную информацию о вашем сервисе, у меня может быть еще несколько предложений.

Больше комментариев:

Если речь идет о затратах, выделенный сервер всегда является более дешевым вариантом для постоянно работающего сервиса. Если вы не планируете включать / выключать серверы ежечасно, я бы порекомендовал вам воспользоваться специальным сервисом. Затраты ниже, а производительность гораздо более предсказуема.

Однако, если вы действительно хотите / должны придерживаться Amazon EC2, позвольте мне дать вам некоторые конкретные цифры, ниже приведен список примеров и сколько онлайн-пользователей кластер смог надежно обработать:

  • 5 * cc1.4xlarge - 1 млн 700 тыс. Онлайн-пользователей
  • 1 * c1.xlarge - 118 тыс. Пользователей онлайн
  • 2 * c1.xlarge - 127 тыс. Пользователей онлайн
  • 2 * м2.4xlarge (с 5 ГБ ОЗУ для Tigase) - 236 тыс. Пользователей онлайн
  • 2 * м2.4xlarge (с 20 ГБ ОЗУ для Tigase) - 315 тыс. Пользователей онлайн
  • 5 * м2.4xlarge (с 60 ГБ ОЗУ для Tigase) - 400 тыс. Пользователей онлайн
  • 5 * м2.4xlarge (с 60 ГБ ОЗУ для Tigase) - 312 тыс. Пользователей онлайн
  • 5 * м2.4xlarge (с 60 ГБ ОЗУ для Tigase) - 327 тыс. Пользователей онлайн
  • 5 * м2.4xlarge (с 60 ГБ ОЗУ для Tigase) - 280 тыс. Пользователей онлайн

Еще несколько комментариев:

  1. Почему объем памяти так важен? Это связано с тем, что мощность процессора очень ненадежна и непоследовательна во всех случаях, кроме cc1.4xlarge. У вас есть 8 виртуальных процессоров, но если вы посмотрите на верхнюю команду, вы часто увидите, что один процессор работает, а остальные нет. Эта недостаточная мощность процессора приводит к росту внутренних очередей в Tigase. Когда питание процессора возвращается, Tigase может обрабатывать ожидающие пакеты. Чем больше памяти у Tigase, тем больше пакетов может быть поставлено в очередь, и это лучше справляется с недостатками ЦП.
  2. Почему бывает 5 * м2.4большой 4 раза? Это потому, что я повторял тесты много раз в разные дни и время суток. Как вы можете видеть, в зависимости от времени и даты система может обрабатывать различные нагрузки. Я предполагаю, что это потому, что экземпляр Tigase поделился мощностью процессора с некоторыми другими сервисами. Если они были заняты, Tigase страдал от процессора под напряжением.

Тем не менее, я думаю, что с установкой до 10 тыс. Онлайн-пользователей у вас все будет в порядке. Тем не менее, другие факторы, такие как размер реестра, имеют большое значение, поскольку они влияют на трафик и нагрузку. Также, если у вас есть другие элементы, которые генерируют значительный трафик, это будет загружать вашу систему.

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

И последний вопрос относительно компонента:

Конечно, Tigase поддерживает XEP-0114 и XEP-0225 для подключения внешних компонентов. Так что это не должно быть проблемой с компонентами, написанными на разных языках. С другой стороны, я рекомендую использовать API Tigase для написания компонента. Они могут быть развернуты либо как внутренние компоненты Tigase, либо как внешние компоненты, и это прозрачно для разработчика, вам не нужно беспокоиться об этом во время разработки. Это часть API и фреймворка. Кроме того, вы можете использовать все товары из среды Tigase, возможности сценариев, мониторинг, статистику, значительно упростить разработку, поскольку вы можете легко развернуть свой код как внутренний компонент для тестов. Вам действительно не нужно беспокоиться о каких-либо специфических вещах XMPP, вы просто заполняете тело метода processPacket (...) и все. На сайте Tigase должно быть достаточно онлайн-документации для всего этого.

Кроме того, я бы посоветовал прочитать о поддержке Python для многопоточности и о том, как она ведет себя при очень высокой нагрузке. Раньше было не так здорово.

...