我有一个 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