【问题标题】:Google Cloud Run not scaling up despite large backlog and available instances尽管有大量积压和可用实例,Google Cloud Run 仍无法扩展
【发布时间】:2021-12-07 17:38:57
【问题描述】:

我看到类似于this post 的内容。看起来需要额外的细节来回答这个问题,所以我重新询问我的细节,因为这些细节没有提供。

我正在运行 Google Cloud Run image processing tutorial example 的修改版本。

我正在使用this create tasks snippet 将任务插入任务队列。队列中的任务被推送到我的云运行实例。

问题是它没有及时扩大规模并完成我的任务。

我的云运行服务配置:

  • 我已尝试设置至少 0 和 50 个实例
  • 我尝试了最多 100 和 1000 个实例
  • 我试过--concurrency=1和2,还有8
  • 我尝试过使用--async 和不使用--async

即使使用concurrency set to 1,也预分配了50 instances,我通常会看到~10 active container instances~40 idle container instances。我在队列中有~30,000 tasks,它正在通过~5 jobs/minute

我的任务队列具有默认设置。我的容器没有使用很多 cpu,但它们使用了很多内存。

一个过程大约需要一分钟才能完成。我只为每个容器实例运行一个进程。应该设置哪些额外的参数来获得更高的吞吐量?


编辑 - 添加额外的日志

我为队列启用了日志,但我发现某些作业出现了一些错误。错误如下所示:

{
insertId: "<my_id>"
jsonPayload: {
@type: "type.googleapis.com/google.cloud.tasks.logging.v1.TaskActivityLog"
attemptResponseLog: {
attemptDuration: "19.453155s"
dispatchCount: "1"
maxAttempts: 0
responseCount: "0"
retryTime: "2021-10-20T22:45:51.559121Z"
scheduleTime: "2021-10-20T16:42:20.848145Z"
status: "UNAVAILABLE"
targetAddress: "POST <my_url>"
targetType: "HTTP"
}
task: "<my_task>"
}
logName: "<my_log_name>"
receiveTimestamp: "2021-10-20T22:45:52.418715942Z"
resource: {
labels: {
location: "us-central1"
project_id: "<my_project>"
queue_id: "<my-queue>"
target_type: "HTTP"
}
type: "cloud_tasks_queue"
}
severity: "ERROR"
timestamp: "2021-10-20T22:45:51.459232147Z"
}

我在云运行日志中看不到错误。


编辑 - 附加调试信息

我试图将队列排除在外,以确定它是云运行还是队列。相反,我直接使用curl 发布到网址。一些任务成功运行,其他任务我收到错误。在下面的日志中空行是成功的:

upstream connect error or disconnect/reset before headers. reset reason: connection termination


upstream connect error or disconnect/reset before headers. reset reason: connection termination
upstream connect error or disconnect/reset before headers. reset reason: connection termination
upstream connect error or disconnect/reset before headers. reset reason: connection termination

upstream connect error or disconnect/reset before headers. reset reason: connection termination

这让我觉得 cloud run 没有处理所有传入的请求。


编辑 - 任务完成时间测试

我想测试完成任务所花费的时间是否会导致 CloudRun 以及队列扩展和跟上任务的任何问题。

代替我真正想要完成的任务,我放置了一个仅休眠 n 秒的虚拟任务,并将任务详细信息打印到标准输出(我可以在云运行日志中读取)。

将 n 设置为 0, 5, 10 seconds 我看到实例的数量增加了,它跟上了添加到队列中的任务。将 n 设置为 20 seconds 或更多时,我看到实例化的 CloudRun 实例更少,并且项目在任务队列中累积。我在日志中看到更多与 Unavailable 状态有关的错误。

根据this post

Cloud Run offers a longer request timeout duration of up to 60 minutes

因此,似乎需要长时间运行的任务。这是谷歌的错误还是我错过了设置一些参数?

【问题讨论】:

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


    【解决方案1】:
    1. 我认为这不是 Cloud Run 服务问题。我认为这是您如何设置任务的问题。

    2. 日志条目中的日期看起来很奇怪。查看 receiveTimestampscheduleTime。任务安排在接收时间前六个小时。您有时区问题吗?

    3. 根据文档,如果 response_time 未设置,则未尝试该任务。您似乎错误地安排了任务并且这些任务从未运行。

    在此链接中搜索文本任务尝试的状态。

    Types for Google Cloud Tasks

    【讨论】:

    • 我正在使用的任务创建代码有一个in_seconds 参数,默认为180,我将其设置为None,仍然可以看到您提到的时差和问题。这是我在任务结束时使用的唯一时间组件。我的 Cloud Run 映像是否可能需要正确设置时间,或者它可能是 Google Cloud 基础架构中的某个东西?
    • 另外,我在两个实例中的任务都运行了几个小时,在打开日志之前,这可能会导致几个小时的时差。
    • 我不知道你的时间问题的根源,只是那里可能有问题。任务未根据日志消息运行。
    • 仍然看到unavailable。以下是向队列发送新任务后几分钟内的时间戳,让我觉得这不是时差:attemptDuration: "5.018117s"retryTime: "2021-10-25T16:23:16.719135Z"scheduleTime: "2021-10-25T16:19:00.328353Z"receiveTimestamp: "2021-10-25T16:23:18.207261176Z"timestamp: "2021-10-25T16:23:16.619301336Z"
    猜你喜欢
    • 2022-01-09
    • 1970-01-01
    • 2020-10-27
    • 2021-05-26
    • 2021-11-13
    • 1970-01-01
    • 2019-10-15
    • 2020-02-17
    • 2022-08-18
    相关资源
    最近更新 更多