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.
nginx
loadbalancing
Jonathan Bownds
źródło
źródło
Odpowiedzi:
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.
źródło
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.
źródło