Google App Engine在Flex环境中推送任务超时

时间:2018-09-12 23:10:42

标签: python google-app-engine

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

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