6

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

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

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

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

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

4

1 回答 1

5

自从你问起已经 6 周了,但自从我最近参与到这件事上,我想我会分享我的经验。

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

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

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

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

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

这是针对 t2.micro 作为我们的应用服务器的。如果我将服务器更改为更大的服务器,这个值可能会上升。

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

希望这可以帮助。

于 2017-05-17T02:11:03.050 回答