Бутылочный WSGI сервер против Apache
У меня нет никаких проблем, просто немного любопытно. Я делаю веб-фреймворк Python на основе бутылки ( http://bottlepy.org/). Сегодня я попытаюсь сделать небольшое сравнение, чтобы сравнить производительность бутылочного WSGI-сервера и apache-сервера. Я работаю над lubuntu 12.04, использую apache 2, python 2.7, версию разработки бутылок (0.12) и получаю удивительный результат:
Как указано в документации к бутылке, прилагаемый WSGI-сервер предназначен только для разработки. Вопрос в том, почему сервер разработки быстрее, чем сервер развертывания (apache)?
Насколько я знаю, сервер разработки, как правило, работает медленнее, поскольку предоставляет некоторые функции "отладки".
Кроме того, я никогда не получал никакого ответа менее чем за 100 мс при разработке PHP-приложения. Но посмотрите, это всего 13 мс в бутылке.
Кто-нибудь может объяснить это? Это просто не имеет смысла для меня. Сервер развертывания должен быть быстрее, чем сервер разработки.
2 ответа
Сервер развертывания должен быть быстрее, чем сервер разработки.
Правда. И обычно это быстрее... в "типичной" среде веб-сервера. Чтобы проверить это, попробуйте подключить 20 одновременно работающих клиентов, и они будут непрерывно запрашивать каждую версию вашего сервера. Видите ли, вы тестировали только 1 запрос за раз - конечно, это не типичная веб-среда. Я подозреваю, что вы увидите разные результаты (мы думаем как о задержке, так и о пропускной способности) с десятками или сотнями одновременных запросов в секунду.
Другими словами: при 10, 20, 100 запросах в секунду вы все равно можете увидеть задержку ~200 мс от Apache, но вы увидите гораздо худшую задержку от сервера Bottle.
Между прочим, документы по бутылкам относятся к параллелизму:
Встроенный сервер по умолчанию основан на wsgiref WSGIServer. Этот не многопоточный HTTP-сервер идеально подходит для разработки и раннего производства, но может стать узким местом для производительности при увеличении нагрузки на сервер.
Также стоит отметить, что Apache делает намного больше, чем справочный сервер Bottle (проверка файлов.htaccess, отправка в дочерний процесс / поток, надежное ведение журнала и т. Д.), И все эти функции обязательно увеличивают задержку запроса.
Наконец, я бы спросил, настроили ли вы установку Apache. Возможно, вы можете настроить его так, чтобы он работал быстрее, чем сейчас, например, настраивая MPM, упрощая ведение журнала, отключая проверки.htaccess.
Надеюсь это поможет. И если вы проводите параллельный тест, пожалуйста, поделитесь результатами с нами.
Серверы разработки не обязательно быстрее, чем серверы промышленного уровня, поэтому такой ответ немного вводит в заблуждение.
Реальная причина в этом случае, вероятно, будет в ленивой загрузке вашего веб-приложения при первом обращении к процессу. Особенно, если вы не настроите Apache правильно, вы можете довольно долго загружаться, если ваш сайт не получает много трафика.
Я бы посоветовал вам посмотреть мой доклад на PyCon, посвященный некоторым из этих проблем.
Особенно убедитесь, что вы не используете prefork MPM. Используйте режим демона mod_wsgi в настройках.