【问题标题】:Mitigating Cloud Run's limitation regarding Cloud SQL connections per instance缓解 Cloud Run 对每个实例的 Cloud SQL 连接数的限制
【发布时间】:2021-07-13 02:53:51
【问题描述】:

我使用 --add-cloudsql-instances 参数将我的 Cloud SQL 实例链接到 Cloud Run。

某些请求的响应中出现 500 内部服务器错误。查看日志,我知道 Cloud Run “每个实例的连接数超过 100 个上限...”。我知道 Cloud Run 将每个 Cloud Run 实例可以与 Cloud SQL 建立的连接数限制为 100。

我已经尝试在我的 Cloud Run 服务中设置较低的并发级别,以避免每个实例超过限制,但问题永远不会消失。我可以做些什么来缓解这种行为并使我的应用程序恢复正常稳定性?

PS。我在互联网上的任何地方都找不到关于此的好的和最近的答案,所以我决定在这里问。

关于我的上一个 Cloud Run 修订版的详细信息:4 个 vCPU、6GB 的 RAM、--concurrency 为 32。

【问题讨论】:

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


    【解决方案1】:

    并发数为 32,连接数限制为 100,你有一个连接问题。您要么在返回 HTTP 响应之前没有关闭连接(留下未使用的连接),要么在每个 HTTP 请求中打开多个连接并且可能没有关闭它们。

    您需要对数据库连接处理进行代码审查。

    打开数据库连接是一项昂贵的操作。每个 HTTP 请求打开多个连接会消耗时间和资源。使用连接池重用连接以提高性能并防止耗尽打开的连接限制。

    【讨论】:

    • 感谢您的回答,您总是在这里帮助我 ;) 这个 100 个连接的限制与从实例建立的连接总数有关,还是与当前的活动/打开/未关闭连接数有关数据库?
    • @deniable_encryption - 100 个连接限制是打开(未关闭)的最大连接数。即使连接不活动,它仍然计入最大值。我写了一篇涵盖这个主题的文章。代码是Node.js:jhanley.com/…
    • @deniable_encryption - 如果你有忘记关闭连接的错误,减少并发只会延长达到最大值所需的时间。
    • 如果你的代码没有关闭连接,那么等待解决不了问题。
    • 我不认为 私有 IPserverless VPC 连接器 会影响限制。限制为 100 个打开的连接。
    【解决方案2】:

    通过设置 HTTPS 负载平衡器来限制应用程序的负载。

    【讨论】:

      猜你喜欢
      • 2019-10-28
      • 2021-08-27
      • 2021-04-11
      • 2021-12-25
      • 2020-07-01
      • 1970-01-01
      • 2020-06-15
      • 2019-09-16
      • 2022-08-18
      相关资源
      最近更新 更多