MongooseIM 可以在 PostgreSQL 后端处理多少用户?
Posted
技术标签:
【中文标题】MongooseIM 可以在 PostgreSQL 后端处理多少用户?【英文标题】:How many users can MongooseIM handle on the PostgreSQL backend? 【发布时间】:2018-12-29 18:03:38 【问题描述】:我正在使用 PostgreSQL 作为后端的 MongooseIM 服务器。我需要所有基本功能,例如:
-
在线状态一对一聊天。
群聊(仅限 Muc light)
MAM 存储和所有其他基本功能。
我可以通过集群扩展 MongooseIM(使用 Mnesia 存储会话)。但我觉得我可能会在使用 PostgreSQL 的后端遇到瓶颈。 PostgreSQL 可以处理的用户数量的粗略估计是多少,而无需像 Riak 这样的 No-sql 进行转移。因为我不想从可扩展性的角度搞乱后端。
示例 - 假设我需要处理超过 1000 万用户。我可以为此使用 PostgreSQL。如果是,那么我是否需要像 Postgresql 中的分片这样的特殊技术才能继续使用它,或者在某些时候我必须转移到 Riak 或其他 Nosql。你有什么推荐的?
【问题讨论】:
【参考方案1】:这是一个复杂的问题。首先,这很大程度上取决于您在 MongooseIM 中启用的功能集,因此其他人所做的任何负载测试都可能无法反映您的特定配置和环境。
此外,为了真正能够监控系统中的所有重要参数,达到数以万计的用户,您可能需要客户端性能跟踪(交付确认、往返时间)——这不是 XMPP XEP 标准化的但是,因此实现会有所不同。
话虽如此,Postgres 可能只允许您扩展到数十万在线用户。它可能需要使用 XMPP 联合跨 MongooseIM 集群进行表分片和用户分片,以允许所有用户之间的通信。此架构中的 DB 节点与 MIM 集群相关联,因此不会跨集群边界共享数据。众所周知,按照这些方式进行的设置可以在生产环境中使用。
如果您必须处理数百万用户,您很可能必须从 PostgreSQL 切换到本身更易于扩展的数据库。 MongooseIM supports Cassandra,目前似乎是最好的选择。就个人而言,我很想知道TiKV(请告诉我,如果你尝试那个)在这种设置中的票价。它伪装成在线上的 mysql,因此也可以与 MongooseIM 一起使用,但在操作上与 Cassandra 类似:自动复制、集群可扩展性、容错等。
不过,最终,您只有通过测试自己才能知道。 Instagram 分享了 some 有趣的 stories 关于 Postgres 的大规模信息,其中显示了所需的维护量。唉,由于云成本,负载测试对数百万用户来说非常昂贵,因此这样的测试结果并不常见。
【讨论】:
感谢 erszcz,这非常有用。看来我不能低估 Postgresql 的潜力,也不应该盲目地接受任何 nosql 技术。尽管像 Cassandra 这样的 nosql 肯定是一个明智的选择。但如果 Instagram 可以在 Postgresql 中管理他们的工作,那么我也必须认真对待 小心 - Cassandra 可能不支持所有用途。 “持久数据:Cassandra - 仅适用于 MAM(消息存档管理)。”根据mongooseim.readthedocs.io/en/latest/advanced-configuration/…以上是关于MongooseIM 可以在 PostgreSQL 后端处理多少用户?的主要内容,如果未能解决你的问题,请参考以下文章
XMPP 服务器 MongooseIM 是不是可以与 BOSH 或 WebSocket 一起使用?
有没有像 MongooseIm mod_inbox 这样的 ejabberd 模块?
MUC 消息的 MongooseIM 推送通知(不是 MUC 灯)
为啥 MongooseIM 会在 60 秒后关闭 websocket 连接?