【问题标题】:mongodb connection handling for multi-tenant architecture多租户架构的mongodb连接处理
【发布时间】:2014-02-08 08:58:53
【问题描述】:

我们目前正在设计具有基于订阅者/用户的操作模式的 SaaS 应用程序。例如,单个订阅者的帐户中可以有 5、10 或最多 25 个用户,具体取决于他们使用的套餐类型。

目前,我们正在使用每个租户一个数据库的方法。从应用程序的角度来看,这对我们有几个好处。

我已经阅读了与 Mongo 相关的连接限制,我有点困惑和担心。我希望有人能用简单的话为我澄清一下,因为我和 Mongo 的合作不多。

据我了解,mongod 进程和 mongos 进程有 20,000 个可用连接的硬性限制。

这如何转化为这种多租户方法?我试图基本上评估我将如何根据副本集部署应用程序,以及是否需要分片,这样我就不会达到这些限制。例如,如果您有 10,000 个租户和多个用户超出限制,如何处理这种情况。

我们的应用程序通常不需要分片,因为每个租户集合不会达到需要分片的程度。不过据我了解,MongoDB 将在每个分片上以循环方式创建数据库,并分配可能有助于解决连接问题的负载。

这只是我试图理解我所读到的内容,我希望有人可以为我解决这个问题。

提前致谢

编辑

如果我只是添加副本集,这会缓解这个问题吗?即使只有主节点可以接受我所理解的写入?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    您只需将数据库连接存储在池中并在再次访问同一数据库时重用它。这会将连接数限制在一个合理的数量,除非您不使用 10,000 个数据库,否则无论如何都不是一个好主意。

    【讨论】:

    • 这如何解决问题呢?如果我正在使用连接池并且活动用户总数超过了池中可以拥有的连接数量,那么它如何扩展?我正在寻找一个在没有连接问题的情况下均匀分布负载的答案。这意味着 MongoDB 中每个数据库的单个租户多租户方法有一个硬性限制,但我怀疑可能是这种情况。其他人在连接方面如何处理这种架构?
    • 如果您有 10,000 个租户,并且每个租户都有自己的数据库,并且您希望只使用一个应用程序服务器来处理这一切,那么这是行不通的。您应该过度考虑您的数据库架构,或者您必须通过在不同服务器上按组处理租户来自行“分片”-> appServer1/dbServer1 上的租户1-1000,appServer2/dbServer2 上的租户1001-2000 a.s.o.
    • 这是我真正想要找出的。我需要什么类型的网络拓扑才能达到这个结果?基本上,从集合的角度来看,应用程序不需要分片,但从你所说的,从租户的角度来看,是的,情况就是这样。
    • 如果您将每个租户存储在一个数据库中,您将在 appserver 和 mongo 之间为每个租户至少建立一个连接。这迫使您限制每个 appserver 和 mongo 实例的租户数量。所以你必须有多个。在这一点上,很难就这样一个笼统的问题做出更具体的回答。
    猜你喜欢
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 2011-05-25
    • 2023-01-28
    • 2010-12-24
    • 1970-01-01
    • 2013-12-26
    • 2015-07-02
    相关资源
    最近更新 更多