Сколько пользователей может обрабатывать MongooseIM на сервере PostgreSQL?
Я работаю на сервере MongooseIM с PostgreSQL в качестве бэкэнда. Мне нужны все основные функции, такие как:
- Общение один на один с присутствием.
- Групповой чат (только Muc light)
- Хранение MAM и все другие основные функции.
Я могу масштабировать MongooseIM с кластеризацией (с Mnesia для хранения сессий). Но я чувствую, что могу столкнуться с проблемой "горлышка бутылки" со стороны сервера, используя PostgreSQL. Какова приблизительная оценка количества пользователей, которые могут обрабатываться PostgreSQL без необходимости перехода на No-sql, например Riak. Потому что я не хочу портить бэкэнд с точки зрения масштабируемости.
Пример. Предположим, мне нужно обработать>10 миллионов пользователей. Могу ли я использовать PostgreSQL для этого. Если да, то мне нужны специальные методы, такие как шардинг в Postgresql, чтобы продолжать работать с ним, или в какой-то момент мне нужно перейти на Riak или другой Nosql. Что вы порекомендуете?
1 ответ
Это сложный вопрос. Прежде всего, это во многом зависит от набора функций, которые вы включили в MongooseIM, поэтому любые нагрузочные тесты, выполненные другими, могут не отражать вашу конкретную конфигурацию и среду.
Более того, для того, чтобы на самом деле иметь возможность отслеживать все важные параметры в системе, охватывающей десятки тысяч пользователей, вам, вероятно, потребуется отслеживание производительности на стороне клиента (подтверждение доставки, время приема-передачи) - хотя это не стандартизировано в XMPP XEPP, поэтому реализации варьируются.
При этом Postgres, вероятно, позволит вам масштабироваться только до сотен тысяч онлайн-пользователей. Это может потребовать разделения таблиц и пользователей в кластерах MongooseIM с использованием федерации XMPP для обеспечения связи между всеми пользователями. Узлы БД в этой архитектуре связаны с кластерами MIM, поэтому не обмениваются данными через границы кластера. Установки по этим направлениям, как известно, работают в производстве.
Если вам приходится работать с миллионами пользователей, вам, скорее всего, придется переключиться с PostgreSQL на базу данных, которая сама по себе будет легче масштабироваться. MongooseIM поддерживает Cassandra, которая в настоящее время кажется лучшей ставкой. Лично мне было бы интересно узнать, как TiKV (дайте мне знать, пожалуйста, если вы попробуете это) поживает в таких установках. Он претендует на то, чтобы быть MySQL в сети, поэтому должен работать и с MongooseIM, но в функциональном отношении он ведет себя подобно Cassandra: автоматическая репликация, масштабируемость кластера, отказоустойчивость и т. Д.
В конечном счете, вы узнаете об этом, только проверив себя. Instagram делится некоторыми интересными историями о Postgres в масштабе, которые показывают количество необходимого обслуживания. Увы, нагрузочные тесты, охватывающие миллионы пользователей, непомерно дороги из-за облачных затрат, поэтому такие результаты не распространены.