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.





