Cache i microcache
Cache – mechanizmy cache’owania obiektów na stronach mają mnóstwo zalet. Większość elementów serwisów są to statyczne obiekty, np. pliki obrazków JPEG/PNG, pliki zawierające kod JavaScript, CSS itd. Używanie mechanizmów Cache w przypadku tych plików znacząco przyspiesza ładowanie strony. Dodatkowo można używać technik cache’owania dynamicznie generowanych elementów, te techniki nazywane są Microcache.
Metody cache’owania
Jest kilka metod cache’owania statycznych plików, do najpopularniejszych należą:
- cache lokalny – może być zrealizowany przez różne konfiguracje serwera, serwer HTTP również może wspierać cache przez dodatkowe moduły, sama aplikacja może budować swój własny cache. Należy zadbać o to by cache lokalny znajdował się na serwerze w pamięci serwera lub szybkim nośniku danych który jest w stanie obsłużyć dużą ilość I/O przy bardzo niskim czasie dostępu.
- CDN – Conetend Delivery Network. Dzięki CDN dane wystawiane są bliżej użytkownika, również jest możliwe osiągnięcie lepszego skalowania aplikacji, odciążenie infrastruktury i przeniesienie znacznej części ruchu od użytkowników do CDN.
- serwer cache – przed serwerami aplikacji można użyć servera cache, np. może to być moduł do load balancera, lub osobne oprogramowanie np. Varnish.
Większość analiz dotyczących cache skupia się na przyspieszeniu ładowania się strony. Jednak wszystkie formy cache mają dodatkowe plusy które trudniej jest zmierzyć, są to bardzo istotne rzeczy z punktu widzenia wydajności przy dużym ruchu, np. zwolnienie zasobów serwera w backend który z pełną wydajnością może serwować treści dynamiczne.
Idea uruchamiana skryptów PHP (lub innej technologii) na 1 serwerze zwracającym za każdym razem najświeższą treść dla użytkownika jest bardzo prostym rozwiązaniem ale w przypadku wzmożonego ruchu może doprowadzić problemów wydajnościowych.
Metoda Mikrocaching powoduje zapisanie w cache na krótki czas np. kilka sekund dynamicznie wygenerowany element strony. Ta forma cache w przypadku strony która ma dziesiątki lub setki wywołań na sekundę pozwala zmniejszyć obciążenie serwera (ponieważ strony ładowane są z cache) przy zachowaniu minimalnego wpływu na treści prezentowane na stronie.
Najszybszymi mechanizmami cache’owania są mechanizmy które wykorzystują dostęp do danych znajdujących się w pamięci serwera lub też szybkich dyskach SSD/NVMe, dlatego też bardzo istotnym parametrem w przypadku dobierania mechanizmów cache jest ilość pamięci RAM która może zostać użyta przez mechanizmy cache. Dość popularnym rozwiązaniem niezależnym od technologii, w której wykonane są strony może być oprogramowanie Varnish lub Squid.
Dobre praktyki dotyczące cache’owania
- Wiele aplikacji zawiera jakąś warstwę cache’owania, ale nie można założyć, że jeśli opcja „Włącz Cache” jest zaznaczona wówczas wszystko będzie działać sprawnie w przypadku dużego ruchu.
- Należy wykonać profesjonalne testy wydajności które wykażą rzeczywistą wydajność aplikacji/systemu/infrastruktury przy wzmożonym ruchu.
- Trzeba zwrócić szczególną uwagę na nagłówki HTTP, w nagłówkach z reguły jest informacja czy dane które otrzymaliśmy były serwowane z cache.
- Dobrym narzędziem w przypadku oprogramowania Varnish jest varnishstat, wskaże ono dokładnie jak efektywny jest cache.