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
![MageStack - system operacyjny Magento](https://i.stack.imgur.com/5alWU.png)
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.