Что происходит с запросом App Engine, если автоматическое масштабирование не может создать новый экземпляр? - PullRequest
2 голосов
/ 02 мая 2020

Из-за лимита экземпляра. Таким образом, есть запрос, он достаточно долго находится в очереди, но автомасштабирование App Engine не может запустить новый экземпляр.

Что происходит с этим запросом? Он хранится в очереди бесконечно или через некоторое время прерывается?

1 Ответ

2 голосов
/ 04 мая 2020

Возвращает пользователю сообщение « Превышена скорость. » и следующая ошибка в журналах: « Запрос был прерван после слишком долгого ожидания попытки обработать ваш запрос. »

Вот как я это проверил:

Я создал класс для подсчета истекшего времени, чтобы убедиться, что я действительно выполняю несколько параллельных запросов. И базовое c Python приложение, которое имеет функцию сна в течение 20 секунд. Затем в app.yaml я установил max-instance на 1, а max-одновременных запросов на 1. Затем, просто открыв 5 вкладок с URL-адресом приложения и запустив их одновременно, по крайней мере, одна из них потерпит неудачу с ошибками упоминалось выше.

Проверено на стандарте GAE

timer.py :

import time
class TimerError(Exception):
    """A custom exception used to report errors in use of Timer class"""
class Timer:
    def __init__(self):
        self._start_time = None
    def start(self):
        """Start a new timer"""
        if self._start_time is not None:
            raise TimerError(f"Timer is running. Use .stop() to stop it")
        self._start_time = time.perf_counter()
    def stop(self):
        """Stop the timer, and report the elapsed time"""
        if self._start_time is None:
            raise TimerError(f"Timer is not running. Use .start() to start it")
        elapsed_time = time.perf_counter() - self._start_time
        self._start_time = None
        print(f"Elapsed time: {elapsed_time:0.4f} seconds")

main.py :

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    import time
    from timer import Timer
    t = Timer()
    t.start()
    print('Started')
    time.sleep(20)
    t.stop()
    return 'Hello World!'

if __name__ == '__main__':

needs.txt :

Flask==1.1.2
codetiming

app.yaml :

service: scaling
runtime: python37
instance_class: F1
automatic_scaling:
  target_cpu_utilization: 0.65
  min_instances: 1
  max_instances: 1
  min_pending_latency: 30ms  # default value
  max_pending_latency: automatic
  max_concurrent_requests: 1

Развернуть:

gcloud app deploy

Затем: одновременно открыть 5 вкладок со ссылкой на развернутое приложение.

Результаты: Пользователь получает: " Превышена скорость. «GAE logs show: ERROR» Запрос был прерван после слишком долгого ожидания попытки обработать ваш запрос."

...