我的Express REST API将Mongoose与MongoDB Atlas结合使用。 Atlas正在运行M10(EC2 T2小型),而我的REST API在EC2 M5大型上。我当前使用猫鼬连接选项“ poolSize”作为默认值5(因此,我认为到副本集的15个打开的连接总数)。
我希望我的应用程序每秒能够处理1000个请求给Atlas数据库。
DB只是一个5万个用户的基本集合,每个用户都有几个数据点以及一个10kb的配置文件映像。其中500个请求用于个人资料图片,另一半用于用户名和密码身份验证。
我的MongoDB Atlas副本集表示最多具有350个连接。如果仅使用其中的15个,是否会在这里无意中造成瓶颈?那15个连接(5个/节点)每秒能够处理1000个请求吗?我是否应该将Mongoose中的“ poolSize”增加到100(到副本集的总连接数为300),以允许每秒更多的请求?我知道简单的答案是说去测试一下,但是首先我想大致听一下我在这种情况下应该做什么,并且知道我当前设置的“ poolSize”为5是否适合1000个请求/秒?
答案 0 :(得分:8)
我认为这里的链接应为您提供帮助:https://dzone.com/articles/how-to-use-mongodb-connection-pooling-on-aws-lambd
那里有一大堆有用的信息:
连接池大小确定驱动程序在给定时间可以处理的并行请求的最大数量。如果达到了连接池限制,则将发出任何新请求以等待现有请求完成。因此,需要在考虑应用程序负载和要实现的并发性的情况下谨慎选择池大小。
通常,较小的池大小会导致许多请求处于等待状态,并等待连接,并且可能导致高负载超时。
继续并使用JMeter或其他设置的工具向您的应用程序发出并发请求,并查看默认的5 poolSize每秒收到的请求类型。
确保配置JMeter(或其他工具),以便它具有实际数量的并发用户和实际请求,它们尽可能地反映出您将在生产中看到的内容。并设置一些品种,例如低负荷,中负荷和高负荷情况。
一旦您的基线具有默认设置,现在就可以增加池并查看RPS的响应方式。
此外:当池大小较大时要注意内存消耗,每个连接消耗大约1MB的内存。
这种经验分析通常是使您适应设置的方式。
答案 1 :(得分:1)
MongoDB驱动程序将为此连接保持打开状态的最大套接字数。默认情况下,poolSize为5。请记住,从MongoDB 3.4开始,MongoDB一次只允许每个套接字一次操作,因此,如果发现有一些慢查询阻止了更快的查询,则可能需要增加此操作。继续。
请通过以下链接进行操作: http://mongoosejs.com/docs/connections.html