如何解决Cloud Run 和 Cloud SQL 之间的连接数是否有限制?
尽管 Cloud SQL 中的限制足够高,但我们的应用程序中仍出现“连接被拒绝”错误。
我在云运行错误日志中发现了这个错误:
"Exceeded maximum of 100 connections per instance for CLOUD_SQL_INSTANCE_NAME."
logName: "projects/PROJECT_ID/logs/run.googleapis.com%2Fvarlog%2Fsystem"
我们的 Cloud SQL (MySQL 8) 正在使用这个 VM 运行:db-n1-standard-1 并且它的 max_connections 变量集 4030(这是默认值)所以我猜限制不是来自数据库本身。
文档中没有提到 Cloud Run 端对 Cloud SQL 连接的任何限制,只是数据库本身强制执行的一般限制。
我错过了什么吗?这是错误还是未记录的功能? 感谢您的任何答复!
解决方法
Cloud SQL MySQL 实例已达到连接限制 4000 default。到目前为止,我发现的潜在解决方法包括:
池化连接 - 实现连接池化,如前面提到的 here 可以帮助您重用连接,这不仅可以减少正在建立的连接总数,还可以提高整体性能。>
-
检查您的应用程序是否泄漏连接 - 正确关闭与 Cloud SQL MySQL instance 建立的连接将帮助您检测不应重复使用的“泄漏”连接
-
使用指数退避 - 实施指数 backoff 以重试连接还有助于您的团队提高针对您的 Cloud SQL MySQL 实例建立的连接的整体质量。
所以我收到了 Cloud SQL 文档团队的回复:
我了解到 Cloud Run 使用与 App Engine 相同的机制来控制与 Cloud SQL 的连接。此机制具有独立于数据库设置的最大连接数限制。
此限制为每个实例 100 个。这意味着应用程序的每个实例可以有 100 个连接,并且随着规模的扩大,每个部署的连接总数会增加。
用户无权更改此限制。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。