Тайм-аут задачи Google App Engine в гибкой среде - PullRequest
0 голосов
/ 13 сентября 2018

В настоящее время у меня есть очередь push-задач Google App Engine, которая предназначена для создания отчетов по запросам в BigQuery DB.

Задачи push генерируются 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

Для небольших запросов эта конфигурация может правильно запускать и генерировать отчет. При чуть более длинных запросах время ожидания и код состояния 502 возвращаются через 30 секунд.

Предполагается, что на основе push-заданий в гибких средах может потребоваться до 10 минут, но это не так.

Вот версии lib, которые я использую с Python 3

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 голосов
/ 13 сентября 2018

Конфигурация выглядит хорошо! У меня были похожие проблемы, и в моем случае я установил ограничение в 32 МБ для входящих http-запросов. Как утверждает Google:

Входящая пропускная способность

Количество данных, полученных приложением от Запросы. Каждый входящий HTTP-запрос не может превышать 32 МБ. Это включает в себя:

  • Данные, полученные приложением в безопасных и незащищенных запросах
  • запрашивает загрузку в Blobstore данных, полученных в ответ на HTTP
  • запросов службы извлечения URL [1]

Возможно, вы загружаете результирующую таблицу, которая слишком велика для ограничения # @ МБ? Не уверен, что API рассчитывает на это, я думаю, это так.

Что именно делает задание? Если вам просто нужно выполнить запрос, почему бы не запустить задание и опрашивать его каждые несколько секунд, чтобы узнать, выполнено ли оно, или даже использовать другое задание. [2] Кажется, нет необходимости держать соединение открытым.

Между прочим, ограничение 32 МБ, на мой взгляд, до смешного мало.

https://googlecloudplatform.github.io/google-cloud-python/latest/bigquery/usage.html#querying-data

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...