Каковы ограничения встроенного веб-сервера flask
Я новичок в администрировании веб-сервера. Я много раз читал, что встроенный веб-сервер flask не предназначен для" производства " и должен использоваться только для тестов и отладки...
но что, если мое приложение затрагивает только тысячи пользователей, которые occasionnaly отправить данные на сервер ?
Если он работает, когда мне придется беспокоиться о конфигурации более сложного веб-сервера ? (Я ищу аппроксимативные метрики).
в двух словах, я бы любите находить, что может сделать встроенный веб-сервер (с приблизительными порогами) и что он не может.
Спасибо большое !
2 ответов
на этот вопрос нет одного правильного ответа, но вот некоторые вещи, которые нужно иметь в виду:
С правильным количеством горизонтального масштабирования вполне возможно, что вы могли бы сохранить масштабирование использования сервера отладки навсегда. Когда именно вам нужно будет начать масштабирование (или переключиться на использование "реального" веб-сервера), также будет зависеть от среды, в которой вы размещаете, ожиданий пользователей и т. д.
основная проблема, с которой вы, вероятно, столкнетесь, заключается в том, что сервер однопоточный. Это означает, что он будет обрабатывать каждый запрос по одному, поочередно. Это означает, что если вы пытаетесь обслуживать более одного запроса (включая фавиконы, статические элементы, такие как изображения, CSS и Javascript-файлы и т. д.) запросы будут занимать больше времени. Если какие-либо запросы занимают много времени (скажем, 20 секунд), то все ваше приложение не отвечает на это время (20 секунд). Это, конечно, только по умолчанию: вы можете увеличить количество потоков (или иметь запросы обрабатываются в других процессах), что может облегчить некоторые проблемы. Но опять же, он все еще может быть медленным под "высокой" нагрузкой. То, что считается "высокой" нагрузкой, будет зависеть от вашего приложения и ожиданий максимально приемлемого времени отклика.
еще одна проблема-безопасность: если вы вообще обеспокоены безопасностью (и не только безопасностью данных в самом приложении, но и безопасностью коробки, которая будет его запускать), то вы не должны использовать сервер разработки. Он не готов противостоять любой атаке.
и, наконец, сервер может просто не сразу. Он не предназначен для использования в качестве длительного процесса (дни, недели, месяцы), и поэтому он не был хорошо протестирован для работы в этом качестве.
Итак, да, у него есть ограничения. Да, вы все еще можете использовать его в производстве. И да, я бы все равно рекомендовал использовать "настоящий" веб-сервер. Если вам не нравится идея необходимости установите что-то вроде Apache или Nginx, вы все равно можете пойти с решением, которое по-прежнему так же просто, как "запустить скрипт python", используя некоторые из автономные серверы WSGI, который может запускать сервер, который предназначен для работы с чем-то таким же простым, как запуск python run_app.py
в командной строке. Обычно вам просто нужно создать 4-5-строчный скрипт python для импорта и создания объекта сервера, укажите его на свою колбу app
, и запустить его.
gunicorn можно запустить с помощью только следующего в командной строке, не требуется дополнительный скрипт:
gunicorn myproject:app
...где "myproject" - это пакет Python, содержащий app
объект флягу.
OP давно перешел, но для тех, кто сталкивается с этим вопросом в будущем, я бы просто добавил, что настройка сервера Apache, даже на ноутбуке, бесплатна и довольно проста. Его можно легко настроить для нескольких или многих функций, как вы хотите просто раскомментировать или комментировать строки в файле конфигурации. Для этого может быть еще более простой метод GUI, но просто редактирование конфигураций просто.