我有一个在 Cloud Run 基础架构中运行的应用程序。它是用 FastAPI 和 SQLAlchemy 构建的。该数据库是 Postgres,由 Cloud SQL 管理。 在某个时刻,数据库会发出警报,表明已超出最大连接数。我怀疑我使用的是大小为 5 的连接池,当生产中的容器最终因不活动而终止时,这些连接不会返回到池中。这一直持续到所有连接都被消耗为止。
我了解 Cloud Run 是短暂的;容器可能因不活动而终止,因此在没有另一个有状态层来保存这些连接的情况下使用连接池似乎并不明智。对我来说更正确的是在数据库前面使用 PGBouncer 或 PGPool。我什至查看谷歌是否有任何托管服务,但我没有找到。
总而言之,使用 Cloud Run 和 Cloud SQL 在基础架构中管理此连接池与数据库的正确方法是什么?
将此作为社区维基共享以造福他人
正如@John Hanley 所提到的
容器实例将收到容器正在终止的信号。收到 SIGTERM 后关闭打开的连接。 cloud.google.com/run/docs/samples/cloudrun-sigterm-handler