Django performance: Apache vs Nginx
Неделю назад я сравнивал производительность и устойчивость работы nginx’а с Django с помощью mod_wsgi и fastcgi. Сравнение показало, что скорость работы при наличии быстрой локальной (читай - практически не оказывающей влияние) БД практически не отличается, отличается только количество используемых ресурсов.
А сегодня я наконец-то собрался посмотреть, что же будет, когда база данных находится на другом компе, а связь по wifi между веб-сервером и БД усугубляет проблему. :-) То есть весь смысл сегодняшних моих мучений - посмотреть на ситуацию с тормозящей базой данных (стало интересно после комментария Манлио). Заодно и хотелось посмотреть, как себя ведёт Apache.
Перед этим я таки запустил пару раз лёгкий тест (ab -n 100 -c 20) на Апач (с
локальной базой данных), который показал, что апач не хочет использовать два
моих ядра ни в какую. :-( Ни prefork, ни worker не использовали второе ядро и
запрос в среднем занимал 28 мс, что в два раза дольше, чем nginx’овый показатель
- 14 мс. Логически поразмышляв, можно понять, что тяжёлый Апач в любом случае
работает медленнее nginx’а - второе ядро в два раза не ускорит (что и говорит
показатель в 24 мс у nginx’а при работе с одним ядром :-).
Дальше PostgreSQL был запущен на другом ноуте. Апач я мерял как в prefork версии, так и в worker.
Первый вариант - ab -n 1000 -c 20:
- apache - ~37 мс. Стабильно, в пределах 5 запусков разницы не было даже в миллисекунду.
- nginx + mod_wsgi - ~50 мс. Ожидаемо.
- nginx + fastcgi prefork - ~28 мс. В мозгу не укладывается, что оно настолько быстрее Апача! :-)
Второй вариант - при ab -n 3000 -c 500 - не слишком отличается. Апач и фастцги
- такие же, мод_всги вырос до 55 мс.
В этот момент мне показалось, что mod_wsgi годится только когда нету БД (или задержками на её работу можно пренебречь). Однако, поразмыслив, я сделал ход конём - увеличил количество воркеров в нгинксе. :-) При 16 воркерах (проверено позже - 8 достаточно) и 500 одновременных запросов один отклик приходит в среднем раз в 28 мс. Теперь и результат фастцги укладывается, и апач выглядит толстым и тяжёлым, как обычно. ;-) Правда, каждый процесс nginx’а, работающий с джангой, кушает порядка 15 мегабайт. Хотя это в любом случае меньше, чем апач и fastcgi.
Выводы каждый может сделать сам для себя, но nginx + mod_wsgi однозначно - очень интересная комбинация.

Comments: 2 Subscribe (already: 0) Comment post
mod_wsgi для nginx уже стабилен? Есть ли у него возможность работать с внешними процессами (наподобие схемы с fastcgi)? Как я понял, у тебя он работал “внутри”. Nginx все-таки, думаю, не очень подходит для таких выкрутасов - количество воркеров динамически не изменяется по потребностям. Или у mod_wsgi для этого что-то свое есть?
Ещё нет.
Ещё нет, но мы с автором говорили, он сказал, что у него есть мысли как это сделать и он собирается заняться в ближайшем будущем.
Угу. :-)
Будет, аналогично WSGIDaemonProcess у апачевского mod_wsgi.
Comment form for «Django performance: Apache vs Nginx»