У меня есть гибкое приложение App Engine, которое принимает запросы на некоторые фоновые вычисления и помещает их в очередь задач для обработки.Запросы отправляются с довольно постоянной скоростью из другого процесса.После нового развертывания запросы обрабатываются довольно быстро (мс), но затем задержка быстро увеличивается до секунд, а затем минут до полной засоренности.В Cloud Tasks я замечаю, что есть задачи, выполняющиеся, когда в очереди нет задач.Похоже, что они используют ресурсы экземпляра и застряли в течение нескольких часов, намного превышая время ожидания.Как только мои экземпляры забиты этими задачами, мой другой процесс не сможет отправлять запросы без тайм-аута, даже с очень большим тайм-аутом.Используя автоматическое масштабирование, я думал, что App Engine должен ускорить выполнение дополнительных задач для обработки входящих запросов ( source ).
Обработчики задач не очень сложны.Они просто выполняют некоторые операции с базой данных Google Spanner и выполняют чтение / запись в / из GCS (интенсивный ввод-вывод).
Конфигурация приложения:
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