Korzyści wynikające ze stosowania NGINX

16

Zastanawiając się nad wykorzystaniem NGINX do obsługi magento- nie martwię się o szczegóły implementacji, ale chcę wiedzieć, czy ktoś ma dobre (lub złe) rzeczy do powiedzenia na ten temat. Szczególnie interesujące jest zastosowanie NGINX do równoważenia obciążenia Magento.

Jonathan Bownds
źródło
mamy 2 sklepy działające na serwerze dedykowanym z NginX. Dla sklepów o dużym natężeniu ruchu z pewnością jest korzyść, ponieważ NginX po prostu lepiej obsługuje żądania i pozostawia więcej zasobów dla Magento. W przypadku sklepów o małym natężeniu ruchu nie jestem pewien, czy jest jakaś korzyść
Sander Mangel

Odpowiedzi:

15

Nginx jest zdecydowanie dobrym wyborem do hostowania Magento i oferuje wiele fajnych (ale niewielkich) korzyści, które mogą pomóc poprawić wydajność strony.

Główną różnicą między Nginx a Apache jest to, że Nginx używa nieblokowanego Evented IO, a Apache po prostu używa wielowątkowości / przetwarzania. Jaka jest różnica i dlaczego ma to znaczenie? Cóż, w przypadku Apache, powiedzmy, że ma 5 wątków, może obsłużyć 5 żądań o coś w danym momencie. Jeśli jeden z tych wątków zajmuje dużo czasu, pozostają tylko 4 wątki, aby obsłużyć dalsze przychodzące żądania. Jeśli wszystkie 5 wątków zostanie zablokowanych, żadne przychodzące żądania nie będą obsługiwane, dopóki jeden się nie zakończy.

Dzięki Evented IO, gdy wątek otrzyma żądanie czegoś, odpala zdarzenie i przechodzi bezpośrednio do następnego żądania. Kiedy zdarzenie oddzwania, przekazuje odpowiedź odpowiedniemu klientowi.

Jest to mniej więcej podobne do działania asynchronicznego javascript. Odpowiadasz na żądanie AJAX i kontynuujesz do momentu otrzymania oddzwonienia.

To nowoczesne podejście dobrze nadaje się do obsługi wielu małych plików statycznych bez konieczności generowania dużej liczby wątków lub procesów systemu roboczego.

Inną zaletą Nginx jest niski poziom pamięci. Apache obsługuje wiele rzeczy, a przy tym ma wysoką pamięć i ślad obliczeniowy. Możesz go przywrócić, ale Nginx został zaprojektowany od podstaw, aby był szczupły pod względem pamięci.

Różnice nie są ogromne, ale w miarę skalowania do wielu tysięcy żądań, te małe różnice, łącznie, robią dużą różnicę.

Teraz należy pamiętać, że największym wąskim gardłem w wydajności aplikacji Magento jest wykonanie kodu PHP. Tutaj jest zasadniczo nieistotna różnica w wydajności między Apache i Nginx. Ważną rzeczą jest użycie PHP-FPM oraz MPM-a roboczego z Apache (i zdecydowanie unikać prefork / mod-php). Głównym powodem jest to, że wywołujesz interpretera PHP tylko wtedy, gdy potrzebujesz wykonać kod PHP, i możesz efektywnie korzystać z oprogramowania buforującego op-code, takiego jak APC (i to jest jedyny największy wzrost wydajności, jaki uzyskasz).

Ostatni punkt do zrobienia: niektóre moduły / aplikacje oczekują użycia Apache, a dokumentacja może być ukierunkowana na użycie ModRewrite lub użycie plików .htaccess. Chociaż w Nginx dostępna jest obsługa stylu ModRewrite, nie ma obsługi rozwiązań w stylu .htaccess dla poszczególnych katalogów.

Osobiście podoba mi się Nginx, ponieważ skutecznie obsługuje zawartość statyczną, bardzo łatwo jest skonfigurować PHP-FPM i bardzo podoba mi się jego składnia konfiguracji. To nie jest magiczne rozwiązanie problemów z wydajnością, ale jest to solidna, elastyczna opcja do rozważenia.

Aaron Bonner
źródło
1
Świetna odpowiedź poparta wnioskami Magento, Inc.: magentocommerce.com/whitepaper
zaznacza
Tak, zgadzam się z Aaronem w 100%, my także używamy Nginx do większości naszych wdrożeń Magento ze względu na jego zdolność do szybszego serwera zawartości statycznej i obsługi większej liczby równoczesnych żądań w porównaniu do Apache. Jedynym minusem, z jakim natknęliśmy się na Nginx, jest jeden z naszych projektów, który losowo generuje błąd przekroczenia limitu czasu bramy 504 (nawet gdy obciążenia serwera są dość niskie). Musimy jeszcze dopracować ten ... większość rozwiązań opisanych na różnych forach niewiele pomogła.
Vinci Rufus,
1

Powiedziałbym, że korzyści płynące z wydajności Nginx przy korzystaniu z Magento są pomijalne. Przewaga IO oparta na zdarzeniach, o której wspomniał Aaron, dotyczy również Apache (podczas korzystania ze zdarzenia MPM).

Mówiąc ogólnie o Magento, większość przetwarzania (99%) odbywa się w PHP i bazie danych, więc optymalizacja pierwszego 1% da stosunkowo niewielkie korzyści.

Istnieją jednak inne powody, aby wybrać Nginx dla Magento, takie jak mniejszy rozmiar pamięci, lepszy limit szybkości i obsługa SPDY.

Nginx ma dużą wadę przy konwersji istniejących witryn Magento działających na Apache, ponieważ wiele instrukcji .htaccess nie jest bezpośrednio mapowanych na instrukcje Nginx. Na przykład Nginx nie obsługuje nazw hostów w listach ACL.

Willem
źródło