【问题标题】:Is there any limitation of number of connection between Cloud Run and Cloud SQL?Cloud Run 和 Cloud SQL 之间的连接数是否有限制?
【发布时间】:2021-04-11 15:55:52
【问题描述】:

尽管 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) 正在使用这个虚拟机运行:db-n1-standard-1,它的 max_connections 变量设置为 4030(这是默认值),所以我猜这个限制不是来自数据库本身。

在文档中没有提到来自 Cloud Run 端的 Cloud SQL 连接的任何限制,只是数据库本身强制执行的一般限制。

我错过了什么吗?它是错误还是未记录的功能? 感谢您的任何回答!

【问题讨论】:

  • 您是使用 VPC 连接器连接到 Cloud SQL 还是使用内置的 /cloudsql 套接字?澄清这一点会很好。
  • 您是每个容器实例使用一个连接,还是忘记打开/关闭连接?
  • 奇怪,100 的限制是用于 PostgreSQL(与您的机器类型)!您可以运行此命令并查看数据库中设置的值吗? SHOW VARIABLES LIKE "max_connections";
  • @AhmetB-Google:我们为 Redis Memorystore 使用 VPC 连接器,为 Cloud SQL 连接使用内置 /cloudsql 套接字。
  • @guillaumeblaquiere:正如我在问题帖子中所说,max_connections 设置为 4030

标签: google-cloud-platform google-cloud-sql google-cloud-run


【解决方案1】:

所以我收到了 Cloud SQL 文档团队的回复:

我了解到 Cloud Run 使用与 App Engine 相同的机制来控制与 Cloud SQL 的连接。此机制具有独立于数据库设置的最大连接数限制。

此限制为每个实例 100。这意味着应用程序的每个实例可以有 100 个连接,并且随着它的扩展,每个部署的连接总数会增加。

用户无权更改此限制。

【讨论】:

    【解决方案2】:

    Cloud SQL MySQL 实例正在达到连接限制 4000 default。到目前为止,我发现的潜在解决方法包括:

    1. 连接池 - 实现连接池,如 here 所述,可以帮助您重用连接,这不仅可以减少建立的连接总数,还可以提高整体性能。

    2. 检查您的应用程序是否泄漏连接 - 正确关闭与 Cloud SQL MySQL instance 的连接将帮助您检测不应重复使用的“泄漏”连接

    3. 使用指数退避 - 实施指数backoff 来重试连接还有助于您的团队提高针对您的 Cloud SQL MySQL 实例建立的连接的整体质量。

    【讨论】:

    • 我们没有达到 4000 的限制,这个限制是别的东西。到 1.) PHP-FPM 不允许我们使用池...如果我们连接到数十或数百个不同的数据库,池也没有意义
    猜你喜欢
    • 2021-04-26
    • 1970-01-01
    • 2019-10-28
    • 2020-06-15
    • 1970-01-01
    • 2020-08-18
    • 2020-07-01
    • 2020-08-05
    • 1970-01-01
    相关资源
    最近更新 更多