目前,我有一个Google App Engine推送任务队列,该队列旨在用于通过查询BigQuery DB生成报告。
推送任务是由cron生成的,它会将报告任务添加到队列中
这是队列配置:
- name: reporting-push-queue
target: reporting-dispatcher
rate: 1/m
bucket_size: 5
retry_parameters:
min_backoff_seconds: 60
max_backoff_seconds: 120
max_doublings: 5
task_retry_limit: 2
task_age_limit: 10m
对于小型查询,此配置能够正确运行并生成报告。在稍长的查询中,它将超时并在30秒后返回502状态代码。
基于文档,在弹性环境中的推送任务被假定为最多10分钟,但事实并非如此。
这是我在Python 3中使用的lib版本
google-cloud==0.34
google-cloud-bigquery==1.5
google-cloud-pubsub==0.37
这是使用的yaml文件。
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT reporting-dispatcher:app
threadsafe: true
runtime_config:
python_version: 3
service: reporting-dispatcher
instance_class: F1
automatic_scaling:
min_num_instances: 1
max_num_instances: 10
max_concurrent_requests: 1
liveness_check:
check_interval_sec: 60
timeout_sec: 60
failure_threshold: 10
success_threshold: 1
readiness_check:
check_interval_sec: 60
timeout_sec: 60
failure_threshold: 10
success_threshold: 1
答案 0 :(得分:0)
配置看起来不错!我遇到了类似的问题,就我而言,传入 http请求达到了32MB的限制。 如Google所述:
传入带宽
应用程序从中接收的数据量 要求。每个传入的HTTP请求都不能大于32MB。 这包括:
- 应用程序在安全请求和非安全请求中收到的数据
- 请求将收到的响应HTTP的数据上传到Blobstore
- URL提取服务[1]的请求
因此,可能是您下载的结果表对于#@ MB限制而言过大?不确定API是否应计入此范围,我猜想确实如此。
该任务到底在做什么? 如果您只有要运行的查询,为什么不启动作业并每隔几秒钟轮询一次,看其是否完成,甚至使用其他任务。 [2]似乎不需要保持连接打开。
顺便说一下,我认为这些天32MB的限制太小了。
https://googlecloudplatform.github.io/google-cloud-python/latest/bigquery/usage.html#querying-data