Skocz do zawartości
Lokator

Wydajne serwery www - jakie znacie?

Polecane posty

Witajcie,

 

Chciałbym zagłębić się w tematykę wydajności serwerów www. Chciałbym abyście podzielili się wyborem, doświadczeniami oraz wiedzą ogólną dotyczącą tychże serwerów. Prosiłbym o uzasadnienie Waszego wyboru, opisanie cech (wad i zalet) używanych przez Was serwerów www :)

 

Czy są serwery lepsze, bądź takie, które mogłyby konkurować ze znanymi większości Apache'm, Nginx'em oraz OpenLiteSpeed'em? :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ja ostatnio zagłębiam się w nginx z modułem LUA. Demon prędkości, bo logikę aplikacji można pisać praktycznie w kodzie serwera WWW.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wydajność serwera będzie miała trzeciorzędne znaczenie przy 99% zastosowań i będzie się też różniła w zależności od zastosowania. Wybierz raczej coś wygodnego w konfiguracji i z dobrym wsparciem, szczególnie regularnymi aktualizacjami.

  • Upvote 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

lighttpd, bo jest lżejszy od Apache, a w większości zastosowań zrobi to samo.

 

Nginx nigdy nie ruszałem, więc się nie będę wypowiadać na jego temat.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Nginx jest moim skromnym zdaniem najlżejszym, najbardziej elastycznym i najszybszym serwerem WWW, pięknie działa z php-fpm, a używanie go na produkcji to sama przyjemność.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość patrys

Lighttpd to przeszłość, Apache stabilny serwer uznawany za pseudo standard, a Nginx to bardzo dobry produkt pod wiele zastosowań.

Zawsze można tworzyć małe tandemy i pozwolić Apache tylko uruchomić PHP w oparciu o moduł, a resztę przekazać do obsługi przez haproxy/varnish/nginx...

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Dzięki chłopaki : ) | Czyli poświęcić czas na pełną naukę apache'a (jako temat produkcyjny) oraz nginx'a (jako temat indywidualny)?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

@patrys - a czemu niby poświęcać czas na Apache. W każdej kategorii (oprócz obecności .htaccess) przegrywa z alternatywami. Nauka apache dla wersji produkcyjnej to nauka wszystkich parametrów, które są konfigurowalne i które przy danych warunkach mają ogromny wpływ na szybkość i płynność działania.

 

Teraz pod cokolwiek, czy to strony statyczne, strony napisane w PHP, czy nawet streaming vod/live możesz użyć 1 serwera - nginx. Jeśli nie nginx to są G-Wan, lighttpd, thttpd.

 

Do każdego rozwiązania da się wybrać serwer, który będzie wydajniejszy od Apache, a właśnie o wydajność jest teraz walka. Szybka strona przyciąga userów - zamulona odrzuca.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Misiek08: prosta kwestia. Masz serwer z kilkoma kontami. Sam nie masz czasu odbierać wiadomości od klientów, że chcą konto ftp, mail itp. A nawet jeśli, uciążliwe jest logowanie i wykonywanie tego, w teorii prościej wyklikać. Stawiasz jakiś panel i jazda. DA nie współpracuje w 100% z nginx, chyba że jako proxy (lub coś się zmieniło-w temacie nie jestem). Oczywiście jak masz cały serwer pod jeden projekt, to problem znika, ale jeśli masz na nim kilkanaście projektów, sprawa taka prosta nie jest.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Są już panele, które wspierają nginx'a. Teoretycznie nie da się ich jeszcze wykorzystać pod hosting współdzielony, dla wielu klientów.

 

O ile nie martwiłbym się tym co napisałeś, czyli kontami mail i ftp, bo napisanie do nich panelu zamknęło by się w kwocie 3-4x większej niż koszt DA. Gorzej jest z tym, że większość systemów używa tego nieszczęsnego .htaccess. Dopóki mamy takich userów nie możemy sobie pozwolić na niewspieranie tej funkcji, bo będziemy musieli przepisywać ludziom regułki lub po prostu puścić dla nich Apache przez reverse proxy.

 

Temat brzmi "wydajne serwery www", więc nie patrzymy tutaj wg mnie na hostingi współdzielone tylko na serwery, które można wykorzystać przy projekcie w taki sposób, żeby maksymalnie wykorzystać zasoby.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Fakt z tym się zgodzę.

 

Ale, sam napisałem że apache to strata czasu... W tym przypadku to nie jest strata czasu.

Zapomniałem oczywiście o apachowych regułkach do mod_rewrite :) Ja akurat używałem proxiaka, bo wydał się prostszy i szybszy a wydajność skoczyła o 20-40%.

 

Tak z ciekawości, nie ma skrypty do konwersji? Czasem wystarczy dodać rewrite i samą regułkę z wyrażeniem regularnym.

 

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Są skrypty do konwersji, jednak jak user wrzuci np. WordPress'a z .htaccessem to wtedy trzeba by napisać skrypt, który po wrzuceniu przez FTP pliku .htaccess konwertuje go na rewrite'y i dodaje do konfiguacji ngnix'a. Jest to oczywiście zestaw wybuchowy, bo trzeba by do tego napisać ogromną ilość walidatorów, które sprawdzą, czy regułki są bezpieczne.

 

Brak .htaccessa można przeżyć jeżeli tylko nie uruchamia się hostingu współdzielonego.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A co jeśli stawiałbym hosting współdzielony, gdzie korzystanie z .htaccess to podstawa? Czego wtedy używać?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wszystko zależy od tego co masz zamiar utrzymywać.
Jeżeli będzie to strona serwująca mnóstwo statyki to rzeczywiście wydajność nginx w porównaniu do apache będzie in plus.
Jednak w przypadku np. forum dyskusyjnego, gdzie jednak większość obciążenia to PHP/MySQL czy dowolny inny język i baza danych to różnica w wydajności nginx vs apache 2.4 na mpm-event będzie minimalna. Zakładam, że tu i tu działać będzie php-fpm, przypominam, że w apache 2.4 mamy mod_proxy_fcgi. ; )

Rzeczywiście różnica w wydajności pomiędzy mpm-prefork czy nawet mpm-worker w zestawieniu z nginx'em jest wręcz dramatyczna. Jednak w przypadku mpm-event nie wygląda to już wcale tak tragicznie.

  • Upvote 2

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

@malu - nie wygląda tragicznie, jednak nadal jest. Testowałem na swoim laptopie (i7, 8GB RAMu) i nginx ciągle był górą.

 

Jeżeli @Lokator potrzebujesz .htaccessa to niestety nginx odpada. Wtedy zostajesz najlepiej z Apache, bo alternatywy już nie będą tak szybkie i łatwe w instalacji i konfiguracji.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Wrzucę coś takiego:

Na domyślnych configach w Debianie testing. Apache 2.4 mpm-event z wyłączonym .htaccess

Server Software:        nginx/1.4.4
Server Hostname:        37.28.155.204
Server Port:            81

Document Path:          /
Document Length:        192 bytes

Concurrency Level:      10000
Time taken for tests:   12.953 seconds
Complete requests:      100000
Failed requests:        18962
   (Connect: 0, Receive: 0, Length: 18962, Exceptions: 0)
Write errors:           0
Non-2xx responses:      81038
Total transferred:      36342910 bytes
HTML transferred:       18915570 bytes
Requests per second:    7720.06 [#/sec] (mean)
Time per request:       1295.327 [ms] (mean)
Time per request:       0.130 [ms] (mean, across all concurrent requests)
Transfer rate:          2739.94 [Kbytes/sec] received
Server Software:        Apache/2.4.6
Server Hostname:        37.28.155.204
Server Port:            80

Document Path:          /
Document Length:        177 bytes

Concurrency Level:      10000
Time taken for tests:   17.581 seconds
Complete requests:      100000
Failed requests:        0
Write errors:           0
Total transferred:      42300000 bytes
HTML transferred:       17700000 bytes
Requests per second:    5688.10 [#/sec] (mean)
Time per request:       1758.055 [ms] (mean)
Time per request:       0.176 [ms] (mean, across all concurrent requests)
Transfer rate:          2349.68 [Kbytes/sec] received

Apache 2.4 z nieco zoptymalizowaną konfiguracją:

Server Software:        Apache/2.4.6
Server Hostname:        37.28.155.204
Server Port:            80

Document Path:          /
Document Length:        177 bytes

Concurrency Level:      10000
Time taken for tests:   13.552 seconds
Complete requests:      100000
Failed requests:        0
Write errors:           0
Total transferred:      42300000 bytes
HTML transferred:       17700000 bytes
Requests per second:    7379.00 [#/sec] (mean)
Time per request:       1355.197 [ms] (mean)
Time per request:       0.136 [ms] (mean, across all concurrent requests)
Transfer rate:          3048.16 [Kbytes/sec] received

A tu wynik z włączonym .htaccess po optymalizacji:

Server Software:        Apache/2.4.6
Server Hostname:        37.28.155.204
Server Port:            80

Document Path:          /
Document Length:        177 bytes

Concurrency Level:      10000
Time taken for tests:   14.160 seconds
Complete requests:      100000
Failed requests:        0
Write errors:           0
Total transferred:      42300000 bytes
HTML transferred:       17700000 bytes
Requests per second:    7062.32 [#/sec] (mean)
Time per request:       1415.965 [ms] (mean)
Time per request:       0.142 [ms] (mean, across all concurrent requests)
Transfer rate:          2917.35 [Kbytes/sec] received

Badałem kilkukrotnie, aby przekonać się, że wyniki wychodzą circa podobne. ; )

Oczywiście ten sam rootdir. Ten sam serwer, o tych samych parametrach, serwery uruchomione na innych portach.

Edytowano przez malu (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Testowałeś plik statyczny?

Niestety lapka mam wyłączonego, więc test na VPS #1 w BH:

Server Software:        nginx/1.4.4
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        4 bytes

Concurrency Level:      100
Time taken for tests:   0.909 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      2320000 bytes
HTML transferred:       40000 bytes
Requests per second:    11005.70 [#/sec] (mean)
Time per request:       9.086 [ms] (mean)
Time per request:       0.091 [ms] (mean, across all concurrent requests)
Transfer rate:          2493.48 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    3   1.7      3       8
Processing:     1    6   1.5      6      13
Waiting:        0    4   1.5      4       8
Total:          5    9   1.4      9      15

Percentage of the requests served within a certain time (ms)
  50%      9
  66%      9
  75%     10
  80%     10
  90%     11
  95%     12
  98%     12
  99%     13
 100%     15 (longest request)
Edytowano przez Misiek08 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Tak, mały plik statyczny. Domyślny index.html od apache w debianie. ; )

Zerknij na moje wartości:

Concurrency Level:
Complete requests:

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Sorki, na 1 rdzeniowym serwerku nie chciałem dawać takiego concurrency.

 

Powiedz mi jakie masz parametry albo puść tam u siebie nginx'a. Ja mogę jutro podrzucić z lapka testy.

 

Dodatkowo pokaż komendę jaką uruchamiałeś i testy dysku i 1000 innych rzeczy. Jutro odpalę test na i7, plik z ramu lub nginx-lua i wtedy będzie 20k requestów. Dodając keepalive mam 30-40k/s, usuwam linijkę i wygrałem.

Edytowano przez Misiek08 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

W pierwszym teście, który podesłałem jest nginx. ; )
Co do parametrów, myślę, że to bez większego znaczenia - wszystkie były wykonywane na tym samym serwerze. Co do wydajności macierzy to tam siedzi 8 dyskowa macierz SSD w Raid10 HW.

3 następne to apache 2.4 odpowiednio:
-domyślny config bez .htaccess
-zoptyamalizowany config bez .htaccess
-zoptymalizowany config z .htaccess

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Mały plik statyczny i tak będzie serwowany z RAM, więc dyski to sprawa bez znaczenia w takim teście.

 

Jeśli chodzi o serwer www, ja korzystam z nginx - według mnie jest dużo łatwiejszy w konfiguracji niż Apache. Co do wydajności - uważam, że jest bardzo dobra i nie miałem potrzeby rozglądania się za innym serwerem.

 

Kiedyś korzystałem z lighttpd, ale niestety był bardzo niestabilny przy dużym obciążeniu, więc sobie go podarowałem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×