最大连接池大小和自动缩放组

Max connection pool size and autoscaling group

在 Sequelize.js 中,您应该配置最大连接池大小(默认为 5)。当我在 AWS 的自动缩放平台上工作时,我不知道如何处理此配置。

r3.2xlarge 上的 Aurora 数据库集群允许每个只读副本有 2000 个最大连接(您可以通过 运行 SELECT @@MAX_CONNECTIONS; 获得)。

问题是我不知道在我们的 EC2 上托管的每个服务器的正确配置应该是什么。正确的最大连接池大小应该是多少,因为我不知道自动缩放组将启动多少台服务器?正常来说应该是DBMAX_CONNECTIONS的值除以连接池的个数(server一个),但是不知道最后会实例化多少个server

我们的并发用户数量估计在我们发布之日的 50000 到 75000 之间。

有人有过这种情况的经验吗?

你提出问题已经 6 周了,但自从我最近参与其中后,我想我会分享我的经验。

答案因应用程序的工作方式和性能而异。加上实例类型负载下应用程序的特性。

1) 您希望您的池大小大于主机上预期的同时查询 运行ning。
2) 您永远不希望出现客户端数量 * 池大小接近最大连接限制的情况。

请记住,同时查询通常少于同时 Web 请求,因为大多数代码使用连接来执行查询然后释放它。

因此,您需要对您的应用程序建模,以了解您的 75K 用户会发生的实际查询(和数量)。这可能比每秒 75K/秒的数据库查询少很多。

然后您可以构建脚本 - 我们使用了 jmeter - 和 运行 模拟性能的测试。我们在测试期间所做的一项工作是将池增加得更高并查看性能差异。在做基线后,我们实际上使用了一个很大的数字(100),发现这个数字有所不同。然后我们将其放下,直到它开始发挥作用。在我们的例子中它是 15,所以我将它设置为 20。

这反对 t2.micro 作为我们的应用程序服务器。如果我将服务器换成更大的服务器,这个值可能会上升。

请注意,当您设置更高的数字时,您会在应用程序启动时付出代价...并且您还会在服务器上产生一些开销以保持这些空闲连接,因此设置比您需要的更大的数字并不好。

希望对您有所帮助。