1

我正在使用 PostgreSQL 作为后端的 MongooseIM 服务器。我需要所有基本功能,例如:

  1. 一对一在线聊天。
  2. 群聊(仅限 Muc light)
  3. MAM 存储和所有其他基本功能。

我可以使用集群扩展 MongooseIM(使用 Mnesia 存储会话)。但我觉得我可能会在使用 PostgreSQL 的后端遇到瓶颈。PostgreSQL 可以处理的用户数量的粗略估计是多少,而无需像 Riak 这样的 No-sql 进行转移。因为从可扩展性的角度来看,我不想搞砸后端。

示例 - 假设我需要处理超过 1000 万用户。我可以为此使用 PostgreSQL。如果是,那么我是否需要像 Postgresql 中的分片这样的特殊技术才能继续使用它,或者在某些时候我必须转移到 Riak 或其他 Nosql。你有什么建议吗?

4

1 回答 1

2

这是一个复杂的问题。首先,它很大程度上取决于您在 MongooseIM 中启用的功能集,因此其他人完成的任何负载测试都可能无法反映您的特定配置和环境。

此外,为了真正能够监控系统中的所有重要参数,达到数以万计的用户,您可能需要客户端性能跟踪(交付确认、往返时间)——尽管这不是 XMPP XEP 标准化的,所以实现方式不同。

话虽如此,Postgres 可能只允许您扩展到数十万在线用户。它可能需要使用 XMPP 联合跨 MongooseIM 集群进行表分片和用户分片,以允许所有用户之间的通信。此架构中的数据库节点与 MIM 集群相关联,因此不会跨集群边界共享数据。众所周知,沿着这些路线的设置可以在生产中使用。

如果您必须处理数百万用户,您很可能必须从 PostgreSQL 切换到本身更易于扩展的数据库。MongooseIM 支持 Cassandra,目前这似乎是最好的选择。就个人而言,我很想知道TiKV(如果你尝试了,请告诉我)在这种设置中的表现如何。它伪装成在线上的 MySQL,因此也应该与 MongooseIM 一起使用,但在操作上与 Cassandra 类似:自动复制、集群可扩展性、容错等。

但是,最终,您只有通过测试自己才能知道。Instagram 分享了一些关于 Postgres 的有趣故事,这些故事显示了所需的维护量。唉,由于云成本,达到数百万用户的负载测试非常昂贵,因此这样的测试结果并不常见。

于 2019-01-02T11:23:48.020 回答