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)


Маркери: , , , ,

За тази статия



Категории

Подобни статии