CityHost.UA
Pomoc i wsparcie

Usługi cache'owania dla stron: Memcached, OPCache, Redis

 10922
18.10.2021
article

 

 

Czym jest buforowanie danych?

Buforowanie stron internetowych — jeden ze sposobów przyspieszania pracy serwera poprzez zmniejszenie obciążenia mocy obliczeniowych. 

Główna różnica między pamięciami podręcznymi polega na tym, że są one znacznie szybsze niż główna pamięć, dane są pobierane z nich i przetwarzane natychmiast.

Jak to działa? Kiedy użytkownik otwiera stronę internetową, wysyła zapytanie do serwera, które jest przetwarzane i zwracana jest odpowiedź w postaci skompilowanej strony. 

Co minutę tysiące odwiedzających wykonują działania na zasobach internetowych, a wszystkie te procesy są przetwarzane na serwerze, tworząc stałe obciążenie. 

Jeśli procesor nie jest w stanie szybko przetwarzać wszystkich zadań, może to prowadzić do spowolnienia ładowania stron. To szkodzi odwiedzalności (nie czekając na szybki odzew, użytkownik po prostu zamyka kartę) i pogarsza pozycje w wyszukiwarce (szybkość — jedna z kluczowych metryk przy rankingowaniu stron).

Aby nie wykonywać za każdym razem tych samych operacji, powtarzające się działania są zapisywane w plikach tymczasowych w pamięci podręcznej. Dostęp do niej jest prostszy i szybszy, nie trzeba za każdym razem tworzyć zapytania do danych znajdujących się na głównych dyskach.

Na przykład, już przeglądane obrazy są zapisywane w pamięci podręcznej przeglądarki użytkownika. Kiedy wchodzi na stronę po raz drugi, nie jest już wysyłane zapytanie do serwera, a obraz jest po prostu pobierany z pamięci komputera. 

Wprowadzając nazwę domeny ulubionej strony w pasku adresu i otrzymując gotową stronę, większość użytkowników nawet nie podejrzewa, że część tej strony (a może i cała) jest już zapisana na ich komputerze. 

Interesujące jest to, że nasz mózg również wykorzystuje buforowanie. Spotykając się po raz pierwszy z obiektem (jabłko, dom, kot), poświęca czas i zasoby na jego badanie i formowanie bloku informacji (właściwości, przeznaczenie, niebezpieczne/bezpieczne). Przy kolejnych spotkaniach, widząc obiekt, nie musimy ponownie przetwarzać wszystkich dostępnych danych na jego temat. Z pamięci podręcznej pobierany jest gotowy skompilowany obraz, a my w ułamku sekundy przywracamy wszystkie wcześniej uzyskane informacje. W ten sposób mózg oszczędza dużo czasu i wysiłku, tworząc trwałe scenariusze (skrypty), a główny procesor jest odciążany do bardziej złożonych i nowych zadań. 

Sposoby buforowania danych

Istnieją różne sposoby buforowania, które zależą od tego, co i jak dokładnie jest buforowane, gdzie przechowywane są wyniki. 

Buforowanie w przeglądarce (po stronie klienta)

  • obrazów i plików, 
  • protokół https, 
  • stron internetowych (w całości lub ich fragmentów).

Buforowanie na serwerze

  • kod PHP, 
  • zapytania do bazy danych i odpowiedzi serwera.

Bufor jako metoda pracy z danymi istnieje od lat 60. XX wieku, dlatego nie wszystkie znane metody są aktualne. Istnieje wiele przestarzałych — niektóre odeszły w niepamięć, inne są nadal używane. 

Usługi do buforowania na serwerze

Dziś opowiemy o trzech nowoczesnych i skutecznych metodach buforowania na serwerze — OPCache, Memcached i Redis.

OPCache

OPCache został zaprojektowany specjalnie dla PHP. Aby zrozumieć, jak działa, najpierw przyjrzyjmy się procesowi pracy skryptów PHP z zapytaniami klientów. System szuka plików, otwiera je, kompiluje odpowiedź i zwraca użytkownikowi. W procesie tworzone są opkody (skompilowane skrypty), które po wykonaniu są natychmiast niszczone. 

OPCache pozwala na przechowywanie tych skryptów w pamięci, dzięki czemu praca strony przyspiesza kilkakrotnie. Sam proces tworzenia opkodów jest dość zasobożerny, dlatego przechowywanie skryptów w pamięci podręcznej pozwala znacznie odciążyć serwer. 

Memcached

Memcached — to oprogramowanie działające na podstawie tabel haszujących. Usługa ma otwarty kod źródłowy, wspiera wszystkie główne języki programowania. Technologia pozwala na przechowywanie informacji w formacie "klucz-wartość" i jest głównie używana do buforowania sesji, ale można w ten sposób przechowywać także inne dane — na przykład małe fragmenty kodu HTML strony. 

Buforowanie wygląda tak: najpierw zapytanie klienta trafia do pamięci Memcached i tam szuka gotowej kompilacji. Jeśli jej nie ma — wtedy zapytanie jest przekazywane do serwera, strona jest tworzona, wynik jest wysyłany do użytkownika i natychmiast zapisywany w pamięci operacyjnej za pomocą usługi Memcached. Przy kolejnych podobnych sesjach wynik będzie od razu podawany z pamięci podręcznej, proces nie będzie obciążał głównych dysków. Dzięki temu czas reakcji skraca się do milisekund, wielokrotnie odciążając moce serwerowe. To sprzyja szybkiemu ładowaniu stron.

Jedną z cech Memcached — jest to, że zajmuje bardzo mało miejsca i zużywa minimalne zasoby. Nie ma w nim typów danych, a tylko ciągi z kluczami. Dzięki temu Memcached oszczędza pamięć.

Usługa przechowuje dane tylko w pamięci operacyjnej i nie zapisuje ich przy ponownym uruchomieniu systemu. Jeśli pamięci jest za mało, zaczyna nadpisywać nowe dane na starych. 

Memcached jest wielowątkowy i dobrze skaluje się pionowo poprzez zwiększanie pamięci i liczby rdzeni. Taki sposób ma ograniczenia, ponieważ realizowany jest w ramach jednego serwera i ma sufit. 

Redis

Redis — to system zarządzania bazami danych, działający na podobnej zasadzie jak Memcached i również działa na metodzie "klucz-wartość", oba zasoby będą odpowiednie dla stron, które mają wiele zapytań do bazy danych. Ale ma znacznie szerszą funkcjonalność, dlatego usługa jest używana  nie tylko do buforowania. 

Co potrafi Redis:

  • Buforuje sesje  użytkowników, dane pośrednie, fragmenty stron HTML;

  • Wygładza blokady sesji w PHP, aby strona ładowała się równomiernie dla wszystkich użytkowników, a nie po kolei;

  • Używany jako SGBD dla małych platform;

  • Działa jako broker wiadomości;

  • Buforuje kod PHP.

Jeśli chodzi o różnice między Memcached a Redis, to Redis ma typy danych; nie tylko przechowuje informacje w pamięci operacyjnej, ale także okresowo wysyła je na dysk. 

Redis jest jednowątkowy i dobrze skaluje się poziomo, poprzez dołączanie dodatkowych serwerów. Dzięki temu skalowanie można przeprowadzać praktycznie w nieskończoność — dopóki są pieniądze na zakup nowego sprzętu. 

Oferty od Cityhost. Którą metodę wybrać dla klienta? 

Cityhost oferuje wszystkie trzy usługi w ramach korzystania z hostingu. Rozszerzenia są dostępne w panelu zarządzania hostingiem, w sekcji "Usługi dodatkowe".

Dla klientów przydzielane jest 16 MB pamięci operacyjnej pod OPCache bezpłatnie. Memcached kosztuje 10 groszy za dzień korzystania z usługi, a Redis — 53 grosze (minimalna ilość pamięci operacyjnej, którą można zamówić —  32MB).

Wszystkie usługi i instrukcję ich instalacji można znaleźć tutaj.

OPCache, Memcached i Redis są używane do projektów o wysokim obciążeniu z dużą liczbą odwiedzających na stronie i częstymi zapytaniami do bazy danych. Którą z nich zainstalować na swoim hostingu? 

OPCache — minimalistyczna i efektywna usługa, która będzie odpowiednia dla wszystkich projektów, które używają PHP jako języka backendowego. Można ją instalować razem z innymi wspomnianymi aplikacjami do buforowania. 

Ponieważ Memcached i Redis są dość podobne, często pojawia się dylemat wyboru między nimi. 

Zazwyczaj decyzja podejmowana jest na korzyść Redis, ponieważ jest nowszy, ma większą funkcjonalność i pozwala na rozwiązywanie większej liczby zadań, skalowanie poprzez rozszerzenie bazy serwerowej. Z tej opcji korzystają duże projekty lub te z perspektywą szybkiego wzrostu. 

Ale Memcached rozwiązuje zadania buforowania równie dobrze i ma swoje zalety — jest oszczędny w zasobach, odpowiedni dla kompaktowych projektów, nie zajmuje dużo miejsca i skaluje się w obrębie jednego serwera. 

Pojawia się logiczne pytanie: jeśli te technologie tak przyspieszają pracę, to czy nie lepiej byłoby zainstalować wszystkie trzy rozszerzenia na swoim hostingu — wtedy strona prawdopodobnie będzie działać jak rakieta? Nie do końca. Efektywnie działają połączenia OPCache+Redis i OPCache+Memcached, ponieważ każdy komponent z pary wykonuje swoje zadania. 

Natomiast Redis i Memcached są do siebie podobne i przy równoległym włączeniu mogą kolidować. Można oczywiście dobrze skonfigurować oba serwisy, aby wykonywały różne funkcje. Ale zazwyczaj tak się nie robi — jeden z nich jest wystarczający. Który z dwóch wybrać, należy określić w zależności od potrzeb strony, testując działanie usług. 

Tak więc odpowiedź jest prosta: Redis i Memcached można łączyć z OPCache, ale nie warto włączać wszystkich trzech usług. 


Podobał Ci się artykuł? Powiedz o nim znajomym: