2

我有一个 App Engine flex 应用程序,它接受一些后台计算的请求并将它们放入任务队列中进行处理。请求以相当恒定的速率从另一个进程发送。重新部署后,请求的处理速度非常快(毫秒),但随后延迟迅速增加到几秒钟,然后是几分钟,然后完全阻塞。我在 Cloud Tasks 中注意到队列中没有任务时正在运行的任务。这些似乎正在耗尽实例资源并停留数小时,远远超过任何超时。一旦我的实例被这些任务阻塞,我的其他进程似乎无法在没有超时的情况下发出请求,即使超时非常高。使用自动缩放,我认为 App Engine 应该启动更多任务来处理传入请求(source)。

任务处理程序并不是非常复杂。他们只是在 Google Spanner 数据库上执行一些操作,并从 GCS 读取/写入(IO 密集型)。

应用配置:

runtime: python
env: flex
service: pipeline
entrypoint: gunicorn -b :$PORT main:app --timeout 300
threadsafe: true

runtime_config:
  python_version: 3

队列配置:

app_engine_http_queue {
}
rate_limits {
  max_dispatches_per_second: 500.0
  max_burst_size: 100
  max_concurrent_dispatches: 1000
}
retry_config {
  max_attempts: 100
  min_backoff {
    nanos: 100000000
  }
  max_backoff {
    seconds: 3600
  }
  max_doublings: 16
}
state: RUNNING

孤立的任务 延迟增加

4

0 回答 0