【问题标题】:What is the optimal pool size for a Mongoose connection to MongoDB Atlas?Mongoose 连接到 MongoDB Atlas 的最佳池大小是多少?
【发布时间】:2018-12-29 02:12:14
【问题描述】:

我的 Express REST API 正在使用 Mongoose 和 MongoDB Atlas。 Atlas 正在运行 M10s(EC2 T2 smalls),而我的 REST API 在 EC2 M5 Large 上。我目前使用 mongoose 连接选项“poolSize”作为默认值 5(所以我认为副本集总共有 15 个打开的连接)。

我希望我的应用程序能够每秒处理 1000 个对 Atlas DB 的请求。

数据库只是 50K 用户的基本集合,每个用户都有几个数据点以及 10kb 的个人资料图片。 500 个请求将针对个人资料图像,另一半针对用户名和密码验证等内容。

我的 MongoDB Atlas 副本集说它最多有 350 个连接。如果我只使用其中的 15 个,我是否会无意中造成瓶颈?这 15 个连接(5 个/节点)是否能够每秒处理 1000 个请求?我是否应该将 Mongoose 中的“poolSize”增加到 100(到副本集的总连接数为 300)以便每秒允许更多请求?我意识到简单的答案是说去测试一下,但首先我想大致了解一下在这种情况下我应该做什么,并知道我当前设置的“poolSize”为 5 是否适用于 1000 个请求/秒?

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    我认为这里的链接应该对你有所帮助:https://dzone.com/articles/how-to-use-mongodb-connection-pooling-on-aws-lambd

    来自那里的一大块有用信息:

    连接池大小决定了您的驱动程序在给定时间可以处理的最大并行请求数。如果达到连接池限制,任何新请求都将等待现有请求完成。因此,需要仔细选择池大小,同时考虑要实现的应用程序负载和并发性。

    通常,较小的池大小会导致您的大量请求等待连接,并可能导致高负载超时。

    继续使用 JMeter 或其他设置为您的应用程序执行并发请求的工具,并查看使用默认 5 poolSize 时您每秒获得的请求类型。

    确保配置 JMeter(或其他工具),使其具有真实数量的并发用户和真实请求,尽可能反映您将在生产中看到的内容。并设置了低负荷、中负荷、高负荷几种情况。

    一旦您的基线具有默认设置,现在您可以增加池并查看 RPS 如何响应。

    另外:注意大型池的内存消耗,每个连接会消耗约 1 兆字节。

    这种经验分析通常是您如何适应您的设置。

    【讨论】:

      【解决方案2】:

      MongoDB 驱动程序将为此连接保持打开的最大套接字数。默认情况下,poolSize 为 5。请记住,从 MongoDB 3.4 开始,MongoDB 一次只允许每个套接字执行一个操作,因此如果您发现有一些慢速查询阻塞了来自进行中。

      请浏览此链接: http://mongoosejs.com/docs/connections.html

      【讨论】:

        猜你喜欢
        • 2011-09-06
        • 2019-03-14
        • 2019-10-23
        • 1970-01-01
        • 1970-01-01
        • 2020-02-22
        • 2020-07-25
        • 2017-09-09
        • 1970-01-01
        相关资源
        最近更新 更多