Webservern Apache är en av Internets verkliga arbetshästar, men den har en akilleshäl: när en server skall hantera tusentals förfrågningar samtidigt börjar det gå trögt. Den senaste tiden har Apache fått några vassa utmanare som gör jobbet snabbare. Den mest populära heter Nginx.

Loggan ser minst sagt knepigt ut, men namnet ska uttalas ”Engine X”. Det är en webbserver som ända sedan sin födelse år 2002 har byggts för att vara snabb, och då inte bara vid lågtrafik, utan särskilt när det verkligen börjar hetta till. Det har medfört att en hel del tunga aktörer har börjat använda Nginx, till exempel utvecklingssidan Sourceforge och bloggjätten Wordpress.

En titt på Google Trends visar att Nginx annars verkar ha sin största användarbas i Ryssland och Ukraina, kanske inte helt konstigt med tanke på att projektets upphovsman Igor Sysoev kommer från Kazakstan och är bosatt i Moskva, och att en del av dokumentationen enbart finns på ryska. Enligt Netcraft körs i dag cirka fem-sex procent av världens alla webbplatser på Nginx, vilket gör den till den tredje vanligaste webbservern om vi räknar bort den mjukvara som Google använder internt, som inte är tillgänglig för oss andra.

 

Tre andra snabba servrar
Nginx är inte ensam - här är tre ytterligare webbservrar för Linux/Unix som är optimerade för prestanda:
- Lighttpd  - Litespeed   - Tux

 

 

Under huven på Nginx

Ett av knepen som Nginx utvecklare har tagit till är en effektivare princip för hur webbservern hanterar inkommande förfrågningar jämfört med den i Apache. En och samma process tar emot anropen, ser till att de utförs och returnerar svaren. Arbetet fördelas av serverprocessen själv utan inblandning av operativsystemet, och utförs ”parallellt”. Ingen klient behöver vänta på att någon annan först får svar – alltså vad som brukar kallas för en asynkron server.

Designen minskar behovet av primärminne för att hålla en tjänst rullande, eftersom varje process räcker längre. Alternativet, där en ny process eller tråd startas för att hantera varje uppkoppling, resulterar i väldigt många processer som gör ungefär samma sak men var och en av dem behöver sitt eget minnesutrymme. Dessutom tar växlingen mellan tusentals trådar också tid att hantera.

Nginx kodbas är bara ungefär en tiondel så stor som hos bjässen Apache, men ändå har Igor Sysoev och de andra utvecklarna klämt in en hel del funktioner för att snabba upp servern. Till exempel används olika ”event-metoder” för att lyssna på nätverkstrafik beroende på vilken variant av Unix eller Linux som man kör med, och om vi tittar på djupet i Nginx källkod hittar vi också en del optimeringar för olika processortyper. Det är något som kompilatorn oftast får hantera, men genom att själva applikationskoden också modifieras blir Nginx ännu snabbare.

Skral community

Nginxprojektets största problem är att utvecklargruppen är ganska liten, särskilt om man jämför med Apache. Hela satsningen står antagligen och faller med med grundaren, något som alltid är lite läskigt. En av orsakerna kan vara att Nginx är en mer specialiserad mjukvara, som inte löser lika många behov som Apache. Troligen beror det mer på att källkoden faktiskt är ganska dåligt dokumenterad, och det gör det svårt för nya utvecklare att delta.

Trots farhågorna är Nginx en populär webbserver, till och med den överlägset mest populära bland dem som verkligen fokuserar på maxprestanda. Det gör Nginx till ett hyfsat framtidssäkert val, och med tanke på att själva webbservern ganska enkelt kan bytas ut är det lätt att förstå varför stora webbplatser vågar satsa på den. Om din webbserver har brist på minne kan det vara läge att prova själv! 
 

Optimera Nginx för din server 


Nginx bör normalt köras med exakt en arbetsprocess för varje fysisk cpu-kärna som du har i din server. Men om disksystemet inte hinner med kan du få bättre prestanda med flera processer.

Om du använder php på din site – använd fastcgi. Det kräver en del trixande med konfigurationen, men det är det värt.


Om du använder Linux, kör event-modellen epoll. Det är det mest effektiva sättet att bevaka inkommande trafik på nätverket.

 

.

Fakta

Företaget Netcraft söker med jämna mellanrum igenom internet efter publika webbservrar och samlar information om deras mjukvara och upptid. Varje månad publiceras statistiken – se bilden till vänster. I augusti 2010 hade Nginx en ”marknadsandel” på 5,49 procent och Lighttpd 0,85 procent. Apache är nätets vanligaste servermjukvara med 56,06 procent, och den har legat över 50 procentstrecket sedan 1990-talet.

Notera att Netcraft mäter antalet domännamn som hanteras av en viss programvara, och inte antalet fysiska servrar. Ett stort webbhotell kan alltså få ganska stort avtryck i statistiken, eftersom de hanterar
väldigt många domäner.