Сколько пользователей может обрабатывать MongooseIM на сервере PostgreSQL? - PullRequest
0 голосов
/ 29 декабря 2018

Я работаю на сервере MongooseIM с PostgreSQL в качестве бэкэнда.Мне нужны все основные функции, такие как:

  1. Один в один чат с присутствием.
  2. Групповой чат (только Muc light)
  3. Хранение MAM и все другие основные функции.

Я могу масштабировать MongooseIM с кластеризацией (с Mnesia для хранения сессий).Но я чувствую, что могу столкнуться с проблемой «горлышка бутылки» со стороны бэкэнда при использовании PostgreSQL.Какова приблизительная оценка количества пользователей, которые могут обрабатываться PostgreSQL без необходимости перехода на No-sql, например Riak.Потому что я не хочу портить бэкэнд с точки зрения масштабируемости.

Пример. Предположим, мне нужно обработать> 10 миллионов пользователей.Могу ли я использовать PostgreSQL для этого.Если да, то мне нужны специальные методы, такие как шардинг в Postgresql, чтобы продолжать работать с ним, или в какой-то момент мне нужно перейти на Riak или другой Nosql.Что вы рекомендуете?

1 Ответ

0 голосов
/ 02 января 2019

Это сложный вопрос.Прежде всего, это во многом зависит от набора функций, которые вы включили в MongooseIM, поэтому любые нагрузочные тесты, выполненные другими, могут не отражать вашу конкретную конфигурацию и среду.

Более того, чтобы фактически иметь возможность контролировать всеважные параметры в системе, достигающие десятков тысяч пользователей, вам, вероятно, потребуется отслеживание производительности на стороне клиента (подтверждение доставки, время приема-передачи) - однако это не стандартизировано XMPP XEP, поэтому реализации различаются.

При этом Postgres, вероятно, позволит вам масштабироваться только до сотен тысяч онлайн-пользователей.Это может потребовать разделения таблиц и пользователей в кластерах MongooseIM с использованием федерации XMPP для обеспечения связи между всеми пользователями.Узлы БД в этой архитектуре связаны с кластерами MIM, поэтому не обмениваются данными через границы кластера.Известно, что установки в этом направлении работают в производственных условиях.

Если вам приходится работать с миллионами пользователей, вам, скорее всего, придется переключиться с PostgreSQL на базу данных, которая сама по себе легче масштабируется. MongooseIM поддерживает Cassandra , что на данный момент является наилучшей ставкой.Лично мне было бы интересно узнать, как TiKV (дайте мне знать, пожалуйста, если вы попробуете это), в таких условиях.Предполагается, что это MySQL в сети, поэтому он также должен работать с MongooseIM, но в функциональном отношении он работает аналогично Cassandra: автоматическая репликация, масштабируемость кластера, отказоустойчивость и т. Д.

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

...