Czy lakier jest dla Ciebie odpowiedni?
Lakier nie jest najważniejszym osiągnięciem Magento. Wspaniale kompensuje obciążenie botami i klientami witryn sklepowych - ale nie powinno to być pierwszym powodem, dla którego Twój sklep będzie szybszy.
W rzeczywistości wdrożenie Varnish powinno być ostatnią modyfikacją wydajności twojego sklepu. Umieść go tylko wtedy, gdy zobaczysz czasy ładowania strony Magento jest w stanie dostarczyć bez niego (np. Czasy ładowania strony <600 ms).
Twój sklep wciąż musi być szybki
Ponieważ Varnish nadal wymaga co najmniej jednego załadowania strony, aby przygotować pamięć podręczną, oznacza to, że wydajność w pamięci podręcznej nadal musi być bardzo dobra. Zdecydowana większość unikalnych adresów URL (warstwowe trafienia nawigacji, wyszukiwane hasła itp.) Nigdy tak naprawdę nie będą wyświetlane z Varnish, chyba że:
a) Twoje TTL są tak wysokie, że zapytanie z 4 dni temu jest nadal aktualne
b) Liczba odwiedzin na stronie jest tak duża, że adresy URL są zapełniane w bardzo krótkim czasie
Trzeba również wziąć pod uwagę, że nie każdy sklep nadaje się do lakieru . Każda witryna, która zachęca użytkowników do utworzenia osobistej sesji (np. Logowanie, dodawanie do koszyka itp.) Na wczesnym etapie podróży klienta, oznacza, że Varnish będzie ostatecznie zbędny.
Na przykład prywatne witryny z zakupami zachęcają do logowania użytkownika z poziomu zestawu, jednak w ten sposób oznacza, że Varnish nigdy tak naprawdę nie ma nietypowej zawartości, która może być buforowana. Twoje wskaźniki trafień będą drastycznie niskie i nie będzie żadnych korzyści z używania lakieru.
Świeża treść lub wyższy współczynnik trafień
Zdjęcie dzięki uprzejmości magestack.com
Efektywne używanie Varnish polega na znalezieniu równowagi między nieaktualnymi treściami a liczbą odwiedzających witrynę.
Jeśli masz zajętą stronę - istnieje prawdopodobieństwo, że uda Ci się uniknąć niższych TTL i nadal będziesz mieć wysoki współczynnik trafień Lakierem - a także nadal będziesz mieć niskie TTL - w ten sposób świeższą treść. Tak więc zmiany zapasów / cen są szybko odzwierciedlane, a pamięć podręczna jest stale uzupełniana na podstawie wielkości odwiedzin.
Jeśli masz witrynę o niskim natężeniu ruchu, musisz pójść na kompromis. Zwiększ swoje TTL, aby zapewnić wyższy współczynnik trafień - lub miej aktualną zawartość. Nie możesz mieć obu. Tak, możesz stale uruchamiać narzędzie do indeksowania / pająka - ale zasoby, które zużyłoby to, oraz sama objętość lub adresy URL, które można indeksować (zwykle w dziesiątkach tysięcy w przypadku małych sklepów) oznacza, że po prostu nie działa . Zwykle mniejsze sklepy skorzystałyby bardziej na dobrym rozszerzeniu FPC i wysoce zoptymalizowanej konfiguracji serwera.
Ale oczywiście mogę używać Varnish nawet po zalogowaniu się użytkowników, co z pamięcią podręczną na użytkownika lub ESI?
ESI
Pliki ESI to doskonałe narzędzie do przechowywania zawartości w pamięci podręcznej, a także do dynamicznych bloków na stronie. Ale aby być skutecznie wykorzystywanym, musisz zminimalizować liczbę wywołań zwrotnych do absolutnego minimum. Jest mały moduł head-start , którego możesz użyć jako podstawy tego procesu - po prostu upewnij się, że dokręciłeś w nim dziury bezpieczeństwa, ponieważ domyślnie jest bardzo niepewny - nie ma ograniczeń co do tego, jakie uchwyty układu możesz załadować / nie załadować
Za każdym razem, gdy ładuje się Magento, spada wydajność około 200 ms - zanim jeszcze załaduje kolekcję / renderuje blok itp. Więc jeśli masz więcej niż 3x ESI, istnieje prawdopodobieństwo, że skończyłeś wolniejsze ładowanie strony przy użyciu Varnish + ESI dla dynamicznej zawartości, niż tylko pomijanie Varnish i przekazywanie żądania bezpośrednio do samego Magento.
Aby naprawdę efektywnie korzystać z ESI, musisz być w stanie połączyć wiele żądań w jednym żądaniu.
Na przykład strona widoku kategorii zawierająca 20 produktów musi pokazywać dokładne poziomy zapasów. Więc używasz ESI dla każdego bloku na stronie. To byłoby 20-krotność zapotrzebowania na akcje ESI. Podczas gdy zapytania o zapasy są bardzo lekkie, jednoczesne uruchomienie 20x z nich zmiażdżyłoby wydajność. Zamiast tego możesz obsłużyć cały blok / kolekcję 20 produktów i po prostu otrzymać tę 1x prośbę. Ale i tak ładowanie i renderowanie kolekcji jest prawdopodobnie najwolniejszym elementem na stronie - więc niewiele zyskałeś.
Efektywne korzystanie z ESI wymaga odpowiedniego planowania i wykonania, w przeciwnym razie będziesz mieć wolniejszą stronę niż w ogóle nieużywanie Lakieru.
Pamięć podręczna na użytkownika
Następnie istnieje alternatywa użycia pamięci podręcznej specyficznej dla użytkownika. To zły pomysł, chyba że masz witrynę o bardzo niskim natężeniu ruchu. Twój współczynnik trafień będzie strasznie niski - szanse na odwiedzającego odwiedzającego tę samą stronę, na której już byli, są bardzo niskie. A dla każdego klienta ta strona o pojemności 6 KB będzie zajmować coraz więcej miejsca w pojemniku do przechowywania lakieru.
Na przykład, jeśli przydzielono 1 GB na lakier. W typowej witrynie, w której użytkownicy przeglądają 8 stron podczas wizyty, średnio 6 z nich będzie niepowtarzalnych. To 28 gości na 1 MB pamięci. Następnie weź pod uwagę swoje obrazy, CSS i JS - te (na szczęście) będą powszechne, ale prawdopodobnie nadal zajmą dobre 7-800 MB dostępnej pamięci. To pozostawia 200 MB wolnego miejsca, wystarczającą pamięć podręczną dla 5600 unikalnych użytkowników.
Nie obchodzi mnie to, chcę tylko Lakier
OK, musisz wykonać następujące czynności:
- Zainstaluj terminator SSL, aby usiąść przed Varnish (np. Stud / pound / nginx)
- Zainstaluj lakier na serwerze
- Upewnij się, że
X-Forwarded-For
poprawnie skonfigurowałeś
- Zainstaluj moduł lakieru w swoim sklepie
- Skonfiguruj VCL Varnish, aby wykluczyć rozszerzenia innych firm
Ponieważ pierwsze 3 punkty wykraczają poza zakres tej odpowiedzi, pozostawię to sobie. Punkt 4 to dziecinna zabawa, a punkt 5 - kontynuuj czytanie.
Najważniejsze w implementacji Varnish jest zapewnienie, że nigdy nie buforujesz treści, które nigdy nie powinny być buforowane.
Na przykład.
- Oddzwanianie do bramek płatności
- Przegląd koszyka
- Przegląd mojego konta klienta
- Kasa (i odpowiednie połączenia Ajax)
itp.
W przypadku podstawowych adresów URL Magento istnieje dość standardowa lista identyfikatorów URI, które można uciec w programie Varnish:
admin|checkout|customer|catalog/product_compare|wishlist|paypal
Ale musisz również wziąć pod uwagę wszelkie niestandardowe / zewnętrzne rozszerzenia, które również używasz, które mają niestandardowe trasy, routery i przestrzenie nazw. Niestety nie ma łatwego sposobu, aby dowiedzieć się, które adresy URL z tych rozszerzeń mogą, a których nie mogą być buforowane. Musisz więc oceniać każdy z osobna.
Z reguły za każdym razem, gdy konfigurujemy Varnish, zaczniemy od zidentyfikowania odpowiednich tras, routerów i przestrzeni nazw, które mogą oni zająć i stąd przejść. Robimy to za pośrednictwem SSH:
grep -Eiroh "<frontName>.*</frontName>" community | sed "s/<frontName>//gI;s#</frontName>##gI" | sort -u
grep -A10 -ir "<rewrite>" community | grep "<from>"
grep -A5 -ir "<routers>" community
grep -Eiroh "<frontName>.*</frontName>" local | sed "s/<frontName>//gI;s#</frontName>##gI" | sort -u
grep -A10 -ir "<rewrite>" local | grep "<from>"
grep -A5 -ir "<routers>" local
To nie da ci ostatecznej listy adresów URL - ale prawie na pewno da ci początek.
Nie możemy podkreślić, jak ważne jest, aby nigdy nie buforować treści, które nie powinny być buforowane. Rezultaty mogą być katastrofalne.
W podsumowaniu
Podobnie jak w przypadku każdej innej optymalizacji wydajności serwera Magento, poprawnie zaimplementowana i dostrojona może naprawdę przynieść korzyści. Ale samo wprowadzenie oprogramowania bez jego właściwej konfiguracji nie tylko sprawi, że Twój sklep nie będzie szybszy, ale potencjalnie wolniejszy, bardziej niepewny i mniej niezawodny.