Obecnie pracujemy z wymogiem, że pierwsza odpowiedź z serwera WWW musi przyjść w Wielkiej Brytanii poniżej 200 ms. Obecnie pod 2 dedykowanymi serwerami WWW z modułem równoważenia obciążenia i 1 serwerem db, wchodzimy na 800ms.
W tej chwili strona ma mniej niż 5 klientów, 2 produkty, 4 kategorie, w tej chwili nie ma frontu witryny, jest stylowa i bez obrazów.
Jest także uruchamiany na nginx z Varnish.
Czy ktoś może mi udzielić porady na temat konfiguracji serwera WWW? Dlaczego nasz przybywa powoli? Co możesz polecić, aby to zoptymalizować? Musisz uzyskać 400% szybciej!
configuration
performance
lukefowell
źródło
źródło
Odpowiedzi:
Ugryzę.
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).
Ź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.)
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.
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:
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”
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:
Jaki jest dokładnie twój cel?
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:
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.
źródło
Jesteś na dobrej drodze z tą konfiguracją klastra. Polecam dodanie dedykowanego hosta pamięci podręcznej dla Redis; wybierz jeden z wysoką mocą procesora i dużą ilością pamięci RAM (~ 64 GB).
Oto pełna lista konfiguracji, których użyłem dla wysoce dostępnego, odpornego na awarie, rozproszonego i zbalansowanego klastra LEMP. Obejmuje ona
app/etc/local.xml
, wcore_config_data
tabeli i konfiguracje dla MySQL, PHP-FPM, nginx i Redis. Wszystkie działają w systemie Ubuntu 12.04 LTS 64-bit. Konfiguracje zawierają wiele optymalizacji bez wad.Najważniejsze
Ruch w sierpniu 2013 r .:
Hosty internetowe
Za redundantnymi, wysoce dostępnymi zaporami sprzętowymi i równoważącymi obciążenie sprzętem znajduje się 10 hostów. Większość zasobów statycznych jest odciążonych do CDN.
Moduły
Hosty pamięci podręcznej
Istnieją dwa hosty z systemem Redis w konfiguracji master-slave z automatycznym przełączaniem awaryjnym. Trzy instancje Redis (sesje, backend i FPC) są używane do zwiększenia przepustowości i zapewnienia dostrajania zachowań trwałości.
Hosty baz danych
Istnieją dwa hosty z systemem MySQL 5.6.11 w konfiguracji master-slave z ciepłym przełączaniem awaryjnym.
źródło
Innym musi być wskazówka serwera dla Magento instalującego PHP 5.4 lub 5.5 z OPcache . PHP 5.4 jest znacznie szybszy niż 5.3 ( http://www.eschrade.com/page/magento-performance-on-php-5-3-5-4-and-5-5rc3/ ).
źródło
Chcę dodać kolejną ważną wskazówkę, która poprawiła szybkość strony Magento, gdy nie jest buforowana przez lakier i nie jest domyślnie włączona (czas ładowania strony koszyka zmieniono z 6sc na 1,5sc).
Aktywuj pamięć podręczną zapytań mysql w /etc/mysql/my.conf
włącz typ bufora, rozmiar bufora to wartość używana przez bufor w pamięci, a limit bufora to maksymalny rozmiar wyniku zapytania do bufora
źródło
Przy obecnej konfiguracji otrzymujemy wstępną odpowiedź w 400 ms, a dokument ukończony w 2 sekundy (przy standardowym połączeniu 5 Mb / s). Nasz rozmiar strony głównej to 1 MB.
Nasza konfiguracja oparta jest na AWS w następujący sposób: Mamy instancję ec2 z modułem równoważenia obciążenia podłączonym do bazy danych RDS (z przełączaniem awaryjnym). Wdrożyliśmy również pełną pamięć podręczną strony z zapleczem pamięci podręcznej redis dla pamięci podręcznej i pamięci sesji.
Średnio mamy 300 - 400 odwiedzających dziennie, ale z włączonym buforowaniem redis mieliśmy minimalne zużycie zasobów ec2 przy jednoczesnym zachowaniu szybkości i obniżeniu kosztów.
Powodem, dla którego mamy moduł równoważenia obciążenia, jest to, że ec2 jest skonfigurowany tak, aby automatycznie uruchamiał nową instancję, jeśli w rzadkich przypadkach mamy gwałtowne skoki ruchu, których bieżąca konfiguracja nie jest w stanie obsłużyć.
źródło