什么是连接 MongoDB Atlas 的 Mongoose 连接的最佳池大小?

20
我的 Express REST API 使用 MongoDB Atlas 上的 Mongoose。Atlas 运行在 M10s(EC2 T2 小型)上,而我的 REST API 在 EC2 M5 大型实例上。我目前使用 mongoose 连接选项“poolSize”作为默认值为 5(因此我认为共有 15 个打开的连接到副本集)。
我希望我的应用程序能够处理每秒 1000 个请求到 Atlas DB。
DB 只是一个基本的包含 50k 用户的集合,并且每个用户都有一些数据点和一个 10kb 的个人资料图像。其中 500 个请求将是为个人资料图像,另一半则是用于用户名和密码验证等其他事项。
我的 MongoDB Atlas 副本集显示其最大连接数为 350。如果我只使用了其中的 15 个,那么我是否会意外地创建一个瓶颈呢?这 15 个连接(每个节点 5 个)是否能够处理每秒 1000 个请求?我应该增加 Mongoose 中的“poolSize”设置到 100(总共到副本集的连接数为 300),以允许更多的每秒请求吗?我知道简单的答案是去测试它,但首先我想听听我应该在这种情况下做什么,以及是否我的当前设置“poolSize”为 5 对于每秒 1000 个请求来说可能已经足够了?
2个回答

17

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

这篇文章中有一段有用的信息:

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

通常情况下,过小的连接池大小会导致许多请求在等待连接上浪费时间,并可能在高负载情况下导致超时。

现在可以使用JMeter或其他工具设置并发请求来测试您的应用程序,看看默认的5个poolSize能够获得多少每秒请求数。

确保配置JMeter(或其他工具)以具有实际数量的并发用户和尽可能反映生产中所见的实际请求,并设置几个不同的负载情况,例如低负载、中负载和高负载。

一旦您有了默认设置的基准线,现在可以增加池大小并查看RPS的响应情况。

另外,要注意大型池大小的内存消耗问题,它们会占用每个连接约1兆字节的内存。

这种经验分析通常是您可以熟悉设置的方式。


1
这是关于MongoDB驱动程序将为此连接保持打开的套接字的最大数量。默认情况下,poolSize为5。请注意,自MongoDB 3.4以来,MongoDB一次仅允许一个操作使用一个套接字,因此如果您发现有一些缓慢的查询正在阻止更快的查询进行,则可能需要增加此值。
请查看此链接: http://mongoosejs.com/docs/connections.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接