Как я могу обработать несколько запросов Python на моем экземпляре AWS EC2? - PullRequest
0 голосов
/ 03 сентября 2018

У меня установлено приложение Flask на Elastic Beanstalk в экземпляре EC2 на AWS. Если к моему серверу одновременно подключено 100 человек, не означает ли это, что им придется ждать в очереди из 100 человек, поскольку приложение может обрабатывать только один экземпляр за раз?

Как я могу сделать так, чтобы я мог обрабатывать больше запросов, используя тот же IP-адрес для подключения? Спасибо!

1 Ответ

0 голосов
/ 04 сентября 2018

Короткий ответ - использовать uWSGI или gunicorn.

Более длинный ответ: ваша интуиция верна - вас беспокоит «параллелизм» или количество одновременных запросов, которые может обработать ваше приложение. И да, одно приложение Flask без какого-либо сервера приложений может обрабатывать один запрос за раз. Как вы это измените? Для большинства приложений Python единица параллелизма - это процесс (существуют платформы, которые меняют это, но большинство развертываний приложений, вероятно, основаны на процессах). То есть вы запускаете процесс для каждого параллельного запроса, который, по вашему мнению, вам понадобится. Серверы приложений, такие как uWSGI, прослушивают ваше приложение, а затем отправляют запрос процессу из пула. Итак, сколько процессов вам нужно?

Вторая концепция, которая вам нужна, - это «пропускная способность» - сколько запросов может быть обслужено за определенное время, которое зависит от «параллелизма» и отличается от него, когда ваша интуиция может ввести вас в заблуждение. Допустим, у вас есть 8 процессов. Вы можете подумать, «но у меня будет 100 пользователей, 8 явно недостаточно». Предположим, вы знаете, что каждый запрос выполняется за 1/8 (.125) секунд. Это означает, что каждый процесс может обслуживать 8 запросов в секунду. Раз 8 процессов; Ваша пропускная способность будет (примерно) 64 запросов в секунду. Процесс 8 делает вас намного ближе к вашим 100 пользователям, чем вы могли ожидать в противном случае. Ваши 100 пользователей, вероятно, фактически не будут выдавать запросы в этом 1-секундном окне. Возможно, но вряд ли. Проблема не в параллелизме, а в том, получит ли пользователь ответ в разумные сроки.

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

См. Сколько одновременных запросов получает один процесс Flask?

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