Масштабирующий сервер Tigase XMPP на Amazon EC2
У кого-нибудь есть опыт работы с кластерными серверами Tigase XMPP на Amazon EC2, в первую очередь я хотел бы знать обо всем, что может сбить меня с толку, что неочевидно. (Например, очевидно, что запуск Ejabberd на EC2 может вызвать проблемы из-за Mnesia.)
Или, если у вас есть какие-либо общие рекомендации по установке и запуску Tigase в Ubuntu.
Дополнительная информация:
Система, которую я разрабатываю, использует XMPP просто для связи (практически в реальном времени) между мобильным приложением и сервером (ами).
Число пользователей изначально будет небольшим, но, надеюсь, будет расти. Вот почему система должна быть масштабируемой. Предположительно для нескольких тысяч пользователей вам не нужен экземпляр cc1.4xlarge EC2? (В противном случае это будет очень дорого!)
Я планирую использовать базу данных MySQL, размещенную в Amazon RDS, для базы данных сервера XMPP.
Я также планирую создать внешний компонент XMPP, написанный на Python, используя SleekXMPP. Именно этот внешний компонент выполняет всю "работу" сервера, поскольку приложение, которое я создаю, сильно отличается от обмена мгновенными сообщениями. В этой части я не разработал, как подключить внешний компонент XMPP, написанный на Python, к серверу Tigase. Документация, кажется, предполагает, что компоненты написаны специально для Tigase, а не для обычного XMPP-сервера, с использованием XEP-0114: Jabber Component Protocol, как я и ожидал.
С этой дополнительной информацией, если вы можете придумать что-нибудь еще, о чем я должен знать, я был бы рад узнать.
Спасибо:)
1 ответ
У меня большой опыт. Я думаю, что есть масса неочевидных проблем. Как и единственный надежный экземпляр для запуска приложений, таких как Tigase, это cc1.4xlarge. Другие вызывают проблемы с доступностью ЦП, и это просто лотерея, если вам повезло запустить свой сервис на сервере, который не занят другими людьми, которые работают.
Также вам нужен экземпляр с максимально возможным вводом / выводом, чтобы он мог справиться с сетевым трафиком. Высокий ввод / вывод особенно важен для экземпляра базы данных.
Не уверен, очевидно это или нет, но есть проблема с именами хостов в EC2, каждый раз, когда вы запускаете экземпляр, меняется имя хоста и IP-адрес. Кластер Tigase довольно чувствителен к именам хостов. Существует способ принудительно / изменить имя хоста для экземпляра, так что это может быть решением проблемы.
Конечно, я говорю о кластере для миллионов онлайн-пользователей и по-настоящему интенсивному трафику XMPP-пакетов в секунду или более. Как правило, для больших установок выделенные серверы дешевле и эффективнее.
Как правило, Tigase очень хорошо работает на Amazon EC2, но вам действительно нужен последний код SVN, поскольку в него добавлено множество оптимизаций, особенно после тестирования в облаке. Если вы предоставите более подробную информацию о вашем сервисе, у меня может быть еще несколько предложений.
Больше комментариев:
Если речь идет о затратах, выделенный сервер всегда является более дешевым вариантом для постоянно работающего сервиса. Если вы не планируете включать / выключать серверы на почасовой основе, я бы порекомендовал пойти на какой-то выделенный сервис. Затраты ниже, а производительность более предсказуема.
Однако, если вы действительно хотите / должны придерживаться Amazon EC2, позвольте мне дать вам несколько конкретных цифр, ниже приведен список примеров и сколько онлайн-пользователей кластер смог надежно обработать:
- 5* cc1.4xlarge - 1 млн 700 000 пользователей онлайн
- 1*c1.xlarge - 118k пользователей онлайн
- 2*c1.xlarge - 127k пользователей онлайн
- 2*m2.4xlarge (с 5 ГБ ОЗУ для Tigase) - 236 тыс. Пользователей онлайн
- 2*m2.4xlarge (с 20 ГБ ОЗУ для Tigase) - 315 тыс. Пользователей онлайн
- 5*m2.4xlarge (с 60 ГБ ОЗУ для Tigase) - 400 тыс. Онлайн-пользователей
- 5*m2.4xlarge (с 60 ГБ ОЗУ для Tigase) - 312 тыс. Пользователей онлайн
- 5*m2.4xlarge (с 60 ГБ ОЗУ для Tigase) - 327 тыс. Пользователей онлайн
- 5*m2.4xlarge (с 60 ГБ ОЗУ для Tigase) - 280 тыс. Пользователей онлайн
Еще несколько комментариев:
- Почему количество памяти так важно? Это связано с тем, что мощность процессора очень ненадежна и несовместима во всех случаях, кроме cc1.4xlarge. У вас есть 8 виртуальных процессоров, но если вы посмотрите на верхнюю команду, вы часто увидите, что один процессор работает, а остальные нет. Эта недостаточная мощность процессора приводит к росту внутренних очередей в Tigase. Когда питание процессора возвращается, Tigase может обрабатывать ожидающие пакеты. Чем больше памяти у Tigase, тем больше пакетов может быть поставлено в очередь, и это лучше справляется с недостатками ЦП.
- Почему стоит 5* м2.4 больших 4 раза? Это потому, что я повторял тесты много раз в разные дни и время суток. Как вы можете видеть, в зависимости от времени и даты система может обрабатывать различные нагрузки. Я предполагаю, что это потому, что экземпляр Tigase поделился мощностью процессора с некоторыми другими сервисами. Если они были заняты, Tigase страдал от процессора под напряжением.
Тем не менее, я думаю, что с установкой до 10 тыс. Онлайн-пользователей у вас все будет хорошо. Тем не менее, другие факторы, такие как размер реестра, имеют большое значение, поскольку они влияют на трафик и нагрузку. Также, если у вас есть другие элементы, которые генерируют значительный трафик, это будет загружать вашу систему.
В любом случае, без каких-либо тестов невозможно определить, как на самом деле ведет себя ваша система или справится ли она с нагрузкой.
И последний вопрос относительно компонента:
Конечно, Tigase поддерживает XEP-0114 и XEP-0225 для подключения внешних компонентов. Так что это не должно быть проблемой с компонентами, написанными на разных языках. С другой стороны, я рекомендую использовать API Tigase для написания компонента. Они могут быть развернуты либо как внутренние компоненты Tigase, либо как внешние компоненты, и это прозрачно для разработчика, вам не нужно беспокоиться об этом во время разработки. Это часть API и фреймворка. Кроме того, вы можете использовать все товары из среды Tigase, возможности сценариев, мониторинг, статистику, значительно упростить разработку, поскольку вы можете легко развернуть свой код как внутренний компонент для тестов. Вам действительно не нужно беспокоиться о каких-либо специфических для XMPP вещах, вы просто заполняете тело метода processPacket(...) и все. На сайте Tigase должно быть достаточно онлайн-документации.
Кроме того, я бы посоветовал прочитать о поддержке Python для многопоточности и о том, как она ведет себя при очень высокой нагрузке. Раньше было не так здорово.