我有一个App Engine flex应用,该应用接受一些后台计算的请求,并将其放在任务队列中进行处理。从另一个进程以相当恒定的速率发送请求。全新部署后,请求的处理速度非常快(ms),但是随后延迟迅速增加到几秒钟,然后增加到几分钟,然后完全阻塞。我在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