Cloud Run Qs :: max-instances + параллелизм + потоки (поток Gunicorn) - PullRequest
0 голосов
/ 26 апреля 2020

(я изучаю Cloud Run и признаю, что это не связано с разработкой или кодом, но надеюсь, что какой-то инженер GCP сможет это уточнить)

У меня запущено приложение PY - gunicorn + Flask ... просто Po C на данный момент, поэтому минимальные конфигурации.

cloud run deploy имеет следующие флаги:

--max-instances 1
--concurrency 5
--memory 128Mi
--platform managed

guniccorn_cfg.py файлы имеют следующие конфигурации:

workers=1
worker_class="gthread"
threads=3

Хотелось бы знать:

1) max-instances :: если бы я настроил это, означает ли это, что новый физический сервер будет выделяться при необходимости? Или же служба достигает этого путем извлечения образа контейнера и простого запуска нового экземпляра контейнера (docker run ...) на том же физическом сервере, эффективно используя тот же физический компьютер, что и другие экземпляры контейнера?

2) concurrency :: получает ли один запущенный экземпляр контейнера несколько одновременных запросов (5 одновременных запросов, обработанных 3 запущенными экземплярами контейнера, например)? или каждый параллельный запрос запускает запуск нового экземпляра контейнера (docker run ...)

3), наконец, могу ли я эффективно достичь concurrency> 5, изменив настройки gunicorn thread? например 5x3 = 15 в этом случае .. например 15 одновременных запросов, обслуживаемых 3 работающими экземплярами контейнера, например если это правда, какие плюсы / минусы настройки thread против настройки запуска облака concurrency?

дополнительная информация: - Это приложение с интенсивным вводом-выводом (не загружает процессор). Просто захват HTTP-запроса и публикация в pubsub / sub

большое спасибо

1 Ответ

1 голос
/ 26 апреля 2020

Прежде всего, на Stackoverflow неуместно задавать «коктейльные вопросы», когда вы задаете 5 вещей одновременно. Пожалуйста, ограничьте до 1 вопроса за раз в будущем.

  1. Вы не должны беспокоиться о том, где работают контейнеры (физические машины, виртуальные машины, ...). --max-instances ограничивает «количество экземпляров контейнера», которое вы разрешаете масштабировать своему приложению. Это сделано для того, чтобы избежать огромного счета, если кто-то злонамеренно отправлял слишком много запросов в ваше приложение.

  2. Это задокументировано в https://cloud.google.com/run/docs/about-concurrency. Если вы укажете --concurrency=10, ваш контейнер может быть направлен максимум на 10 запросов в полете одновременно. Поэтому убедитесь, что ваше приложение может обрабатывать 10 запросов одновременно.

  3. Да, прочитайте документацию Gunicorn. Проверьте, позволяет ли ваша настройка «локально», чтобы gunicorn обрабатывал 5 запросов одновременно ... Параметр --concurrency Cloud Run позволяет убедиться, что вы не получите более 5 запросов к 1 экземпляру контейнера в любой момент.

Я также рекомендую вам более внимательно прочитать документы officail, прежде чем спрашивать, а также, возможно, еще один cloud-run-faq , который в значительной степени отвечает на все эти вопросы.

...