This is the Trace Id: fce1084bafb4375b7ba5f27c40d42a0c
Przejdź do głównej zawartości
Azure
tło gradientu

Czym jest buforowanie?

Dowiedz się, w jaki sposób buforowanie poprawia wydajność i efektywność systemu.

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.

Kluczowe wnioski

  • Buforowanie polega na przechowywaniu często wyszukiwanych danych w szybkiej pamięci, dzięki czemu aplikacje mogą reagować szybciej, bez konieczności każdorazowego odwoływania się do głównej bazy danych.
  • Typowe żądanie najpierw sprawdza pamięć podręczną, a w przypadku braku trafienia pobiera dane z magazynu źródłowego i aktualizuje pamięć podręczną, stosując typowe wzorce odczytu i zapisu.
  • Prawidłowo wdrożone buforowanie zmniejsza opóźnienia i obciążenie serwerów zaplecza, pomaga radzić sobie ze skokami ruchu oraz wspiera typowe scenariusze, takie jak witryny internetowe, interfejsy API i stan sesji.
  • Buforowanie występuje na wielu poziomach i działa najlepiej, gdy wybiera się stabilne dane, w przypadku których przeważają operacje odczytu, oraz gdy utrzymuje się niezawodne źródło danych wraz z planem rezerwowym.

Omówienie buforowania

Co to jest pamięć podręczna (buforowanie)?

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.

Jak działa buforowanie?

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.

Kluczowe zasady działania pamięci podręcznej

1. Zapisz w pamięci podręcznej to, co często czytasz

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).

2. Zapisz w pamięci podręcznej powtarzające się operacje

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ń.

3. W razie potrzeby używaj warstw pamięci podręcznej

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.

4. Utrzymuj stan sesji w pamięci, aby aplikacje działały płynnie

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.

Wpływ na wydajność systemu

Buforowanie może zwiększyć wydajność na kilka konkretnych sposobów:

  • Odczyt danych z pamięci podręcznej w pamięci operacyjnej jest szybszy niż dostęp do danych z magazynu opartego na dysku.
  • Mniejsza liczba zapytań może zmniejszyć obciążenie i ograniczyć konieczność rozbudowywania infrastruktury bazy danych, co z kolei może przyczynić się do obniżenia kosztów.
  • Warstwy pamięci podręcznej mogą poprawić przepływność i skrócić opóźnienia, a pamięci podręczne w pamięci operacyjnej mogą pomóc w ograniczeniu opóźnień podczas skoków obciążenia.
  • Wystąpienie pamięci podręcznej może obsłużyć miliony żądań na sekundę, zapewniając przepustowość, której wiele baz danych nie jest w stanie dorównać.

Jak działa buforowanie?

Podstawowy przepływ: pamięć podręczna i źródłowy magazyn danych

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.

Warstwy pamięci podręcznej: więcej niż jedna „szybka ścieżka”

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.

Co jest buforowane (i dlaczego)

Zespoły zwykle buforują dane, które znajdują się w kilku zasobnikach:

  • Często odczytuj dane (zwłaszcza jeśli zmieniają się rzadko), takie jak informacje o produktach lub cenach, a także współdzielone zasoby statyczne, których stworzenie wiąże się z wysokimi kosztami.
  • Powtarzające się obliczenia, gdy operacja przekształca dane lub wykonuje skomplikowane obliczenia – buforowanie wyniku pozwala uniknąć ponownego wykonywania tej samej pracy w przypadku późniejszych żądań.
  • Stan sesji dla aplikacji z zachowaniem stanu, w których przechowywanie stanu sesji w pamięci podręcznej może pomóc w utrzymaniu bezstanowości warstwy aplikacji.

Typowe schematy buforowania (procesy odczytu/zapisu)

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.

  • Odkładanie do pamięci podręcznej: Pobieranie danych na żądanie z magazynu danych.
  • Odczyt bezpośredni: Odczyt z pamięci podręcznej, a w razie potrzeby pamięć podręczna pobiera dane z magazynu danych.
  • Zapis bezpośredni: Dane są zapisywane w pamięci podręcznej, a następnie synchronicznie zsynchronizowane z magazynem danych.
  • Zapis zwrotny (zapis z opóźnieniem): Dane są zapisywane w pamięci podręcznej, a następnie zapisywane z powrotem w magazynie danych partiami.
  • Metoda zapisu okólnego: dane zapisywane są w magazynie danych, a odczytywane z pamięci podręcznej; pamięć podręczna jest aktualizowana na żądanie.

Dlaczego to zmniejsza obciążenie i przyspiesza działanie

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.

Szybki przewodnik: wybieranie wzorca

Użyj ich jako punktu wyjścia podczas wybierania przepływu pracy:

  • Preferuj odkładanie do pamięci podręcznej, gdy aplikacja może zdecydować, co przechowywać i kiedy ją odświeżyć.
  • Wybierz odczyt bezpośredni, jeśli chcesz, aby pamięć podręczna zajmowała się pobieraniem danych z magazynu danych „w razie potrzeby”.
  • Warto rozważyć zastosowanie mechanizmu zapisu okólnego lub zapisu zwrotnego, gdy zachowanie zapisu ma znaczenie i potrzebne jest zdefiniowane podejście do ponownej synchronizacji.

Korzyści i zastosowania buforowania

Szybsze odpowiedzi przy mniejszym nakładzie pracy na zapleczu

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.

Co często zyskujesz dzięki buforowaniu
  • Mniejsze opóźnienie przy typowych operacjach odczytu, ponieważ często wyszukiwane dane pochodzą z szybszej warstwy.
  • Mniejsze obciążenie i koszty bazy danych, ponieważ buforowanie prowadzi do mniejszej liczby zapytań bazy danych i mniejszego nacisku na nadmierne aprowizowanie wystąpień bazy danych.
  • Bardziej przewidywalna przepływność, ponieważ pamięć podręczna może obsługiwać bardzo duży wolumin żądań w porównaniu z wieloma bazami danych.
  • Płynniejsza obsługa skoków ruchu, ponieważ pamięci podręczne w pamięci mogą ograniczać opóźnienia w okresach o wysokiej przepływności.

Lepsze wykorzystanie zasobów obliczeniowych i magazynowych

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.

Typowe przykłady „dobrych elementów pamięci podręcznej”
  • Dane, które rzadko ulegają zmianom (na przykład informacje o produktach i cenach).
  • Współdzielone zasoby statyczne, których utworzenie wiąże się z dużymi kosztami.
  • Wyniki operacji obliczane wielokrotnie.

Rzeczywiste aplikacje (w których jest wyświetlane buforowanie)

Witryny internetowe: szybsze ładowanie stron i mniejsza liczba rund

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).

Typowe zastosowania w witrynach internetowych
  • Zapisywanie w pamięci podręcznej pełnej treści strony na potrzeby kolejnych wyświetleń.
  • Buforuj zasoby statyczne za pomocą buforowania sieciowego lub CDN.
Aplikacje i interfejsy API: szybsze odczyty udostępnionych danych

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.

Typowe wzorce aplikacji
  • Buforuj często odczytywane dane referencyjne (takie jak ceny), aby ograniczyć powtarzające się wywołania bazy danych.
  • Zapisuj w pamięci podręcznej obliczone wyniki, aby uniknąć powtarzania czasochłonnych obliczeń.
Serwery i usługi: skalowanie operacji odczytu i wyrównywanie skoków obciążenia

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.

Gdzie jest to najbardziej przydatne
  • Punkty końcowe o dużym natężeniu odczytów, w których często wysyłane są żądania dotyczące tych samych kluczy.
  • Systemy, w których występują okresowe skoki natężenia ruchu.
Systemy biznesowe: stan sesji i udostępnione dane operacyjne

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.

Przykłady, które można mapować na obciążenia biznesowe
  • Dane sesji dla aplikacji internetowych i mobilnych (krótkotrwałe, o dużej objętości).
  • Często odczytywane operacyjne dane odniesienia (ceny, zasoby współdzielone).

Typy buforowania

Buforowanie występuje na wielu poziomach pomiędzy aplikacją a jej danymi, w tym w rozwiązaniach po stronie klienta i po stronie serwera.

Pamięć podręczna przeglądarki (po stronie klienta)

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.

Typowe przypadki użycia
  • Statyczne zasoby witryny, takie jak obrazy, pliki CSS i pliki JavaScript.
  • Ograniczenie liczby połączeń z serwerem źródłowym w przypadku zasobów pobranych wcześniej.

Pamięć podręczna po stronie serwera

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).

Typowe przypadki użycia
  • Prywatna pamięć podręczna w pamięci wewnątrz jednego procesu na potrzeby niewielkich ilości danych statycznych.
  • Usługa wspólnej pamięci podręcznej, dzięki której wiele instancji aplikacji odczytuje te same wartości z pamięci podręcznej, co pozwala uniknąć sytuacji, w której poszczególne instancje korzystają z „różnych wersji” danych.
  • Dane, które są często odczytywane, ale rzadko modyfikowane (na przykład dane referencyjne dotyczące produktów i cen).

Pamięć podręczna sieci CDN

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.

Typowe przypadki użycia
  • Wspólne dostarczanie treści, które można zapisać w pamięci podręcznej, z lokalizacji brzegowych w celu ograniczenia liczby żądań kierowanych do serwera źródłowego.
  • Zasoby statyczne, których dostarczanie w pobliżu użytkowników jest korzystne (są to te same rodzaje zasobów, które przeglądarki zapisują w pamięci podręcznej, ale które są wspólne dla wszystkich użytkowników).

Procesor/pamięć podręczna

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.

Typowe przypadki użycia
  • Pamięć podręczna procesora CPU: wielokrotny dostęp do tych samych instrukcji/danych bez częstych podróży do pamięci głównej.
  • Pamięć podręczna w pamięci: szybkie odczyty niewielkich ilości stosunkowo statycznych danych wewnątrz jednej uruchomionej usługi.

Buforowanie rozproszone

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.

Typowe przypadki użycia
  • Warstwa udostępnionej pamięci podręcznej dla wielu wystąpień aplikacji i maszyn.
  • Obciążenia, które wymagają pojemności pamięci podręcznej i przepływności przekraczającej jeden host.
  • Konfiguracje pamięci podręcznej warstwowej, w których w przypadku braku trafienia dane są pobierane z serwera nadrzędnego, a następnie zachowywana jest ich lokalna kopia na potrzeby kolejnych żądań.

Wprowadzenie do buforowania

Dlaczego buforowanie nadal ma znaczenie

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).

Praktyczny sposób na rozpoczęcie

Zacznij od drobnych kroków i skup się na danych, które przynoszą najbardziej wymierny zwrot:

  • W pamięci podręcznej należy przechowywać dane, które są często odczytywane, których pobieranie trwa długo i które rzadko ulegają zmianom (na przykład dane odniesienia).
  • Zdecyduj, kiedy dane mają trafić do pamięci podręcznej:
    • Na żądanie po pierwszym zapytaniu, dzięki czemu przechowujesz tylko to, co faktycznie jest wykorzystywane.
    • Wypełnij wstępnie (zaznacz) niektóre pozycje podczas uruchamiania, jeśli wiesz, że będą one potrzebne na początku – jednocześnie monitorując obciążenie podczas uruchamiania w oryginalnym sklepie.
  • Wybierz wzorzec, którym możesz zarządzać. Wzorzec z odkładaniem do pamięci podręcznej jest typowy, a jego wskazówki wskazują, jak wygaśnięcie, eksmisja i spójność wpływają na wyniki.

Dbaj o aktualność danych w pamięci podręcznej (i zapewnij odporność systemu)

Pamięć podręczna zazwyczaj przechowuje kopie danych z pamięci głównej, dlatego należy zwrócić uwagę na aktualność danych:

  • Wykorzystaj zasady wygasania, aby ograniczyć czas przechowywania danych w pamięci podręcznej przed ich odświeżeniem.
  • Obserwuj zachowanie związane z usuwaniem danych przy zapełnianiu się pamięci podręcznej (wiele systemów domyślnie usuwa elementy, które były używane najrzadziej).
  • Nie traktuj pamięci podręcznej jako jedynego miejsca przechowywania krytycznych danych. Przechowuj źródło danych w pamięci trwałej, aby system mógł nadal działać, nawet jeśli pamięć podręczna jest niedostępna.
  • Zaplanuj ścieżkę awaryjną prowadzącą do pierwotnego magazynu danych na wypadek, gdyby nie można było uzyskać dostępu do pamięci podręcznej, i uzupełniaj dane w miarę pojawiania się operacji odczytu.

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.

tło gradientu
Zasoby

Zasoby

Szkolenie
Zasoby platformy Azure
Poznaj najnowsze technologie programistyczne i zdobądź nowe umiejętności.
Edukacja
Zasoby dla studentów i uczniów zajmujących się programowaniem
Zyskaj umiejętności, które pozwolą Ci szybko rozpocząć karierę i pozytywnie wpłynąć na świat.
Wydarzenia
Wydarzenia i seminaria internetowe dotyczące platformy Azure
Zyskaj nowe umiejętności, odkryj nowe technologie i kontaktuj się ze swoją społecznością — weź udział cyfrowo lub osobiście.
Często zadawane pytania

Często zadawane pytania

  • Buforowanie polega na przechowywaniu często wykorzystywanych danych w szybkiej pamięci, dzięki czemu aplikacje mogą szybko zwracać wyniki bez konieczności każdorazowego odwoływania się do głównej bazy danych. Zmniejsza to opóźnienia i obciążenie serwerów zaplecza, co pozwala systemom obsługiwać większą liczbę współbieżnych żądań.
  • Buforowanie poprawia wydajność poprzez dostarczanie często wyszukiwanych danych z szybkiej pamięci, co skraca opóźnienia, zmniejsza obciążenie bazy danych i związane z tym koszty, umożliwia obsługę dużej liczby żądań oraz pomaga w okresach wzmożonego ruchu.
  • Jednym z przykładów jest buforowanie danych wyjściowych – serwer internetowy przechowuje renderowane dane wyjściowe strony (skrypty HTML i skrypty klienta) w pamięci, a następnie obsługuje buforowane dane wyjściowe podczas ponownych odwiedzin zamiast ponownego uruchamiania kodu strony.
  • Pamięć podręczna przechowuje mniejszy, tymczasowy podzbiór danych w celu zapewnienia szybkiego dostępu, natomiast baza danych lub magazyn danych przechowuje kompletny, trwały zbiór danych przeznaczony do długoterminowego przechowywania. W przypadku utraty danych z pamięci podręcznej ich stała kopia nadal znajduje się w bazie danych; pamięci podręczne nie są przeznaczone do pełnienia roli autorytatywnego repozytorium danych o krytycznym znaczeniu.