В документации Google App Engine указаны две следующие информации:
1- App Engine резервирует возможность автоматического масштабирования для приложений с низкой задержкой, когда приложение отвечает на запросы менее чем за одну секунду. (https://cloud.google.com/appengine/docs/standard/python3/how-requests-are-handled)
2. Задачи App Engine имеют определенные тайм-ауты, которые зависят от типа масштабирования службы, в которой они выполняются. Для рабочих служб, работающих в стандартной среде: Автоматическое масштабирование: обработка задачи должна завершиться через 10 минут. (https://cloud.google.com/tasks/docs/creating-appengine-handlers)
Для соответствия (1) я пишу API, которые откладывают любую трудоемкую обработку на задачу CloudTask, что позволяет моему API отвечать на все клиентские запросы менее чем за секунду и получать выгоду от автоматического масштабирования.
Но мне также нужно написать обработчики, которые будут выполнять трудоемкую обработку по запросу сервиса Cloudtask. Я также хочу, чтобы эти обработчики были в GAE и, в идеале, также имели для них автоматическое масштабирование.
Я не вижу формального объявления, которое позволило бы службе GAE узнать, является ли данная часть моего приложения клиентским API или обработчиком задач, вставленных в Cloudtask. Поэтому я не понимаю, как GAE справляется с двумя приведенными мною требованиями.
Я беспокоюсь, что мой обработчик задач будет препятствовать показателям производительности моего приложения и, как следствие, предотвратить автоматическое масштабирование.
Стоит ли развертывать эти обработчики в другом проекте? Но тогда как мне получить для них автоматическое масштабирование, если на выполнение задачи требуется более 1 секунды?
Согласно официальной GCP документация:
Выгруженная задача добавляется в очередь, в которой задача сохраняется до ее успешного выполнения. Очередь также может действовать как своего рода средство управления потоком отгрузки в зависимости от вашей начальной конфигурации. Вы создаете и настраиваете очередь, которая затем управляется службой Cloud Tasks. Как только задачи добавлены, очередь отправляет их и проверяет, надежно ли они обрабатываются вашими работниками. Сложности, связанные с этим процессом, такие как затраты на задержки, с которыми сталкиваются пользователи, сбои сервера, ограничения потребления ресурсов и управление повторными попытками, обрабатываются службой.
Очереди Cloud Tasks с целевыми объектами App Engine:
В случае целевых объектов App Engine служба Cloud Tasks также перенаправляет запрос задачи работнику, находящемуся в App Engine, в зависимости от того, как настроена задача (или, реже, сама очередь). Эти очереди отправляют запросы с надежной настраиваемой скоростью. Они гарантируют надежное выполнение задачи - в случае успеха все рабочие должны отправить код ответа HTTP (200-299) в службу облачных задач, в этом случае до крайнего срока, зависящего от типа масштабирования экземпляра службы: 10 минут для автоматического масштабирования или до 24 часов при ручном масштабировании. Если отправлен другой ответ или нет ответа, задача повторяется.
Поскольку обработчики являются частью App Engine, сама служба Cloud Tasks может выполнять большую часть управления процессами для задачи, увеличивая и уменьшая масштаб работников по отношению к трафику и удаляя задачи по завершении.
Как вариант, чтобы минимизировать задержку, вы можете установить разные Услуги сотрудников GAE который будет отвечать за обработку задач, а затем настроить маршрутизацию для вашей очереди задач.