错误 429:超出配额指标 'Queries' 和限制 'Queries per minute per user' 的配额
Error 429: Quota exceeded for quota metric 'Queries' and limit 'Queries per minute per user'
我们将一项服务从 GCP App Engine 迁移到了云端 运行。此服务已连接到云 SQL。
其参数为:
- 每个容器的最大请求数:1
- 分钟实例:0
- 最大实例数:200
收到尖峰信号后,我们多次遇到此错误:
Cloud SQL connection failed. Please see https://cloud.google.com/sql/docs/mysql/connect-overview for additional details: googleapi: Error 429: Quota exceeded for quota metric 'Queries' and limit 'Queries per minute per user' of service 'sqladmin.googleapis.com' for consumer 'project_number:370240628xxx'., rateLimitExceeded
Cloud SQL Admin API 中的配额每个用户每分钟查询 设置为 180。所以这显然是失败的地方。
我发现由于 Cloud 运行 连接到 Cloud SQL 实例的方式,达到了配额限制。正如 this link 所说:
The native connection leverages the Cloud SQL Auth proxy which in turns makes requests to the Cloud SQL Admin API. This API - like all GCP APIs - has throttling quotas which will prevent containers from starting once reached.
同一网站上的教程建议使用 VPC 连接器而不是普通的云 SQL 连接。但是我以某种方式看到了 Google 的 docs and other Whosebug posts suggesting adding quotaUser 参数。
最佳解决方案是什么?我通常会选择 VPC,但由于这是一项付费服务,我显然会尽量避免这种情况。由于我已经为 Cloud 运行 和 Cloud SQL 付费,我希望这两者能够毫无问题地连接起来,并且不会产生额外费用。
感谢您的所有提示和帮助!
max requests per container: 1
min instances: 0
max instances: 200
哇,好奇怪的设置。
以上表示你的concureny=1。对于每个请求,您都会启动一个全新的容器。您的所有请求都启动缓慢。
您应该将 max requests per container
增加到您的容器基于其运行的进程可以跟上的阈值,例如:80 request/container 对于具有 512MB 的简单网络服务听起来不错。试验一下。
将并发数从 1 增加到 80,这意味着可以重复使用 1 个数据库连接,并且不会达到其他限制。
ps。我不知道您可以为 SQL 连接指定 quotaUser
的任何方法,这是一个 unix socket
类型的连接。
简短说明:
我们通过使用允许我们创建内部网络的 VPC 无服务器连接器(VPC 网络 -> 无服务器 VPC 访问)解决了这个问题。
“每位用户每分钟查询”配额适用于云 SQL 管理员 API。由于我们现在使用内部网络,因此我们不会达到此 API 及其限制。
步骤:
- 注册一个新的VPC无服务器连接器。可以在VPC网络->无服务器VPC访问中找到。我们选择“默认”网络,将 IP 地址范围设置为“10.8.0.0/28”,并将“e2-micro”设置为实例类型。关于区域,我们指定了“europe-west1”,因为我们的 Cloud 运行 服务位于那里。正如 Google documentation 所说,VPC 的区域必须与您的服务区域匹配才能工作。
- 您必须为您的 SQL 启用“私有 IP”。它可以在 SQL -> 连接中找到。我们选择“默认”网络并选择 Google 为我们生成地址。 Google 花了几秒钟完成这个过程。
- 然后,要设置这些设置,您必须按“保存”按钮,但是请小心,因为接下来的过程需要几分钟才能完成(我们的 7 分钟例)
- 我们去 SQL -> Overview 并复制了新生成的“私有 IP 地址”。
- 然后,我们将此地址用作我们 Cloud 运行 中的环境变量,如 SQL_HOST。之前,SQL_HOST 变量改为“连接名称”,其形式为“项目名称:欧洲西部 3:数据库名称”。所以这被替换为“私有IP”。
它起作用了,尽管我们认为 Google 应该默认这样做。云 运行 应该是一种可以扩展到高数量的服务,但您很快就会发现流量增加会导致问题。
更新:
我们最终创建了一个新的 VPC 网络,仅用于从云 运行 服务到数据库的连接。因此,我们将数据库和无服务器 VPC 连接器分配给这个新创建的网络,而不是“默认”。这样我们就可以轻松地修改我们想要允许的 IP 地址数量,而不会干扰网络中的其他机器。
我们将一项服务从 GCP App Engine 迁移到了云端 运行。此服务已连接到云 SQL。
其参数为:
- 每个容器的最大请求数:1
- 分钟实例:0
- 最大实例数:200
收到尖峰信号后,我们多次遇到此错误:
Cloud SQL connection failed. Please see https://cloud.google.com/sql/docs/mysql/connect-overview for additional details: googleapi: Error 429: Quota exceeded for quota metric 'Queries' and limit 'Queries per minute per user' of service 'sqladmin.googleapis.com' for consumer 'project_number:370240628xxx'., rateLimitExceeded
Cloud SQL Admin API 中的配额每个用户每分钟查询 设置为 180。所以这显然是失败的地方。
我发现由于 Cloud 运行 连接到 Cloud SQL 实例的方式,达到了配额限制。正如 this link 所说:
The native connection leverages the Cloud SQL Auth proxy which in turns makes requests to the Cloud SQL Admin API. This API - like all GCP APIs - has throttling quotas which will prevent containers from starting once reached.
同一网站上的教程建议使用 VPC 连接器而不是普通的云 SQL 连接。但是我以某种方式看到了 Google 的 docs and other Whosebug posts suggesting adding quotaUser 参数。
最佳解决方案是什么?我通常会选择 VPC,但由于这是一项付费服务,我显然会尽量避免这种情况。由于我已经为 Cloud 运行 和 Cloud SQL 付费,我希望这两者能够毫无问题地连接起来,并且不会产生额外费用。
感谢您的所有提示和帮助!
max requests per container: 1
min instances: 0
max instances: 200
哇,好奇怪的设置。
以上表示你的concureny=1。对于每个请求,您都会启动一个全新的容器。您的所有请求都启动缓慢。
您应该将 max requests per container
增加到您的容器基于其运行的进程可以跟上的阈值,例如:80 request/container 对于具有 512MB 的简单网络服务听起来不错。试验一下。
将并发数从 1 增加到 80,这意味着可以重复使用 1 个数据库连接,并且不会达到其他限制。
ps。我不知道您可以为 SQL 连接指定 quotaUser
的任何方法,这是一个 unix socket
类型的连接。
简短说明:
我们通过使用允许我们创建内部网络的 VPC 无服务器连接器(VPC 网络 -> 无服务器 VPC 访问)解决了这个问题。
“每位用户每分钟查询”配额适用于云 SQL 管理员 API。由于我们现在使用内部网络,因此我们不会达到此 API 及其限制。
步骤:
- 注册一个新的VPC无服务器连接器。可以在VPC网络->无服务器VPC访问中找到。我们选择“默认”网络,将 IP 地址范围设置为“10.8.0.0/28”,并将“e2-micro”设置为实例类型。关于区域,我们指定了“europe-west1”,因为我们的 Cloud 运行 服务位于那里。正如 Google documentation 所说,VPC 的区域必须与您的服务区域匹配才能工作。
- 您必须为您的 SQL 启用“私有 IP”。它可以在 SQL -> 连接中找到。我们选择“默认”网络并选择 Google 为我们生成地址。 Google 花了几秒钟完成这个过程。
- 然后,要设置这些设置,您必须按“保存”按钮,但是请小心,因为接下来的过程需要几分钟才能完成(我们的 7 分钟例)
- 我们去 SQL -> Overview 并复制了新生成的“私有 IP 地址”。
- 然后,我们将此地址用作我们 Cloud 运行 中的环境变量,如 SQL_HOST。之前,SQL_HOST 变量改为“连接名称”,其形式为“项目名称:欧洲西部 3:数据库名称”。所以这被替换为“私有IP”。
它起作用了,尽管我们认为 Google 应该默认这样做。云 运行 应该是一种可以扩展到高数量的服务,但您很快就会发现流量增加会导致问题。
更新:
我们最终创建了一个新的 VPC 网络,仅用于从云 运行 服务到数据库的连接。因此,我们将数据库和无服务器 VPC 连接器分配给这个新创建的网络,而不是“默认”。这样我们就可以轻松地修改我们想要允许的 IP 地址数量,而不会干扰网络中的其他机器。