Varnish Cache – czym jest, jak działa i jakie ma zalety?
Jeśli strona internetowa ma konwertować i przynosić zyski, nie może kazać potencjalnym klientom czekać długich sekund, gdy będą przeklikiwać się między kolejnymi produktami. Optymalizacja techniczna jest kluczowa… i dlatego warto lepiej poznać Varnish. W poniższym tekście opowiemy o zaletach tego narzędzia i o tym, jak je wdrożyć.

Cachowanie strony – na czym polega?
Cachowanie strony – na czym polega?
Zanim przejdziemy do omówienia samego Varnisha, wytłumaczmy sobie, czym jest cachowanie, czyli powiązany proces. Caching jest jednym z filarów optymalizacji wydajności stron internetowych. Określa zestaw technik, które sprawiają, że strona ładuje się szybciej.
Samo cachowanie jest procesem, który polega na przechowywaniu danych w tymczasowej jednostce pamięci masowej. Jest kilka form stosowania tej techniki:
- page cache – odbywa się na serwerze i przechowuje cały HTML strony;
- browser cache – także przechowuje HTML strony, ale występuje w przeglądarce;
- object cache – przechowuje zapytania do bazy danych.
Istnieje także inny rozbudowany typ cachowania, czyli reverse proxy cache. Proxy to inaczej serwer znajdujący się między internetem a użytkownikiem. Jego celem jest filtrowanie zapytań skierowanych przez użytkownika do konkretnej strony. W standardowej wersji (czyli forward proxy) struktura wygląda następująco:
Klient > Forward Proxy > Internet > Serwer przesyłający pliki
W ten sposób przedsiębiorstwo może np. blokować dostęp pracowników z komputerów firmowych do wybranych stron. W przypadku reverse proxy struktura prezentuje się tak:
Klient > Internet > Proxy > Serwery przesyłające pliki
Reverse proxy jest punktem wejścia wszystkich zapytań kierowanych na stronę internetową firmy, a jego zadanie polega na filtrowaniu tych zapytań, zanim dotrą one na stronę.
Czym jest Varnish?
Czym jest Varnish?
Varnish to narzędzie, które wykorzystuje mechanizm reverse proxy do filtrowania zapytań i cache’owania odpowiedzi z serwera. Nie jest to, oczywiście, fizyczny serwer, a zwykły program (akcelerator) instalowany na serwerze.
Działa on jako „nakładka”, przez którą przechodzą wszystkie zapytania ze strony klienta. Jeśli dane żądanie nigdy wcześniej nie było przetwarzane przez serwer, Varnish, jako proxy, przekierowuje je do serwera w celu uzyskania odpowiedzi i – co najważniejsze – zapisuje ją w swojej pamięci podręcznej. Gdy klient wyśle kiedyś identyczne żądanie, Varnish prześle kopię odpowiedzi bezpośrednio z pamięci podręcznej, przyspieszając całą wymianę danych.
Warto zaznaczyć, że Varnish obsługuje tylko i wyłącznie żądania HTTP. Z tym jednym zadaniem radzi sobie jednak doskonale, dlatego jest tak chętnie wykorzystywany przez serwisy wysyłające każdego dnia ogromne ilości danych. I tu ciekawostka: twórcami projektu byli informatycy pracujący dla… największego norweskiego tabloidu, VG. Ma to sens; portale informacyjne są świetnym przykładem witryn content-heavy, które na akceleratorach reverse proxy mogą zyskać najwięcej.
Varnish jest programem open-source’owym, chociaż ma też swoją wersję komercyjną, wspieraną przez Varnish Software.
Zalety implementacji Varnish Cache na stronie internetowej
Zalety implementacji Varnish Cache na stronie internetowej
Wdrożenie reverse proxy jest dobrym pomysłem, jeśli:
- znaczną część treści na stronie stanowią pliki multimedialne – grafiki, zdjęcia, filmy czy animacje. To one są największym obciążeniem dla serwera… i potrafią znacznie wydłużyć czasy ładowania nawet przy umiarkowanym natężeniu ruchu na stronie;
- witryna często mierzy się ze skokowymi wzrostami natężenia ruchu – jeśli prowadzisz e-commerce, to może być spory problem przy okazji większych promocji.
Oto inne korzyści z zastosowania Varnish Cache:
Przyspieszenie działania strony
Użytkownik dociera do serwera Varnish tuż przed przekierowaniem żądania do głównego serwera WWW. Jeśli wersja podręczna żądania jest dostępna, wystarczy kilka milisekund, aby dostarczyć stronę do użytkownika. Czas odpowiedzi zależy od sprzętu, ale wczytanie przygotowanej odpowiedzi z pamięci operacyjnej jest o wiele szybsze niż przetwarzanie wszystkiego na dysku przez serwer WWW.
Zabezpieczenie w przypadku skoków ruchu
Załóżmy, że na stronie dojdzie do dużego natężenia ruchu. Dzięki Varnishowi cachowanie pozwoli na znacznie szybsze zwracanie odpowiedzi na zapytania, niż gdyby wszystkie z nich były przetwarzane zawsze od początku.
Lepsze User Experience i SEO
Wyobraź sobie, że odwiedzasz stronę internetową, która ładuje się już kilka sekund, a Ty ciągle widzisz przed sobą biały ekran. Zapewne wrócisz do wyszukiwarki, aby wybrać inną, podobną witrynę, która załaduje się szybciej. Pamiętaj, że krótki czas ładowania strony obniża współczynnik odrzuceń. Oba te czynniki mają duże znaczenie z punktu widzenia pozycjonowania.
Wzrost konwersji
Dzięki Varnishowi Twój współczynnik konwersji może poszybować w górę. Dzieje się tak, ponieważ wartość ta zależy od pozycjonowania witryny, szybkości ładowania oraz user experience. Jak już omówiliśmy wcześniej, cachowanie z wykorzystaniem tej technologii pozytywnie wpływa właśnie na te czynniki.
Dodatkowa warstwa bezpieczeństwa (reverse proxy)
Reverse proxy w każdej postaci stanowi dodatkową warstwę ochronną między Twoim serwerem a klientem. Varnisha można skonfigurować w taki sposób, aby automatycznie odrzucał podejrzane zapytania czy „hamował” ataki DDoS.
Szybsze dostarczanie statycznych zasobów
Cachowanie odciąża serwer przede wszystkim z konieczności przetwarzania zasobów statycznych (m.in. plików CSS/JavaScript). Czyli tych, które bez pomocy Varnisha serwer musiałby wysyłać przy praktycznie każdym zapytaniu, tak aby np. przeglądarka mogła prawidłowo wyświetlić interfejs strony. Z Varnishem pliki te są udostępniane prosto z pamięci podręcznej, bez angażowania w to całego back-endu.
Możliwość buforowania treści dynamicznych
Varnish radzi sobie nieźle również z treściami dynamicznymi. Jeśli strona łączy elementy statyczne i dynamiczne, proxy korzysta z mechanizmu Edge Site Includes (ESI), dzięki któremu jest w stanie „zszyć” ze sobą cachowane treści statyczne i zasoby dynamiczne, generowane na bieżąco, przed wysyłką do klienta. A gdy któryś z zasobów dynamicznych nie może być w danej chwili wygenerowany przez serwer – Varnish wyświetli jego nieco starszą, ale dalej funkcjonalną wersję (to tzw. Grace Mode).
Zmniejszenie TTFB (Time To First Byte)
Time To First Byte określa czas między wysłaniem zapytania a odebraniem przez klienta pierwszego pliku – czyli rozpoczęciem ładowania. Dzięki Varnishowi podstawowe pliki statyczne powinny dotrzeć do klienta niemal od razu, przez co przeglądarka szybciej będzie mogła zabrać się za ładowanie witryny. Użytkownik, który widzi „na żywo”, jak witryna się ładuje, będzie bardziej skłonny poczekać na nią chwilę dłużej, niż gdyby na ekranie widział jedynie białą, pustą stronę.
Odciążenie głównego serwera
Cachowanie z reverse proxy znacząco odciąża główny serwer strony. A to z kolei zmniejsza ryzyko, że cała strona „zgaśnie” przy nagłym skoku natężenia ruchu albo przy problemach z wydajnością po stronie dostawcy hostingu.
Elastyczne opcje konfiguracji cache'owania
Dużą zaletą Varnisha jest też to, że oddaje w ręce administratora wiele opcji konfiguracji pod kątem tego, które konkretnie elementy strony mają być buforowane, a które nie; jak proxy ma reagować na określone typy żądań, a nawet jak długo treści mają być przechowywane w pamięci podręcznej.
Dostęp do metryk i logów w czasie rzeczywistym
Dzięki opcji integracji Varnisha z Ops Agent od Google można dość łatwo śledzić to, jakie pliki trafiają do pamięci podręcznej i kiedy je opuszczają, albo monitorować połączenia proxy z back-endem.

Wady Varnish Cache
Wady Varnish Cache
Jeśli chodzi o wady, Varnish nie ma ich wiele, ale dobrze je mieć na uwadze:
- narzędzie działa jedynie na serwerach z Unixem lub systemami opartymi na nim; odpada więc np. Windows Server;
- pamięć podręczna nie zawsze jest aktualizowana w czasie rzeczywistym;
- w wersji open-source’owej Varnish nie obsługuje biblioteki SSL, więc nie jest w stanie przetwarzać zapytań HTTPS.
Funkcje Varnish: Standard vs Enterprise
Funkcje Varnish: Standard vs Enterprise
Wersji komercyjna Varnisha jest o wiele bogatsza w funkcje od tej darmowej, otwartej. Wszystkie podstawowe narzędzia znajdziesz oczywiście w obu, ale Varnish Enterprise dodaje do nich między innymi:
- Massive Storage Engine – silnik, który optymalizuje cachowanie danych na dysku, zwiększając jego pojemność;
- Varnish Custom Statistics – wbudowany silnik, który w czasie rzeczywistym zbiera dane o ruchu na stronie, zapytaniach do serwera oraz buforowanych plikach;
- możliwość deszyfrowania komunikatów SSL/TLS, co otwiera drogę do obsługi żądań HTTPS;
- opcję łączenia się z back-endem za pośrednictwem szyfrowanego protokołu TLS/SSL;
- obsługę Edge Side Includes w trybie równoległym – potrzebne treści dynamiczne Varnish Enterprise wywołuje z serwera „na raz”, a nie jeden po drugim, jak to jest w przypadku darmowej wersji.
Konfiguracja Varnish Cache
Konfiguracja Varnish Cache
Przy okazji omawiania zalet Varnisha wspomnieliśmy o tym, jak elastyczne jest to narzędzie. To jednak sprawia, że zanim pozwolisz swojemu reverse proxy działać na pełnych obrotach, trzeba ręcznie skonfigurować kilka rzeczy. Dwie najważniejsze kwestie, którymi należy się zająć, to:
- Zdefiniowanie dostępnej pamięci podręcznej (Cache Size).
- Określenie czasu, przez jaki Varnish będzie przechowywał każdy element w pamięci (Time to Live – TTL) – domyślnie są to dwie minuty, ale warto dostosować tę wartość do tego, jak często zmienia się content na stronie i jaki ruch obsługuje serwer.
Oprócz tego możesz zastanowić się, czy nie warto zablokować Varnishowi możliwość buforowania niektórych treści (np. tych, które nie są dostępne dla zwykłego użytkownika) oraz określić, jak proxy ma traktować cookies. W domyślnej konfiguracji Varnish nie podejmuje się buforowania stron z „ciasteczkami”, zakładając, że są one dynamiczne (więc ich cachowanie nie ma dużego sensu). Ale cookies zbierają też strony statyczne – w ich przypadku zdecydowanie warto zmienić to ustawienie. Sporo wskazówek co do konfiguracji Varnisha znajdziesz na oficjalnym portalu Varnish Software dla developerów.