如何关闭旧 Cloud Run 修订版的 SQL 连接?

Bas*_*ein 5 postgresql google-cloud-sql google-cloud-platform hikaricp google-cloud-run

语境

我正在 Cloud Run 上运行 SpringBoot 应用程序,该应用程序使用 Hikari 连接池连接到 postgres11 CloudSQL 数据库。我使用的是最小的 PSQL 实例(1vcpu/614mb/25 连接限制)。对于设置,我遵循了以下资源:

从 Cloud Run 连接到 Cloud SQL

管理数据库连接

问题

部署第三个修订版后,出现以下错误:

FATAL: remaining connection slots are reserved for non-replication superuser connections

我发现了什么

  • 默认连接池大小为 10,这就是为什么它在第三次部署时失败 (30 > 25)。

  • 删除旧版本时,Cloud SQL 管理面板中显示的活动连接数会减少 10,并且下一次部署会成功。

问题

看来,旧的 Cloud Run 修订版一直处于“冷”状态,以维护其连接池。有没有办法关闭这些连接而不删除修订?

最佳实践部分,它说:

...我们建议您使用支持连接池的客户端库,该连接池可以自动重新连接断开的客户端连接。”

鉴于旧版本似乎以某种方式设法维护其连接,在 Cloud Run 中管理连接池的推荐方法是什么?

谢谢!

kur*_*svg 5

目前,Cloud Run 不保证启动后能保持多长时间。不使用时,实例会因不一定关闭而受到严重限制。因此,即使没有定向流量,您也有一些修改会阻止连接。

即使在这种情况下,我也不同意您应该避免使用连接池的想法。连接池可以降低延迟、提高稳定性,并有助于限制打开连接的数量。或者,您可以使用以下一些配置选项来帮助控制池:

minimumIdle- 此属性控制 HikariCP 尝试在池中维护的最小空闲连接数。如果空闲连接低于此值并且池中的总连接数小于 MaximumPoolSize,HikariCP 将尽最大努力快速有效地添加其他连接。

maximumPoolSize- 此属性控制池允许达到的最大大小,包括空闲连接和正在使用的连接。

idleTimeout- 此属性控制允许连接在池中空闲的最长时间。此设置仅适用于minimumIdle 定义为小于maximumPoolSize 的情况。一旦池达到最小空闲连接数,空闲连接就不会被终止。

如果设置minimumIdle为 0,您的应用程序仍然可以maximumPoolSize同时使用最多连接。但是,一旦连接在池中空闲了几idleTimeout秒钟,它就会被关闭。如果你设置idleTimeout为较小的值(例如 1 分钟),则池中正在使用的连接数将在不使用时缩减至 0。

希望这可以帮助!