Mam serwer z kilkoma domenami i aplikacjami działającymi przez Apache. W tej chwili wszystko jest w porządku, ale mam plany, aby opracować bardzo wymagającą wydajność aplikację internetową (wykorzystującą C ++ z CPPCMS), zaczynając od mojego serwera do testowania, być może otrzymując osobny serwer tylko dla tej aplikacji, gdy będzie gotowy.
W każdym razie dużo słyszałem o NGinx, który wydaje się być bardziej wydajny niż Apache, więc zadałem sobie pytanie, czy warto z nim pracować dla tego nowego projektu. Nie jest to dla mnie jasne, ponieważ nie wiem, jaki rodzaj wąskiego gardła w zakresie wydajności NGinx naprawia dokładnie.
Nie jestem zaawansowanym użytkownikiem Apache, jestem kiepskim administratorem Linuksa i nie rozwijam zbyt wiele aplikacji internetowych (ale mam pojęcia). Zajmuję się głównie pisaniem oprogramowania, więc część serwera jest czasami dla mnie bardzo niejasna. Za każdym razem, gdy muszę skonfigurować stronę internetową za pomocą apach, potrzebuję dużo czasu na przeglądanie dokumentu, aby upewnić się, że nie wszystko zepsuję.
Biorąc to pod uwagę, myślę, że po tej stronie mam się znacznie lepiej, ale wciąż potrzebuję porady. Widziałem kilka plików konfiguracyjnych Nginx i wydaje się to bardziej zrozumiałe niż Apache, ale może się mylę?
Z zebranych informacji wynika, że NGinx byłby najlepszym wyborem, jeśli chcesz wyrównać obciążenie, więc jeśli masz aplikację rozłożoną na kilka komputerów, prawda? Gdy myślę o mojej aplikacji do scallingu (i wydajności), wygląda na to, że tego potrzebuję, ale może potrzebuję wiedzieć więcej na temat tego, kiedy warto przejść z Apache do NGinx. Czy warto przejść na NGinx także dla wszystkich moich obecnych aplikacji? Ile to kosztuje? (Mam na myśli, czy przejście z jednej na drugą jest kosztowne na czas?) Czy mogę używać Apache i NGinx zarówno na tej samej maszynie bez żadnego problemu?
Uwaga dodatkowa : Nie nakłaniaj mnie do używania języków interpretowanych zamiast C ++, nie ma to związku z pytaniem. Zobacz stronę uzasadnienia CPPCSM, aby zobaczyć, jaki rodzaj aplikacji może z tego skorzystać. Doskonale rozumiem wady (w porównaniu do aplikacji w Ruby i Pythonie, których już używam do mniej energochłonnych aplikacji internetowych) i nie mam nic przeciwko.
źródło
Mówiąc bardzo ( bardzo ) ogólnie, Nginx może uzyskać znacznie wyższą przepustowość niż Apache dzięki odmiennemu podejściu architektonicznemu do problemu wyświetlania stron w Internecie. Nginx został również zbudowany przede wszystkim jako zwrotny serwer proxy i wyjątkowo dobrze wypełnia tę rolę (jest to bit równoważenia obciążenia, o którym wspominałeś); Z drugiej strony Apache został stworzony do obsługi stron internetowych, a później zyskał możliwość proxy.
To powiedziawszy, prawie na pewno istnieją obszary, w których Apache będzie konsekwentnie osiągać lepsze wyniki niż Nginx, podczas gdy istnieją inne obszary, w których Nginx równie dobrze osiąga lepsze wyniki niż Apache.
Krótka odpowiedź brzmi: jeśli Apache działa dla ciebie, nie musisz się przełączać. (I mówię to jako były użytkownik Apache, który został całkowicie przekonwertowanym uczniem Nginx.) Tylko wtedy, gdy ruch do twojego serwera zaczyna osiągać poziomy, w których Apache staje się twoim wąskim gardłem (jest to rzędu kilku tysięcy jednoczesnych połączeń, ale będzie się różnić w zależności od specyfikacji serwera i innego obciążenia serwera), lub jeśli próbujesz uruchomić Apache w środowisku ubogim w zasoby, gdzie ledwo się zmieści, to czy przejście na Nginx daje ci solidną korzyść.
To powiedziawszy, jeśli chcesz przejść na Nginx (do czego zachęcam!), To idź. Czy zobaczysz jakieś korzyści? 9 razy na 10: Nie, nie będziesz. Ale wspomniałeś, że bardziej podoba Ci się język plików konfiguracyjnych Nginx, więc jeśli wygodniej jest skonfigurować Nginx niż Apache, to jest to dla Ciebie korzyść! (Osobiście uważam, że konfiguracje Apache są ogólnie łatwiejsze do odczytania, ale może to być spowodowane tym, że spędziłem wiele, wiele lat czytając je, a na Nginx spędziłem tylko kilka krótkich miesięcy!)
Na marginesie: Wspomniałeś o chęci zbudowania aplikacji internetowej w C ++. Ze względu na twoje zdrowie psychiczne zdecydowanie zachęcam do korzystania z języka wyższego poziomu, takiego jak PHP, Python, a nawet Java. Następnie profiluj swój kod i zastanów się nad utworzeniem modułów opartych na C ++, aby rozwiązać określone wąskie gardła (zarówno Python, jak i PHP pozwalają na to dość łatwo; nie wiem o Javie). Jeśli martwisz się ogólną wydajnością, zastanów się nad tym: EVE Online, największa na świecie niechroniona gra MMORPG, jest oparta na wariancie Pythona (Python bez stosu), z tylko kluczowymi komponentami (np. Bibliotekami graficznymi) napisanymi w C ++. Jeśli Python sobie z tym poradzi, to z pewnością poradzi sobie z aplikacją internetową?
źródło
Nikt tak naprawdę nie może odpowiedzieć na pytanie „kiedy powinienem przełączyć” - będzie to zależeć od obciążenia, wydajności własnego kodu aplikacji itp.
nginx używa pojedynczego procesu (lub bardzo małej liczby procesów roboczych) do obsługi wszystkich połączeń klienckich za pomocą zdarzeń I / O. Apache ma kilka dostępnych modułów „Multi-Processing Modules” , ale wszystkie one bardziej skłaniają się ku wielu procesom / wielu wątkom. W rezultacie Apache ogólnie zużywa więcej pamięci RAM i procesora niż nginx do podstawowej obsługi połączeń HTTP. Przegląd różnych podejść do obsługi połączeń można znaleźć na stronie C10K firmy Kegel .
Chciałbym zdecydowanie sugerują rozważenie podstawowej webapp w języku wyższego poziomu (Python, Ruby, czy może Scala), i używać messsage kolejka wysłać bilety pracy maszyn roboczych, które zajmują się zadaniami „Wydajność-Intensive” asynchronicznie.
nginx jest dobrym narzędziem równoważącym obciążenie; ale w tej przestrzeni jest wiele opcji .
Tak. Po prostu uruchom je na różnych numerach portów IP i / lub adresach IP.
źródło