Cache i microcache

Cache (pamięć podręczna) to technika używana w informatyce do przechowywania kopii danych w celu przyspieszenia dostępu do nich w przyszłości. Cache działa na zasadzie przechowywania najczęściej używanych danych w szybszym, ale zazwyczaj mniej pojemnym medium pamięci, co pozwala na szybszy dostęp do nich niż w przypadku pierwotnego źródła danych, które mogą być przechowywane w wolniejszych pamięciach lub na dysku.

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.

Istnieje kilka rodzajów cache w informatyce, z których każdy jest zoptymalizowany pod kątem konkretnych zastosowań:

  1. Cache procesora: Współczesne procesory posiadają kilka poziomów cache, które przechowują kopie danych i instrukcji, na których najczęściej operuje procesor. Dzięki temu procesor może szybko uzyskać dostęp do tych danych, co przyspiesza wykonywanie operacji.
  2. Cache pamięci operacyjnej (RAM): Systemy operacyjne również mogą korzystać z cache w pamięci RAM, aby przechowywać kopie najczęściej używanych danych lub bloków pamięci. To pozwala na szybszy dostęp do tych danych przez programy.
  3. Cache dysku: Dyski twarde i inne urządzenia pamięci masowej mogą także korzystać z cache, aby przechowywać kopie często używanych danych. Dzięki temu odczyty i zapisy mogą być przyspieszone, gdy dane znajdują się już w pamięci podręcznej.
  4. Cache przeglądarki internetowej: Przeglądarki internetowe często używają cache, aby przechowywać lokalne kopie stron internetowych, obrazów i innych zasobów. Dzięki temu strony wczytują się szybciej, ponieważ przeglądarka nie musi pobierać wszystkich danych za każdym razem, gdy użytkownik odwiedza tę samą stronę.

Cache jest niezwykle ważnym elementem w optymalizacji wydajności systemów informatycznych, ponieważ umożliwia szybszy dostęp do danych, zmniejsza obciążenie systemu i poprawia ogólną reaktywność aplikacji i interfejsów użytkownika.

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 – Content 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ć serwera 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.