使用多个计算实例时如何管理到数据库的连接池?
How to manage connection pooling to a database when using multiple compute instances?
我非常熟悉在该实例上设置 Express 服务器和 运行 连接池,通常只是一个连接到外部数据库 (AWS RDS) 的简单 VPS。实例上的连接池将接近数据库 (postgresql) 的最大连接限制。这是当前设置:
One VPS with a single database
最近我的任务是让我们的 API 中的一个在多个区域中高度可用,这将包括至少 2 个连接到中央数据库的服务器。我会减少 pg.Pool 最大连接数并将其分成两半吗?假设数据库上的最大连接数是 100,因为我将有两个实例,我应该将它们分别设置为 50 个吗? (出于性能原因,最好少一些,但我希望你明白这一点)。
Multiple Servers, smaller connection pool in each
如果我将来有一个自动缩放组,这个会如何缩放?只是通过实例数不断减少最大连接数?
或者我是否必须设置另一个 VPS 来单独处理连接池,然后在那个上具有高可用性,这甚至会增加 更多 成本?
Master Connection Pooler
感谢您的帮助!
首先,连接池的大小不应设置为耗尽max_connections
,而应加以限制,即使所有连接都处于活动状态,数据库也不会过载。
如果您的应用程序有多个实例,您可能需要在这些服务器和数据库之间放置一个连接池,否则连接池将不会有效。
如果可以的话,我推荐 pgBouncer,在事务池模式下。
我非常熟悉在该实例上设置 Express 服务器和 运行 连接池,通常只是一个连接到外部数据库 (AWS RDS) 的简单 VPS。实例上的连接池将接近数据库 (postgresql) 的最大连接限制。这是当前设置:
One VPS with a single database
最近我的任务是让我们的 API 中的一个在多个区域中高度可用,这将包括至少 2 个连接到中央数据库的服务器。我会减少 pg.Pool 最大连接数并将其分成两半吗?假设数据库上的最大连接数是 100,因为我将有两个实例,我应该将它们分别设置为 50 个吗? (出于性能原因,最好少一些,但我希望你明白这一点)。
Multiple Servers, smaller connection pool in each
如果我将来有一个自动缩放组,这个会如何缩放?只是通过实例数不断减少最大连接数? 或者我是否必须设置另一个 VPS 来单独处理连接池,然后在那个上具有高可用性,这甚至会增加 更多 成本?
Master Connection Pooler
感谢您的帮助!
首先,连接池的大小不应设置为耗尽max_connections
,而应加以限制,即使所有连接都处于活动状态,数据库也不会过载。
如果您的应用程序有多个实例,您可能需要在这些服务器和数据库之间放置一个连接池,否则连接池将不会有效。
如果可以的话,我推荐 pgBouncer,在事务池模式下。