<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/stylesheets/rss.css" type="text/css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Jaros&#322;aw Zabie&#322;&#322;o - BLOG: Railsy: Lighttpd czy Apache 2.2.x?</title>
    <link>http://blog.zabiello.com/articles/2006/10/29/railsy-lighttpd-czy-apache-2-2-x</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>moje notatki, linki, komentarze</description>
    <item>
      <title>Railsy: Lighttpd czy Apache 2.2.x?</title>
      <description>&lt;p&gt;Odno&#347;nie u&#380;ycia Rails&#243;w w celu produkcyjnym, du&#380;o si&#281; zmieni&#322;o od czasu pojawienia si&#281; &lt;a href="http://mongrel.rubyforge.org/"&gt;Mongrela&lt;/a&gt; &amp;#8211; ma&#322;ego, ale dosy&#263; szybkiego serwera napisanego w Ruby i C.  Nast&#281;puje generalne odej&#347;cie od podpinania kilku proces&#243;w FastCGI do Rubiego z r&#243;&#380;nych powod&#243;w.  W drugim wydaniu &lt;a href="http://www.pragmaticprogrammer.com/titles/rails/index.html"&gt;Agile Web Development in Rails&lt;/a&gt; autorzy przyznali, &#380;e pr&#243;bowali r&#243;&#380;nych opcji u&#380;ycia modu&#322;u FastCGI. Zawsze ostatecznie by&#322;y jakie&#347; problemy.&lt;/p&gt;


	&lt;p&gt;Aktualnie zalecanym podej&#347;ciem jest u&#380;ycie szybkiego serwera &lt;span class="caps"&gt;HTTP&lt;/span&gt; (&lt;a href="http://mongrel.rubyforge.org/docs/lighttpd.html"&gt;Lighttpd&lt;/a&gt;, &lt;a href="http://mongrel.rubyforge.org/docs/apache.html"&gt;Apache&lt;/a&gt; lub &lt;a href="http://mongrel.rubyforge.org/docs/litespeed.html"&gt;LiteSpeed&lt;/a&gt;) na froncie do obs&#322;ugi statycznych plik&#243;w (g&#322;&#243;wnie obrazki, style kaskadowe i pliki Javascript).  Aplikacj&#281; RoR  nale&#380;y uruchomi&#263; za pomoc&#261; kilku proces&#243;w Mongrela (nie jak wcze&#347;niej: kilka proces&#243;w FastCGI). A tym, co zepnie je z serwerem &lt;span class="caps"&gt;HTTP&lt;/span&gt; jest modu&#322; rozk&#322;adaj&#261;cy ruch (load balancing).&lt;/p&gt;


	&lt;p&gt;Niestety, okaza&#322;o si&#281; &#380;e w wypadku Lighttpd ten modu&#322; zawiera b&#322;&#281;dy. Z kolei nowy Apache 2.2 posiada dobrze dzia&#322;aj&#261;cy modu&#322; load balancingu. Spowodowa&#322;o to zrezygnowanie przez wielu z Lighttpd na rzecz nowego Apache 2.2.x.&lt;/p&gt;


	&lt;p&gt;Z racji tego, &#380;e mam troch&#281; swobody w doborze technologii w pracy, postawi&#322;em serwer na nowym Apache&amp;#8217;u. Aplikacje Rails&#243;w podpinamy za pomoc&#261; mongrela i wbudowanego w Apache modu&#322;u load_balancer. Dzia&#322;a faktycznie sprawnie.&lt;/p&gt;


	&lt;p&gt;Czy to znaczy, &#380;e Lighttpd nie ma sensu u&#380;ywa&#263;? Sk&#261;d! W wersji 1.5 maj&#261; ju&#380; mie&#263; naprawiony modu&#322; load balancingu. Ale nawet i bez tego, istnieje bardzo dobry, ma&#322;y i szybki load balancer &amp;#8211; &lt;a href="http://mongrel.rubyforge.org/docs/pound.html"&gt;Pound&lt;/a&gt;. Skuszony jednak potrzeb&#261; eksperymentowania oraz nabytym niedawno &lt;a href="http://hetzner.de/rootserver_en.html"&gt;serwerem dedykowanym&lt;/a&gt; (w miejsce wcze&#347;niejszego &lt;a href="http://tektonic.net/unmanaged.html"&gt;&lt;span class="caps"&gt;VPS&lt;/span&gt;&amp;#8217;a&lt;/a&gt;) postanowi&#322;em przenie&#347;&#263; wszystkie swoje prywatne serwisy (a jest tego sporo) z Lighttpd do Apache 2.2.3. Musia&#322;em przenie&#347;&#263; dwie aplikacje Rails, dwie aplikacje Django, dwie aplikacje &lt;span class="caps"&gt;PHP 5&lt;/span&gt;.1 oraz jedn&#261; du&#380;a aplikacj&#281; Zope/Plone. I jak wra&#380;enia?&lt;/p&gt;


	&lt;p&gt;Ot&#243;&#380;, po 2 tygodniach u&#380;ywania, stwierdzi&#322;em, &#380;e to nie ma sensu. Apache po&#380;era za du&#380;o pami&#281;ci. Dzieje si&#281; dok&#322;adnie tak, jak &lt;a href="http://blog.zabiello.com/articles/2006/04/24/lightpd-fastcgi-vs-apache-mod_php-mod_python"&gt;pisa&#322;em wcze&#347;niej&lt;/a&gt;. Nie mog&#322;em u&#380;y&#263; trybu wielow&#261;tkowego, nie tyle ze wzgl&#281;du na &lt;span class="caps"&gt;PHP&lt;/span&gt; ale ze wzgl&#281;dy na Django! Napisali bowiem, &#380;e nie nale&#380;y tego trybu u&#380;ywa&#263; w wypadku ich frameworka. Django nie jest wielow&#261;tkowy. Musia&#322;em wi&#281;c prze&#322;&#261;czy&#263; Apache z trybu worker na prefork. Zgodnie z obawami, ka&#380;dy fork musia&#322; marnowa&#263; pami&#281;&#263; na modu&#322; mod_php i mod_python nawet jak to nie ma sensu (np. podczas obs&#322;ugi obrazk&#243;w). Na dodatek nie mog&#322;em co&#347; uruchomi&#263; jednej aplikacji Django. Kompletnie nie wiem dlaczego. Druga by&#322;a prawie identycznie skonfigurowana i dzia&#322;a&#322;a.&lt;/p&gt;


	&lt;p&gt;Wr&#243;ci&#322;em zatem z powrotem do Lighttpd , Pounda i Mongrela (dla RoR) i FastCGI (dla Django i &lt;span class="caps"&gt;PHP&lt;/span&gt;). Efekty by&#322;y bardzo widoczne: zwolni&#322;o mi si&#281; ponad 200 MB pami&#281;ci. Mo&#380;e to nie ma znaczenia w pracy, gdzie mamy 2GB ale ja mam tylko 1GB i musz&#281; jeszcze uruchomi&#263; zasobo&#380;erny Plone.&lt;/p&gt;


	&lt;p&gt;Dok&#322;adniej wszystkie sprawdzone i dzia&#322;aj&#261;ce konfiguracje opisz&#281; w powstaj&#261;cej ksi&#261;&#380;ce o Railach. Moja ostateczna konlkluzja jest taka: je&#347;li zale&#380;y ci na oszcz&#281;dzeniu pami&#281;ci &amp;#8211; wybieraj Lighttpd. Je&#347;li nie jest to kluczowa sprawa, a potrzebujesz jakie&#347; specjalne, dodatkowe modu&#322;y (kt&#243;rych Apache ma pe&#322;no) nowy Apache 2.2 spe&#322;ni twe oczekiwania.&lt;/p&gt;</description>
      <pubDate>Sun, 29 Oct 2006 15:53:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:ae8c5663-3e1f-48fd-b086-a090a1cee206</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2006/10/29/railsy-lighttpd-czy-apache-2-2-x</link>
      <category>Ruby on Rails</category>
      <category>apache</category>
      <category>lighttpd</category>
      <category>rails</category>
      <category>mod_python</category>
      <category>fastcgi</category>
    </item>
    <item>
      <title>"Railsy: Lighttpd czy Apache 2.2.x?" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;W&#322;a&#347;nie pr&#243;buj&#281; zmieni&#263; Lighty na Nginx&amp;#8217;a. Problem w tym, &#380;e mam nie tylko RoR ale tak&#380;e PHP, Django i Zope i to wszystko musi dobrze dzia&#322;a&#263;. Nie tylko dlatego, &#380;e Nginx jest szybszy. Co&#347; mi ostatnio Lighty dziwnie si&#281; zachowuje. Musz&#281; go restartowa&#263;, bo po jakim&#347; czasie ma problemy z odpowiedzi&#261;.&lt;/p&gt;</description>
      <pubDate>Sat, 04 Nov 2006 19:21:19 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:02ad2c8a-0486-4d92-ab80-4ccc5e500b9b</guid>
      <link>http://blog.zabiello.com/articles/2006/10/29/railsy-lighttpd-czy-apache-2-2-x#comment-271</link>
    </item>
    <item>
      <title>"Railsy: Lighttpd czy Apache 2.2.x?" by hosiawak</title>
      <description>&lt;p&gt;Nginx staje si&#281; ostatnio bardzo popularny na zachodzie, g&#322;&#243;wnie za spraw&#261; bardzo ma&#322;ej zasobo&#380;erno&#347;ci i du&#380;ej liczby dost&#281;pnych modu&#322;&#243;w. Pono&#263; jest ju&#380; w u&#380;yciu dosy&#263; d&#322;ugi czas w Rosji sk&#261;d pochodzi na jakim&#347; bardzo ruchliwym serwerze &amp;#8211; uwa&#380;any jest za bardzo stabilny. &lt;a href="http://wiki.codemongers.com/NginxNews#stats" rel="nofollow"&gt;Statystyki&lt;/a&gt; m&#243;wi&#261;, &#380;e obs&#322;uguje ju&#380; ponad 90,000 domen &amp;#8211; wystarczaj&#261;co du&#380;o, &#380;eby uzna&#263; go za stabilny. Poza tym ostatnio ulubiony serwer &lt;a href="http://brainspl.at" rel="nofollow"&gt;Ezry&lt;/a&gt; ;)&lt;/p&gt;


	&lt;p&gt;Co do tej ma&#322;ej zasobo&#380;erno&#347;ci to prawda. Zrobi&#322;em prosty test na statycznej stronie, 100,000 request&#243;w i load nawet nie osi&#261;gn&#261;&#322; 100% tylko oscylowa&#322; na poziomie 70-80%. Wygl&#261;da bardzo zach&#281;caj&#261;co, &#347;wietnie nadaje si&#281; jako load balancer dla clustera mongrel&#243;w i do serwowania statycznych plik&#243;w.&lt;/p&gt;</description>
      <pubDate>Sat, 04 Nov 2006 19:17:24 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:cdd8b2bd-708a-44f3-93e3-2f84de980d36</guid>
      <link>http://blog.zabiello.com/articles/2006/10/29/railsy-lighttpd-czy-apache-2-2-x#comment-270</link>
    </item>
    <item>
      <title>"Railsy: Lighttpd czy Apache 2.2.x?" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;Jak znajd&#281; czas, przyjrz&#281; mu si&#281; dok&#322;adnie. Przed chwila na swoim dedyku (Athlon64 3000+ i Ubuntu x64) odpali&#322;em por&#243;wnania. U&#380;y&#322;em skompilowanych ze &#378;r&#243;de&#322; Apache 2.2.3, Lighttpd 1.4 i Nginx 0.4.12.&lt;/p&gt;


	&lt;p&gt;Dla&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;ab -n 100000 http://localhost/ &lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;i prostej strony ze zdaniem &amp;#8220;Hello World!&amp;#8221;, wyniki mam nast&#281;puj&#261;ce:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;Apache: 4439 req/s
Lighttpd: 7150 req/s
Ngix: 8700 req/s. &lt;/code&gt;&lt;/pre&gt;</description>
      <pubDate>Wed, 01 Nov 2006 18:06:24 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:218896e9-c0e6-4a88-8a44-5ac040caafc6</guid>
      <link>http://blog.zabiello.com/articles/2006/10/29/railsy-lighttpd-czy-apache-2-2-x#comment-269</link>
    </item>
    <item>
      <title>"Railsy: Lighttpd czy Apache 2.2.x?" by lopex</title>
      <description>&lt;p&gt;pop prostu:
rewrite  ^/(.*)$  &lt;a href="http://host:9876/VirtualHostBase/http/host:80/plone/VirtualHostRoot/" rel="nofollow"&gt;http://host:9876/VirtualHostBase/http/host:80/plone/VirtualHostRoot/&lt;/a&gt;$1&lt;/p&gt;


	&lt;p&gt;dokumentacja jest pod:  &lt;a href="http://wiki.codemongers.com/NginxHttpRewriteModule" rel="nofollow"&gt;http://wiki.codemongers.com/NginxHttpRewriteModule&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Serwer ten jest raczej dobrze wytestowany i zachowuje si&#281; lepiej ni&#380; apache, zw&#322;aszcza przy bardzo du&#380;ym ruchu. Du&#380;ym atutem apacha s&#261; oczywi&#347;cie modu&#322;y ale dla nginx te&#380; ich nie brakuje:
&lt;a href="http://wiki.codemongers.com/Nginx" rel="nofollow"&gt;http://wiki.codemongers.com/Nginx&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Wed, 01 Nov 2006 17:17:56 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:af2cd11d-990a-4d01-b103-976d08266009</guid>
      <link>http://blog.zabiello.com/articles/2006/10/29/railsy-lighttpd-czy-apache-2-2-x#comment-268</link>
    </item>
    <item>
      <title>"Railsy: Lighttpd czy Apache 2.2.x?" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;By&#263; mo&#380;e to i dobry projekt. Lecz ja bym si&#281; troch&#281; obawia&#322; u&#380;ycia takiego ma&#322;o popularnego (i tym samym s&#322;abo wytestowanego produkcyjnie) rozwi&#261;zania. Jak by&#347; w tym serwerze zrobi&#322; proxy tego typu?&lt;/p&gt;


&lt;code&gt;
RewriteRule "^/(.*)$" "http://host:9876/VirtualHostBase/http/host:80/plone/VirtualHostRoot/$1" 
&lt;/code&gt;</description>
      <pubDate>Mon, 30 Oct 2006 16:49:19 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:9402982d-bf90-414e-907d-05e91c4fe504</guid>
      <link>http://blog.zabiello.com/articles/2006/10/29/railsy-lighttpd-czy-apache-2-2-x#comment-266</link>
    </item>
    <item>
      <title>"Railsy: Lighttpd czy Apache 2.2.x?" by lopex</title>
      <description>&lt;p&gt;je&#347;li chodzi o wydajno&#347;&#263; i pami&#281;&#263; to nic nie mo&#380;e konkurowa&#263; z &lt;a href="http://nginx.net/" rel="nofollow"&gt;http://nginx.net/&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;ma pe&#322;no wbudowanych modu&#322;&#243;w, rewelacyjn&#261; konfiguracj&#281;, jest bardzo stabilny i si&#281; bardzo szybko rozwija&lt;/p&gt;


	&lt;p&gt;konfiguracja dla mongrela wygl&#261;da tak:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;upstream mongrel {
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
}&lt;/code&gt;&lt;/pre&gt;


	&lt;pre&gt;&lt;code&gt;location / {
        proxy_pass  &lt;a href="http://mongrel" rel="nofollow"&gt;http://mongrel&lt;/a&gt;;
        proxy_redirect     on;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <pubDate>Mon, 30 Oct 2006 15:46:30 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:abcd82b9-55a6-4b5e-bf11-2062cbefe1f9</guid>
      <link>http://blog.zabiello.com/articles/2006/10/29/railsy-lighttpd-czy-apache-2-2-x#comment-265</link>
    </item>
  </channel>
</rss>
