Rails: Apache 2.2.3 vs Nginx 0.5.30
Разглеждайки форуми и блогове, посветени на оптимизирането на производителността на решенията за хостинг на Rails попаднах на непознат продукт – Nginx. Оказа се, че според много benchmark-ове, Nginx е решението, осигуряващо върхова производителност между mongrel_cluster и Интернет. От друга страна, Apache се хвалят с пренаписания си mod_proxy, който в комбинация с версия 2.2 на сървъра дава много по-добра производителност.
Реших да тествам и двата варианта като proxy-та пред mongrel cluster-а, seeing is believing ‘дето викат хората. За целта използвах собствената си Debian-базирана машина. Вярно, цифрите в Benchmark-a не са за завиждане, но и хардуера не е първа младост.
За конфигуриране на Mongrel cluster, вижте страхотната статия на Coda Hale. За коректна Debian-базирана инсталация на Rails – вижте първата част от тази статия
Макар че в Debian има пакет за Nginx, в този за версия 0.5.26 има проблем – процесът по деинсталиране спира с досадна грешка, налагайки ви да редактирате init script-a за да можете да изчистите пакета в случай че не Ви е необходим повече. Поради тази причина изтеглих source на Nginx (версия 5.0.30 към момента на написване на статията) и компилирах собствен .deb пакет, ползвайки конфигурационните опции на официалния maintainer.
Download nginx_0.5.30-1_i386.deb (232 KB)
За да инсталирате пакета, първо спрете процеса на Apache, ако имате пуснат такъв:
/etc/init.d/apache2 stop
След това изпълнете следното:
dpkg -i nginx_0.5.30-1_i386.deb
В слуай, че искате да премахнете Nginx, след като вече е инсталиран:
dpkg --purge nginx
От конфигурационните файлове, които използвах за benchmark-a, съм направил полуготови темплейти. Заместете навсякъде във файловете projectname с името на вашия сървър, а yourproject с името на проекта. И двете решения разчитат, че приложението Ви е разположено (изпълнен е cap deploy) в директория /var/www/apps/:
Apache virtual host config template (rails_project_apache.conf – 2.1 KB)
Nginx virtual host config template (rails_project_nginx.conf – 0.9 KB)
Nginx daemon config example (nginx.conf – 0.5 KB)
За да конфигурирате виртуалните хостове следвайте стандартната процедура – копирайте файловете rails_project_apache и rails_project_nginx съответно в /etc/apache2/sites-available и /etc/nginx/sites-available. Сменетe имената им с нещо, което има значение за Вас, редактирайте ги, така че да отразят местоположението на проекта и добавете символни връзки към тях в съответните sites-enabled директории.
Понеже машинката ми е слаба, използвах симулация на 100 паралелни заявки, повтарящи се само 1000 пъти. Командата с която стартирах bechmark-а е следната:
ab -c 100 -n 1000 http://projectname/


Повече детайли можете да намерите в следните файлове (в конфигурацията на Apache съм забранил показването на server credentials, което е и причината да виждате Mongrel като име на сървъра):
Apache benchmark results (apache2.txt – 1.3 KB)
Nginx benchmark results (nginx.txt – 1.3 KB)
Изглежда на еднопроцесорна машина Apache 2.2 има леко предимство, и разработчиците с право могат да се гордеят с резултатите. От друга страна nginx изглежда интересен, но имам чувството, че с добавянето на повече функционалност сървърът няма да остане толкова лек и бърз.
Все пак няма да е зле да има вариант за benchmark върху дву- или четирипроцесорна машина за да проверя скалируемостта на двете решения – Apache има навика да fork-ва процеси и да пълни сериозно паметта, докато nginx е доста по-непретенциозен. Ако някой има по-яка машинка под ръка и му се занимава с ръчкане ще съм доволен да сподели своите резултати…
Update: Debian testing вече съдържа пакет с версия 0.5.30 на nginx, който обаче страда от същият проблем като по-старата версия – prerm скрипта извиква два пъти спиране на демона на nginx, проваляйки по този начин премахването му. Поради тази причина можете да използвате или по-горната версия, с която са направени тестовете, или пакета с по-актуална версия от тук:
Download nginx_0.5.31-1_i386.deb (232 KB)
Маркери: debian, linux, rails, tips, unix
За тази статия
В момента четете "Rails: Apache 2.2.3 vs Nginx 0.5.30", статия в stinger's thoughts
Отпечатване на статията
- Публикувана на:
- 06.08.2007 в 14:56
- Категория:
- Linux/UNIX
- Изпращане:
- Изпрати чрез email
Категории
- Books (10)
- Linux/UNIX (66)
- Movies (32)
- Music (70)
- Web Development (57)
- Други (180)






















IE8 Webslice
RSS с публикации
3 коментара
RSS с коментaрите