Mam nowy serwer do zabawy i patrzę na puste płótno. Mogę umieścić na nim wszystko, co chcę. Chociaż czuję się dobrze z Apache, wciąż słyszę, jak nginx może obsłużyć o wiele większy ruch niż Apache, przy współczynnikach 10, 100, a nawet więcej. Nie tylko, że jest „znacznie szybszy”.
Kiedy szukam artykułów, mogę znaleźć wiele rzeczy niezwiązanych z Drupalem. Lub gdy natknę się na artykuł związany z Drupalem, to albo 1) czyjś plik konfiguracyjny z szybką próbą wyjaśnienia, jak go skonfigurować, albo 2) to ktoś mówi „nie, nie używaj nginx, idź z Apache z PHP fcgid ", ale nigdy nie ma wyjaśnienia, dlaczego.
Jeśli chodzi o Drupala, jaka jest tutaj rzeczywistość?
Jako przykład szukam czegoś podobnego do tego artykułu 2bits.com . Tutaj autor rzucił obszerne spojrzenie na Apache mod_php vs Apache z fcgid, ważąc zalety i wady każdego z nich, i przedstawił studium przypadku ilustrujące wpływ na rzeczywisty świat. W tym artykule jest wystarczająco dużo informacji, aby podjąć świadomą decyzję, które podejście byłoby najlepsze w mojej sytuacji.
Podczas gdy autor ten porównuje mod_php do fcgid, szukam tego samego rodzaju kompleksowego, rzeczywistego spojrzenia na Apache vs. Nginx.
Czy ktoś zmienił się na Nginx i został „oszołomiony” różnicą, którą zrobił w porównaniu z Apache? Nawet w wysoce zoptymalizowanych środowiskach, które już korzystają z APC, Memcache i agresywnego buforowania, takiego jak Varnish, gdy jedyną zmienną, która się zmienia, zastępuje Apache Nginx, sama w sobie robi wystarczającą różnicę, aby zasługiwać na inwestycję w tę nowszą, alternatywną technologię ?
Witryna, która będzie dostępna na tym serwerze, otrzyma średnio 2 miliony PV miesięcznie. Stos LAMP z systemem Cent OS 6. 4-rdzeniowy procesor z 8 GIGS pamięci RAM. Memcached i APC będą częścią miksu. Nic specjalnego w instalacji Drupal - w zasadzie wanilia 7 z około 50 modułami.
źródło
Odpowiedzi:
Ściśle mówiąc, to nie odpowiada na pytanie, które zadajesz. Mam nadzieję, że i tak jest to pomocne.
Serwer WWW Apache / Nginx / Lighttpd / inny. Czy to ważne, który wybrać? Krótko mówiąc, nie .
Znacznie dłuższa odpowiedź:
Jeśli i tylko jeśli, masz bardzo duży odsetek zalogowanych użytkowników, jeśli w ogóle zależy Ci na wydajności serwera. Jeśli Twoi użytkownicy są anonimowi, wszelkie różnice, które teoretycznie możesz czerpać z optymalizacji na tych warstwach, są absolutnie bledne w porównaniu z lepszym buforowaniem zasobów. Jeśli twoje pliki css mają odpowiednie nagłówki pamięci podręcznej, UA nawet nie poprosi o nie po raz drugi. To się liczy. Jeśli możesz buforować swoje strony w Varnish lub podobnym rozwiązaniu programowym, wyświetlenie tej strony jest kwestią sprawdzenia skrótu, a następnie zwrócenia dużej ilości danych bezpośrednio z pamięci RAM. To się liczy. W obu tych scenariuszach demon HTTP nawet się nie angażuje, PHP się nie wywołuje. Drupal nie uruchamia się. Do pamięci RAM nie wolno ładować dużego zestawu modułów, nie są wykonywane czasochłonne zapytania do bazy danych.
Podczas pełnego ładowania strony z zimnej pamięci podręcznej dla zalogowanego użytkownika na złożonej stronie; dzieje się wiele rzeczy. Tak, serwer WWW jest zaangażowany w obsługę przychodzącego żądania, ustawianie niektórych nagłówków i przekazywanie odpowiedzi z powrotem. Ale czas, który zajmuje, nie jest nawet istotny w kontekście Drupala, który uruchamia pełny bootstrap i wyświetla swoją odpowiedź. Mogą być wykonywane setki zapytań do bazy danych. Wysoce złożona logika w PHP jest analizowana przez parser. Wiele modułów jest ładowanych do pamięci RAM. Poprawa wydajności którejkolwiek z tych rzeczy może znacznie przyczynić się do poprawy wydajności.
Dla argumentu: powiedzmy, że poświęciłeś dużo czasu na optymalizację wszystkiego innego.
Jeśli masz wielu zalogowanych użytkowników i zajmujesz się wszystkimi powyższymi kwestiami, prawdopodobnie możesz zrobić różnicę, ale dostrajając wydajność lub wymieniając serwer WWW. Zgadnij co. Twoja witryna jest tak złożona, a wzorce użytkowania poszczególnych użytkowników są wyjątkowe . Nie ma ogólnej odpowiedzi. Będziesz musiał skonfigurować wszystkie różne serwery WWW za modułem równoważenia obciążenia i zobaczyć, jak się zachowują w twoim scenariuszu .
Powyższe było próbą logicznego wyciągnięcia wniosku, że poświęcenie czasu na optymalizację serwera WWW jest prawdopodobnie złym wykorzystaniem czasu. Chciałbym, aby ktoś wybrał dziury w powyższym, prawdopodobnie nauczyłbym się z tego czegoś nowego. :)
Inne uwagi:
$ wc -l $(find . -type f | grep -v "^\.git" | grep -v "^\.hphp/third_party") | sort -nr | head -n1
Hiphopa i znalazłem, że składa się z 1.512.481 linii kodu. To absolutnie szalona ilość pracy włożonej w poprawę szybkości PHP. Zgaduję, że to dlatego, że szybkość PHP ma dla nich ogromne znaczenie.źródło
OK, chociaż na to pytanie już udzielono odpowiedzi, jeszcze raz nekromantuję, przede wszystkim dlatego, że nie podoba mi się implikacja tych odpowiedzi, że to nie robi różnicy, a ponieważ jako twórca stron internetowych nienawidzę buforowania z pasją .
Różnica między Apache a nginx polega na tym, że nie tyle „jak szybko mogą obsłużyć żądanie”, ale ile żądań mogą obsłużyć na tej samej ilości sprzętu (szczególnie przy ograniczonych zasobach), co jest nieco inną rzeczą.
Apache to serwer oparty na procesach. Oznacza to, że forsuje proces dla każdego żądania. Nginx to serwer oparty na zdarzeniach, co oznacza, że używa (asynchronicznej) pętli zdarzeń zamiast procesów lub wątków.
I podczas gdy serwer oparty na procesach (jak Apache) może działać mniej więcej na równi z serwerem asynchronicznym opartym na zdarzeniach (jak nginx) przy niewielkich obciążeniach, przy większych obciążeniach, takich jak na przykład 10 000 000 jednoczesnych żądań, nginx wykorzystuje tylko kilka megabajtów pamięci RAM, podczas gdy Apache wymaga kilkuset megabajtów dla samego serwera WWW (nie wliczając aplikacji internetowej, która sama potrzebuje znacznie więcej zasobów), jeśli w ogóle mogłaby to zrobić.
Dlatego przy większym obciążeniu zobaczysz, że Apache zużywa o wiele za dużo pamięci RAM, co, co nie dziwi, znacznie obniża wydajność.
Co ważniejsze, wyższe zużycie pamięci RAM oznacza, że Apache jest w stanie obsługiwać mniej żądań na tym samym sprzęcie niż nginx, co oznacza, że Apache wymaga więcej sprzętu dla tej samej liczby użytkowników, co oznacza, że masz wyższy całkowity koszt posiadania (całkowity koszt posiadania) z Apache niż z nginx, co zmniejsza ROI (zwrot z inwestycji).
Całkowita pamięć używana przez X równoczesnych połączeń (mniej znaczy lepiej)
Żądania, które mogą być obsługiwane na sekundę przy X równoczesnych połączeniach na 1 zestawie sprzętu (im więcej, tym lepiej)
Źródło: ApacheBench, przez dreamhost.com
Zobacz także to podsumowanie oceanu cyfrowego.
Najwyraźniej zależy to od architektury obsługi połączeń wybranej dla Apache.
źródło
Kilka miesięcy temu przełączyłem się z Apache na Nginx / PHP-FPM.
Zrobiłem test porównawczy na stronie drupala i przetestowałem kilka przypadków użycia. Na serwerze VPS z 1 CPU i 512 Mo RAM
Drupal tylko z pamięcią podręczną
Nginx
Apacz
Drupal z pamięcią podręczną i doładowaniem
Nginx
Apacz
test porównawczy dla uwierzytelnionego użytkownika (ładowanie strony)
Nginx
Apacz
Ale mocą Nginx jest system pamięci podręcznej
Drupal bez wzmocnienia i Nginx z włączonym systemem pamięci podręcznej
Powinieneś użyć konfiguracji perusio Nginx dla Drupala
źródło
Oto test wydajności dla dziesięciu serwerów / wariantów (np. Apache, Nginx, lighttpd, Lightspeed, Hiawatha, Cherokee). Trzy testy dotyczą Drupala.
Myślę, że Hiawatha może być najlepszym ogólnym wyborem. Podobno ma pełną kompatybilność z Drupalem , kładzie nacisk na bezpieczeństwo (DoS, XSS, CSRF, zapobieganie wstrzykiwaniu SQL) oraz prędkości i ślad podobny do Nginx.
W dwóch z trzech testów Drupala zarówno Hiawatha, jak i Nginx przewyższają Apache o około 150%, ale w teście statycznym Drupal Apache nieznacznie przewyższa Nginx, podczas gdy Hiawatha przewyższa pakiet o około 10%.
Nie powiesiłbym kapelusza na żadnym z tych testów, ale daje to ogólny obraz wydajności w różnych sytuacjach użytkowania. Myślę, że sama wydajność nie powinna być jedynym czynnikiem. Ważniejsze czynniki to stabilność i bezpieczeństwo.
źródło
tutaj jest obciążenie testowania wyników dla drupal uruchomione na tym samym sprzęcie, ale z różnych serwerów internetowych. (nginx i apache)
oto zakończenie tego testu:
źródło