Znaczenie buforowania
Buforowanie polega na przechowywaniu w pamięci kopii często wykorzystywanych danych, dzięki czemu aplikacje unikają wielokrotnych wywołań bazy danych i szybciej zwracają wyniki.
Buforowanie polega na przechowywaniu w pamięci kopii często wykorzystywanych danych, dzięki czemu aplikacje unikają wielokrotnych wywołań bazy danych i szybciej zwracają wyniki.
Buforowanie to praktyka polegająca na przechowywaniu danych typu „klucz-wartość” w pamięci tymczasowej (takiej jak baza danych typu NoSQL – nierelacyjnego języka zapytań strukturalnych), dzięki czemu aplikacje mogą je pobierać szybciej niż z tradycyjnych magazynów danych. W architekturach magazynu w chmurze, w których żądania często są wykonywane między sieciami i usługami współużytkowania dotykowego, buforowanie może pomóc w utrzymaniu krótkich czasów odpowiedzi i zmniejszeniu liczby powtórzeń pracy.
Większość systemów utrzymuje trwałe „źródło prawdy” (bazę danych) zawierające kompletne zbiory danych, a następnie przechowuje w pamięci podręcznej często odczytywane, tymczasowe podzbiory danych. Gdy napływa żądanie, aplikacja najpierw sprawdza pamięć podręczną; jeśli dane tam są, zwraca je szybko, bez ponownego wysyłania zapytania do serwera. Deweloperzy również buforują przetworzone dane i wykorzystują je ponownie, aby obsługiwać żądania szybciej niż w przypadku standardowych zapytań do relacyjnych bazy danych, baz danych SQL, oprogramowanie typu open-sourceBazy danych PostgreSQL.
Dobrymi przykładami są dane odczytywane wielokrotnie oraz dane, które rzadko ulegają zmianom (na przykład informacje o produktach i cenach lub współdzielone zasoby statyczne, których utworzenie wiąże się z wysokimi kosztami).
Jeśli operacja przekształca dane lub wykonuje skomplikowane obliczenia, zapisanie wyniku w pamięci podręcznej pozwala uniknąć ponownego obliczania go w przypadku kolejnych żądań.
Deweloperzy wykorzystują wielopoziomowe pamięci podręczne („warstwy pamięci podręcznej”) do przechowywania różnych typów danych w oddzielnych pamięciach podręcznych w zależności od zapotrzebowania. Dodanie jednej lub kilku warstw pamięci podręcznej może poprawić przepustowość i skrócić opóźnienia w warstwie danych.
Bazy danych w pamięci są często wykorzystywane do przechowywania przez krótki czas dużych ilości danych sesyjnych, takich jak dane wprowadzane przez użytkownika, pozycje w koszyku lub preferencje dostosowania. W przypadku aplikacji z zachowaniem stanu zespoły przechowują również stan sesji w pamięci podręcznej, dzięki czemu aplikacja może działać bez zachowania stanu.
Buforowanie może zwiększyć wydajność na kilka konkretnych sposobów:
W wielu projektach chmury pamięć podręczna znajduje się obok podstawowego magazynu danych (na przykład bazy danych). Magazyn podstawowy przechowuje pełny, trwały zestaw danych na serwerze w chmurze, natomiast pamięć podręczna zawiera mniejszy, tymczasowy podzbiór, który można odczytać szybciej.
Typową konfiguracją jest samodzielna warstwa pamięci podręcznej lub pamięć podręczna umieszczona w warstwie aplikacji lub bazy danych, wybrana w zależności od tego, gdzie potrzebny jest szybki odczyt.
Niektóre systemy wykorzystują wielopoziomowe buforowanie („warstwy pamięci podręcznej”), dzięki czemu różne rodzaje danych są przechowywane w różnych pamięciach podręcznych w zależności od zapotrzebowania. Dodanie jednej lub kilku warstw pamięci podręcznej może poprawić przepływność i skrócić opóźnienia w warstwie danych, a także obniżyć całkowite koszty poprzez zmniejszenie obciążenia serwerów zaplecza.
Zespoły zwykle buforują dane, które znajdują się w kilku zasobnikach:
Istnieje kilka standardowych sposobów, w jakie aplikacje odczytują dane z pamięci podręcznej i zapisują je w niej. Oto najczęstsze schematy i ich praktyczne znaczenie.
Wykorzystanie warstw pamięci podręcznej może poprawić przepustowość i skrócić opóźnienia dzięki obsłudze typowych żądań z pamięci podręcznej zamiast wielokrotnego wysyłania zapytań do magazynu danych. Może to zmniejszyć potrzebę rozbudowywania infrastruktury bazy danych, ponieważ do bazy danych trafia od razu mniej żądań.
W przypadku aplikacji, w których występują skoki obciążenia, pamięci podręczne w pamięci operacyjnej mogą pomóc w zmniejszeniu opóźnień poprzez przechowywanie często pobieranych danych w pobliżu miejsca ich wykorzystania.
Użyj ich jako punktu wyjścia podczas wybierania przepływu pracy:
Buforowanie poprawia wydajność aplikacji, ponieważ odczyt z pamięci podręcznej w pamięci operacyjnej jest szybszy niż odczyt z magazynu danych opartego na dysku. Gdy więcej żądań jest obsługiwanych z pamięci podręcznej, systemy wysyłają mniej zapytań do baz danych zaplecza, co może zmniejszyć potrzebę skalowania infrastruktury baz danych i obniżyć związane z tym koszty.
Buforowanie pozwala ograniczyć powtarzające się czynności. Dane, które są wielokrotnie odczytywane lub których tworzenie wiąże się z wysokimi kosztami, można zapisać tylko raz i ponownie wykorzystać. Jeśli operacja polega na wykonaniu skomplikowanych obliczeń lub przekształceniu danych, zapisanie wyniku w pamięci podręcznej pozwala uniknąć powtarzania obliczeń przy kolejnych żądaniach.
Wiele serwisów buforuje zawartość stron (np. kod HTML i skrypty klienckie), dzięki czemu serwer może zwracać zawartość z pamięci podręcznej zamiast za każdym razem ponownie wykonywać kod strony. Buforowanie wspiera również zastosowania multimedialne w sieci poprzez pamięci podręczne stron internetowych oraz buforowanie sieciowe, takie jak sieci dostarczania treści (CDN).
Aplikacje często przechowują tymczasowe podzbiory danych w pamięci podręcznej w celu ich szybkiego pobrania, podczas gdy główna baza danych zawiera kompletny, trwały zestaw danych. Buforowanie przetworzonych danych i ich ponowne wykorzystanie pozwala na szybszą obsługę żądań niż w przypadku standardowych zapytań do bazy danych.
Zespoły często dodają jedną lub więcej warstw pamięci podręcznej, aby poprawić przepustowość i skrócić opóźnienia, obsługując typowe zapytania z pamięci podręcznej i zmniejszając obciążenie bazy danych. Pamięci podręczne w pamięci operacyjnej mogą okazać się pomocne w przypadku gwałtownych wzrostów obciążenia i zapotrzebowania na przepustowość, ograniczając opóźnienia w tych okresach.
Buforowanie jest często używane do przechowywania dużych ilości krótkoterminowych danych sesji (takich jak dane wejściowe użytkownika lub preferencje personalizacji) w magazynie w pamięci. Niektóre zespoły przechowują również stan sesji w pamięci podręcznej, dzięki czemu aplikacje stanowe mogą zachować warstwę aplikacji bezstanową. W systemach operacyjnych dane, które zmieniają się rzadko, takie jak informacje o produktach i cenach, są częstym przedmiotem buforowania.
Pamięć podręczna przeglądarki przechowuje kopie zasobów statycznych na urządzeniu użytkownika, dzięki czemu podczas kolejnych wizyt pliki te mogą być ponownie wykorzystywane zamiast ich ponownego pobierania.
Buforowanie po stronie serwera odbywa się w procesach, które zdalnie obsługują usługi biznesowe, a nie na urządzeniu użytkownika końcowego. Pamięci podręczne po stronie serwera są często prywatne (lokalne dla jednego wystąpienia aplikacji) lub współużytkowane (używane przez wiele wystąpień aplikacji).
Sieć CDN buforuje treści na serwerach brzegowych znajdujących się bliżej użytkowników końcowych, dzięki czemu żądania nie zawsze muszą być kierowane z powrotem do serwera źródłowego. W przeciwieństwie do pamięci podręcznej przeglądarki (dla jednego użytkownika) pamięć podręczna sieci CDN jest współdzielona. Żądanie jednego użytkownika może spowodować załadowanie treści, którą później otrzyma inny użytkownik.
Buforowanie to nie tylko wzorzec przetwarzania w chmurze – używają go również warstwy sprzętu i pamięci.
Pamięć podręczna procesora CPU to mały, szybki obszar pamięci w pobliżu (lub na) procesorze, który przechowuje kopie często używanych danych, oraz instrukcje, aby skrócić czas oczekiwania na pamięć główną.
Pamięć podręczna (w pamięci) to najprostszy rodzaj pamięci podręcznej opartej na oprogramowaniu: jest to obszar pamięci znajdujący się w przestrzeni adresowej pojedynczego procesu, do którego ten proces ma bezpośredni dostęp.
Pamięć podręczna rozproszona obejmuje wiele serwerów, dzięki czemu może się powiększać, a jej zdolność do obsługi transakcji wykracza poza możliwości pojedynczego serwera. Wiele usług wykorzystujących wspólną pamięć podręczną opiera się na klastrze serwerów i rozdziela dane z pamięci podręcznej w obrębie tego klastra; skalowanie pamięci podręcznej może polegać po prostu na dodaniu kolejnych serwerów. W niektórych architekturach rozproszonych pamięci podręczne są również zorganizowane w warstwy, tak że w przypadku braku trafienia w jednej warstwie dane pobierane są od dostawcy wyższego szczebla, a następnie wynik jest zapisywany lokalnie na potrzeby kolejnego żądania.
Buforowanie pozwala przechowywać często wykorzystywane dane bliżej miejsca ich wykorzystania, co może skrócić czas odpowiedzi i pomóc systemowi w obsłudze większej liczby równoczesnych żądań. Może to również ograniczyć rywalizację o dostęp w pierwotnym magazynie danych, na przykład gdy baza danych ma ograniczoną liczbę połączeń.
W aplikacjach rozproszonych buforowanie często odbywa się w więcej niż jednym miejscu: po stronie klienta (np. w przeglądarce) oraz po stronie serwera (w aplikacji lub we wspólnej usłudze buforującej).
Zacznij od drobnych kroków i skup się na danych, które przynoszą najbardziej wymierny zwrot:
Pamięć podręczna zazwyczaj przechowuje kopie danych z pamięci głównej, dlatego należy zwrócić uwagę na aktualność danych:
Buforowanie stanowi podstawowy element nowoczesnych systemów, ponieważ sprawdza się w wielu architekturach – od pojedynczych usług po aplikacje rozproszone i dostarczanie danych na brzegu sieci. Jeśli szukasz dostawcy usług w chmurze oferującego zarządzaną pamięć podręczną w pamięci operacyjnej, warto zapoznać się z platformą Azure.