Ugryzę.
Ta pierwsza odpowiedź z serwera internetowego musi przyjść w Wielkiej Brytanii poniżej 200 ms.
W tej chwili nie ma interfejsu użytkownika, jest on stylowy i wolny od obrazów.
Nie osiągniesz tych liczb bez pomocy Lakieru lub FPC (lub obu). Z pewnością miałbym nadzieję, że postać nie musi także zawierać treści statycznych (ilekroć zdecydujesz się ją dodać) - ponieważ jest to prawie niemożliwe do osiągnięcia (poza tym, że nie ma prawie żadnych obrazów / js / css).
Wchodzimy o 800ms.
Jest również uruchamiany na Nginx z Varnish
Źle skonfigurowano Lakier.
Prawidłowo skonfigurowana instalacja Varnish zapewni czasy ładowania strony <100 ms (bliżej <10 ms).
W rzeczywistości dla Magento powinieneś spodziewać się czegoś takiego,
Gdy klient nie jest zalogowany ...
Tj. Brak utworzenia unikalnej sesji (dodawanie do koszyka / listy życzeń, logowanie itp.)
--1.2s--------0.8s-----------------0.6s----------------0.1s--------------0.08s----
Uncached Mage default cache Partial FPC cache Total FPC cache Varnish
Gdy klient jest zalogowany ...
Tj. Po utworzeniu unikalnej sesji (zalogowany, przedmioty w koszyku itp.). W tym momencie Lakier prawdopodobnie będzie wyłączony. A jeśli zdecydujesz się na użycie ESI - w zależności od wywołań odwrotnych, może on utrzymywać podobny czas ładowania strony jak pamięć podręczna FPC (z powodu narzutu ładowania początkowego) - lub faktycznie wydłużyć czas ładowania strony poza buforowaniem.
--1.4s--------0.8s-----------------0.6s--------------
Uncached Mage default cache Total FPC cache
To nie jest przypadek strojenia Lakieru - to przypadek - „w rzeczywistości niczego nie buforujesz” .
Idealne pliki konfiguracyjne serwera Magento
Nie ma jednego, cóż, niezupełnie.
Obsługujemy ponad 400 serwerów, wszystkie sklepy wyłącznie Magento - o różnych rozmiarach i pojemności. I rzadko zdarza się, że pliki konfiguracyjne, które mamy na jednym - pasują do innego. Jest tak, ponieważ nie wszystkie firmy są do siebie podobne.
Wąskie gardła mogą powstawać z wielu różnych powodów:
- Duża liczba współbieżności użytkowników z aktywnymi sesjami
- Ofiary „złych” botów pełzających, generujących niezbędne, nieocenione obciążenie
- Wysoki odsetek warstwowych trafień nawigacyjnych
- Duża liczba zapytań wyszukiwania
- Duża ilość transakcji na godzinę
- Źle zbudowany szablon
- Zbyt wiele / powolnych / nieporęcznych rozszerzeń innych firm
- Nieaktualne linki przychodzące prowadzące do wysokiego odsetka 404 trafień
- Limit pojemności interfejsu sieciowego
- Duży / złożony katalog (wiele produktów / kategorii / atrybutów)
Tak więc w przypadku sklepów w całym tym spektrum każdy z nich ma inne podejście do bardziej optymalnej wydajności.
Aby rozwiązać problemy opisane powyżej; celowo unikniemy po prostu stwierdzenia „więcej / lepszy sprzęt”
- Użyj FPC wykraczającego poza Lakier
- Odfiltruj / zablokuj złe boty na brzegu sieci - lub przekieruj wszystkie żądania do Varnish bez względu na stan / adres URL pliku cookie
- Zmień nawigację warstwową na SOLR, uzależnij filtry nawigacji warstwowej
- Zmień wyszukiwanie towaru na SOLR
- Rozłóż obciążenie MySQL w konfiguracji Master / Slave - rób to tylko wtedy, gdy masz zagwarantowane, że obciążenie przeglądania zostanie przejęte przez Varnish / FPC
- Ponownie skompiluj szablon
- Rozbierz je
- Ciągłe monitorowanie dzienników dostępu i przepisywanie adresów URL w Nginx / Varnish przed dostawą. Jeśli robisz to na poziomie Nginx - upewnij się, że Lakier buforuje przekierowania 301/302.
- Podziel zawartość statyczną na CDN lub popraw łączność
- Dodaj więcej sprzętu (w pewnym momencie musieliśmy to powiedzieć)
Mając to na uwadze - zobaczysz, że prawdopodobnie nie będzie pliku konfiguracyjnego Nginx, pliku konfiguracyjnego puli PHP fcgi, pliku konfiguracyjnego MySQL lub pliku konfiguracyjnego Varnish, które będą takie same. Połącz to ze zmianami sprzętu; dostępna pamięć, wydajność I / O (HDD i sieć) oraz procesor - zauważysz, że istnieją subtelne wariacje, które prowadzą do pożądanego wzrostu wydajności o 400% - ale nie ma jednej szybkiej odpowiedzi, którą łatwo znajdziesz w Internecie.
Możesz skopiować i wkleić sponsorowaną przez Peer 1 białą księgę Magento na temat wydajności (nie zalecamy jej); mam nadzieję, że ustawienia nie przekroczą dostępnej pamięci, limitów wątków, stanów TCP / IP, pojemności I / O i doprowadzą do mniejszej wydajności niż waniliowa konfiguracja Apache / mod_php.
Więc kontynuujmy.
Idealny stos serwerów Magento
Jest to bardziej prawdopodobne, że zbliżysz się do rzeczywistości. Dobrym przykładem na zademonstrowanie tego jest pokazanie, jak skonfigurowany jest dedykowany system Magento, MageStack
Weź oddzielne podskładniki, a otrzymasz listę najbardziej optymalnego / krytycznego oprogramowania, jeśli zostanie odpowiednio skonfigurowane , do prowadzenia sklepu Magento. Szczególnie:
Zapora ogniowa, filtr DOS, moduł równoważenia obciążenia, lakier, Nginx, PHP, Redis, Memcached, MySQL
Więc kiedy zapytasz:
Jaka jest najlepsza konfiguracja serwera Magento?
Jaki jest dokładnie twój cel?
- Duża dostępność
- Niezawodność
- Prostota administracji
- Występ
- Skalowalność
Dość wykładów, jak byśmy to zrobili
Aby częściowo odzwierciedlić odpowiedź podaną w przypadku błędu serwera w podobny sposób. Masz do dyspozycji 3 serwery - więc najpierw zorientuj je tak optymalnie, jak to możliwe. Unikniemy wysoce dostępnego rozwiązania, ponieważ wykracza to daleko poza zakres tej odpowiedzi.
Podskładniki wymagane do konfiguracji z wieloma serwerami to:
- Zapora ogniowa
- Moduł równoważenia obciążenia
- Serwer internetowy
- Serwer MySQL
- Wspólne przechowywanie
Więc będziemy wielofunkcyjność niektórych systemów. Zgodność z PCI-DSS określa rolę każdego serwera. Zatem z 5 rolami i 3 serwerami - natychmiast naruszysz. MageStack rozwiązuje ten problem za pomocą wirtualizacji - możesz zrobić to samo.
Serwer 1: Load Balancer + serwer WWW
Serwer 2: serwer WWW
Serwer 3: serwer bazy danych
Bez opóźnień i znacznej przepustowości sieci (> 1 Gb / s, <125µs), zamiast wspólnego magazynu - lepiej jest przechowywać katalog główny sklepu na każdym komputerze i replikować dane w czasie rzeczywistym ionotify
lub za pomocą cron
praca. Ponownie unikniemy sieciowych systemów plików, takich jak NFS, lub replikowanych urządzeń blokowych, takich jak Gluster lub DRBD - ponieważ wymagane jest szerokie dostrojenie i przyzwoita przepustowość sieci.
Lakier musi siedzieć jak najbliżej przodu. Ale Varnish nie może odszyfrować SSL. Więc połącz to z terminatorem SSL; Nginx, Funt, Stunnel, Stud itp. Wbudowany moduł równoważenia obciążenia w Varnish nie jest świetny - ale byłby odpowiedni dla konfiguracji 2 serwerów.
Nginx + PHP-FPM jest w porządku, ale nie pij za dużo pomocy kool Nginx. Będzie działał prawie identycznie jak tradycyjna konfiguracja Apache / mod_php, oto kilka dobrych lektur na temat tego, dlaczego nie używać Nginx . Nginx jest dobry, bardzo dobry, ale z pewnością nie jest wąskim gardłem sklepu Magento - i biorąc pod uwagę jego złożoność i brak natywnej obsługi Magento. Większość początkujących administratorów systemu skorzystałoby na korzystaniu z Apache / mod_php nad czymkolwiek innym. Może to wydawać się archaiczną rekomendacją w stosunku do korzystania z PHP-FPM - ale nasze testy wydajności wykazały, że wydajność jest tylko ~ 7% szybsza w przypadku rozwiązania Nginx - przy odpowiedniej konfiguracji. Strojenie i doświadczenie wymagane do uzyskania wysokiej wydajności, niezawodnej konfiguracji Nginx / PHP-FPM jest dość duże, aby uzyskać lepsze wyniki niż Apache / mod_php. Niezależnie od tego, co wybierzesz, jest to połączenie.
Serwer bazy danych jest prosty, MySQL. Ale jak wspomniano wcześniej, jeśli masz witrynę o wysokiej konwersji, zaleca się konfigurację Master / Slave. To, czy należy zastosować to podejście, można ustalić, czytając ten artykuł .
Następnie twoje zewnętrzne pamięci podręczne, Memcached i Redis. W mniejszych sklepach przechowywanie sesji w jednej instancji Memcache, a szybkiej pamięci podręcznej backend w innej, zapewni dobre wyniki. Nie zalecamy przechowywania tagów pamięci podręcznej w wolnym backendie - powoduje to więcej problemów niż daje. Tak więc w przypadku konfiguracji Memcached będziesz musiał utracić oznaczanie pamięci podręcznej . Zamiast tego używamy konfiguracji jak ten .
Redis nie pochodzi z Magento, ale z rozszerzeniem Colin Mollenhour - jest to lepsze rozwiązanie niż Memcache, obsługuje tagi pamięci podręcznej, pamięć sesji, a nawet trwałe pamięć podręczną - nie jest tak niestabilna jak Memcache . Ale ma to swoje wady. W dużych sklepach produkcyjnych (> 500 zamówień na godzinę,> 30 000 unikalnych na godzinę) odkryliśmy, że pamięć podręczna (i tagi) mogą się bardzo szybko zapełnić, a po osiągnięciu punktu nasycenia mechanizm LRU nieco zawodzi ( pomimo różnych ustawień) i powoduje ogromne natychmiastowe wąskie gardło. Dlatego rozsądne jest ręczne przycinanie starych rekordów.
Więc do jakiego sprzętu należy użyć?
Serwery sieciowe: najszybszy procesor, większość rdzeni procesora, stosunek 2 GB pamięci RAM / rdzeń
Serwer DB: szybki procesor, najszybsze we / wy dysku, większość pamięci RAM
Dlatego przy wielokrotnym celowaniu 3 maszyn najlepszym układem byłoby:
Serwer 1: Terminator SSL -> Lakier -> Nginx / Apache> PHP
Serwer 2: Nginx / Apache> PHP, Redis, (MySQL Slave)
Serwer 3: MySQL
Co do konkretnej konfiguracji każdej aplikacji. Wszystko zależy od specyfikacji sprzętu, złożoności sklepu, typu i charakteru odwiedzających oraz liczby odwiedzających.