Trace Id is missing
Przejdź do głównej zawartości

Czym jest buforowanie?

Deweloperzy i specjaliści IT wykorzystują buforowanie do zapisywania danych klucz-wartość oraz uzyskiwania do nich dostępu szybciej i przy mniejszym nakładzie pracy niż w przypadku danych przechowywanych w konwencjonalnym magazynie danych. Pamięci podręczne są przydatne w wielu scenariuszach z wieloma technologiami, takich jak buforowanie komputerów z pamięcią RAM, buforowanie sieci w sieci dostarczania zawartości, internetowa pamięć podręczna dla internetowych danych multimedialnych lub pamięć podręczna w chmurze pomocna w zwiększaniu odporności aplikacji w chmurze. Deweloperzy często projektują aplikacje w taki sposób, aby buforowały przetworzone dane, a następnie ponownie wykorzystywały je do obsługi żądań szybciej niż w przypadku standardowych zapytań bazy danych.

Buforowanie umożliwia obniżenie kosztów bazy danych, zapewnienie większej przepływności i mniejszego opóźnienia niż oferuje większość baz danych, a także zwiększenie wydajności aplikacji w chmurze i aplikacji internetowych.

Jak działa buforowanie w przypadku baz danych?

Deweloperzy mogą uzupełnić podstawową bazę danych o pamięć podręczną bazy danych, którą mogą umieścić w bazie danych lub aplikacji albo ustawić jako warstwę autonomiczną. Chociaż zwykle korzystają z konwencjonalnej bazy danych do przechowywania dużych, trwałych i kompletnych zestawów danych, używają pamięci podręcznej do przechowywania przejściowych podzestawów danych w celu szybkiego pobierania.

Buforowania można używać we wszystkich typach magazynów danych, w tym bazach danych NoSQL, a także relacyjnych bazach danych, takich jak serwer SQL, MySQL, lub MariaDB. Buforowanie sprawdza się również w przypadku wielu specyficznych platform danych, takich jak Azure Database for PostgreSQLAzure SQL Database, lub Azure SQL Managed Instance. Przed rozpoczęciem konfigurowania architektury danych zalecamy zapoznanie się z typem magazynu danych, który najlepiej spełni Twoje wymagania. Na przykład warto zapoznać się z bazą danych PostgreSQL, zanim użyjesz jej do połączenia relacyjnych i nieustrukturyzowanych magazynów danych.

Zalety warstw pamięci podręcznej i czym w ogóle jest Redis?

Deweloperzy używają wielopoziomowych pamięci podręcznych nazywanych warstwami pamięci podręcznej do przechowywania różnych typów danych w oddzielnych pamięciach podręcznych według zapotrzebowania. Dodanie warstwy pamięci podręcznej, lub kilku, może znacząco poprawić wydajność warstwy danych w zakresie przepływności i opóźnień.

Redis to popularna struktura danych w pamięci typu open-source używana do tworzenia warstw pamięci podręcznej o wysokiej wydajności i innych magazynów danych. Ostatnie badanie wykazało, że dodanie usługi Azure Cache for Redis do przykładowej aplikacji zwiększyło przepływność danych o ponad 800 procent i poprawiło wydajność opóźnień o ponad 1000 procent1.

Pamięci podręczne mogą również zmniejszyć całkowity koszt posiadania (TCO) dla warstwy danych. Korzystając z pamięci podręcznych do obsługi najbardziej typowych zapytań i zmniejszenia obciążenia bazy danych, można zmniejszyć potrzebę zbyt wielu wystąpień baz danych, co powoduje znaczne oszczędności kosztów i obniżenie TCO.

Typy buforowania

Strategia buforowania zależy od tego, w jaki sposób aplikacja odczytuje i zapisuje dane. Czy aplikacja jest obciążona dużą ilością operacji zapisu, czy dane są zapisywane raz i często odczytywane? Czy zwracane dane są zawsze unikatowe? Różne wzorce dostępu do danych będą mieć wpływ na sposób konfigurowania pamięci podręcznej. Typowe typy buforowania obejmują odkładanie do pamięci podręcznej, operacje odczytu read-through/write-through oraz zapisu write-behind/write-back.

Odkładanie do pamięci podręcznej

W przypadku aplikacji z obciążeniami z dużą liczbą operacji odczytu deweloperzy często używają wzorca programowania z odkładaniem do pamięci podręcznej, czyli "pamięci podręcznej odkładania." Lokalizują pamięć podręczną odkładania poza aplikacją, która może wówczas łączyć się z pamięcią podręczną w celu wykonywania zapytań i pobierania danych, lub bezpośrednio z bazą danych w przypadku braku danych w pamięci podręcznej. Gdy aplikacja pobiera dane, kopiuje je do pamięci podręcznej na potrzeby przyszłych zapytań.

Możesz użyć pamięci podręcznej odkładania, aby zwiększyć wydajność aplikacji, zachować spójność między pamięcią podręczną a magazynem danych oraz zapobiec starzeniu się danych w pamięci podręcznej.

Pamięć podręczna operacji read-through/write-through

Pamięci podręczne operacji read-through aktualizują się na bieżąco, a dzięki buforowaniu operacji write-through aplikacja zapisuje dane w pamięci podręcznej, a następnie w bazie danych. Obie pamięci podręczne są zgodne z bazą danych, a aplikacja traktuje je jako główny magazyn danych.

Pamięci podręczne operacji read-through pomagają uprościć aplikacje, w których te same dane są żądane wielokrotnie, ale sama pamięć podręczna jest bardziej złożona, natomiast dwuetapowy proces operacji write-through może powodować opóźnienia. Deweloperzy łączą je w pary, aby zapewnić spójność danych między pamięcią podręczną a bazą danych, zmniejszyć opóźnienie pamięci podręcznej operacji write-through i ułatwić aktualizowanie pamięci podręcznej operacji read-through.

Dzięki buforowaniu operacji read-through/write-through deweloperzy mogą uprościć kod aplikacji, zwiększyć skalowalność pamięci podręcznej i zminimalizować obciążenie bazy danych.

Pamięć podręczna operacji write-behind/write-back

W ramach tego scenariusza aplikacja zapisuje dane w pamięci podręcznej, które są natychmiast potwierdzane, a następnie sama pamięć podręczna zapisuje dane z powrotem w bazie danych w tle. Pamięci podręczne operacji write-behind, czasami nazywane pamięciami podręcznymi operacji write-back, najlepiej sprawdzają się w przypadku obciążeń z dużą ilością operacji zapisu i poprawiają wydajność zapisu, ponieważ aplikacja nie musi czekać na ukończenie zapisu przed przejściem do następnego zadania.

Rozproszona pamięć podręczna a magazyn sesji

Rozproszone pamięci podręczne często są mylone z magazynami sesji, które są podobne, ale mają różne wymagania i cele. Zamiast używać rozproszonej pamięci podręcznej do uzupełnienia bazy danych, deweloperzy implementują magazyny sesji, które są tymczasowymi magazynami danych w warstwie użytkownika, na potrzeby profilów, komunikatów i innych danych użytkownika w aplikacjach zorientowanych na sesję, takich jak aplikacje internetowe.

Co to jest magazyn sesji?

Aplikacje zorientowane na sesje śledzą akcje podejmowane przez użytkowników po zalogowaniu się do aplikacji. Aby zachować te dane po wylogowaniu się użytkownika, możesz je przechowywać w magazynie sesji, co usprawnia zarządzanie sesjami, zmniejsza koszty i przyspiesza wydajność aplikacji.

Czym różni się korzystanie z magazynu sesji od buforowania bazy danych?

W magazynie sesji dane nie są udostępniane różnym użytkownikom, natomiast w przypadku buforowania różni użytkownicy mogą uzyskać dostęp do tej samej pamięci podręcznej. Deweloperzy używają buforowania w celu zwiększenia wydajności bazy danych lub wystąpienia magazynu, natomiast magazynów sesji używają do zwiększenia wydajności aplikacji przez zapisywanie danych w magazynie w pamięci, eliminując w ogóle konieczność uzyskiwania dostępu do bazy danych.

Dane zapisywane w magazynie sesji są zwykle krótkotrwałe, a dane buforowane w podstawowej bazie danych zwykle są przeznaczone do wykorzystania przez dłuższy czas. Magazyn sesji wymaga replikacji, wysokiej dostępności i trwałości danych, aby zapewnić, że dane transakcyjne nie zostaną utracone, a użytkownicy pozostaną zaangażowani. Z drugiej strony, jeśli dane w pamięci podręcznej odkładania zostaną utracone, zawsze istnieje ich kopia w trwałej bazie danych.

Korzyści buforowania

Zwiększona wydajność aplikacji

Odczytywanie danych z pamięci podręcznej w pamięci jest znacznie szybsze niż uzyskiwanie dostępu do danych z poziomu magazynu danych opartego na dysku. Dzięki szybszemu dostępowi do danych ogólne środowisko aplikacji znacznie się poprawia.

Zmniejszone użycie bazy danych i koszty

Buforowanie prowadzi do mniejszej liczby zapytań dotyczących bazy danych, poprawia wydajność i obniża koszty, ograniczając konieczność skalowania infrastruktury bazy danych i zmniejszając opłaty za przepływność.

Skalowalna i przewidywalna wydajność

Pojedyncze wystąpienie pamięci podręcznej może obsłużyć miliony żądań na sekundę, oferując poziom przepływności i skalowalności, z którym bazy danych nie mogą się równać. Buforowanie zapewnia również potrzebną elastyczność niezależnie od tego, czy skalujesz w poziomie czy w górę aplikacje i magazyny danych. Wówczas aplikacja może pozwolić wielu użytkownikom na równoczesne uzyskiwanie dostępu do tych samych plików bez zwiększania obciążenia baz danych zaplecza. A jeśli aplikacja często doświadcza nagłych wzrostów użycia i wysokiej przepływności, pamięci podręczne w pamięci mogą wyeliminować opóźnienie.

Do czego służy buforowanie?

Buforowanie danych wyjściowych

Buforowanie danych wyjściowych umożliwia zwiększenie wydajności strony internetowej, przechowując pełny kod źródłowy stron, taki jak kod HTML i skrypty klienta wysyłane przez serwer do przeglądarek na potrzeby renderowania. Za każdym razem, gdy użytkownik wyświetla stronę, serwer buforuje kod wyjściowy w pamięci aplikacji. Dzięki temu aplikacja może obsługiwać żądania bez uruchamiania kodu strony lub komunikowania się z innymi serwerami.

Buforowanie danych i buforowanie bazy danych

Szybkość i przepływność bazy danych mogą być kluczowymi czynnikami ogólnej wydajności aplikacji. Buforowanie bazy danych jest używane do częstych wywołań danych, które nie zmieniają się często, takich jak ceny lub dane spisu. Dzięki temu witryny internetowe i aplikacje ładują się szybciej, jednocześnie zwiększając przepływność i obniżając opóźnienie pobierania danych z baz danych zaplecza.

Przechowywanie danych sesji użytkownika

Użytkownicy aplikacji często generują dane, które muszą być przechowywane przez krótki okres czasu. Magazyn danych w pamięci, taki jak Redis, doskonale nadaje się do wydajnego i niezawodnego przechowywania dużych ilości danych sesji, takich jak dane wejściowe użytkownika, wejścia do koszyka lub preferencje personalizacji, przy niższych kosztach niż magazyn lub bazy danych.

Architektury brokerów komunikatów oraz architektury publikowania/subskrybowania

Aplikacje w chmurze często muszą wymieniać dane między usługami i mogą używać buforowania do implementowania architektur publikowania/subskrybowania lub architektur brokera komunikatów, które zmniejszają opóźnienia i przyspieszają zarządzanie danymi.

Aplikacje i interfejsy API

Podobnie jak przeglądarki, aplikacje zapisują ważne pliki i dane, aby w razie potrzeby szybko załadować ponownie te informacje. Buforowane odpowiedzi interfejsu API eliminują zapotrzebowanie lub obciążenie serwerów aplikacji i baz danych, zapewniając krótszy czas odpowiedzi i lepszą wydajność.

[1] Twierdzenia dotyczące wydajności są oparte na danych z badań zleconych przez firmę Microsoft i przeprowadzonych przez firmę GigaOm w październiku 2020 r. Badania obejmowały porównanie wydajności aplikacji testowej korzystającej z bazy danych na platformie Azure z wdrożoną usługą Azure Cache for Redis jako rozwiązaniem do buforowania i bez tej usługi. Jako element bazy danych w badaniach wykorzystano usługi Azure SQL Database i Azure Database for PostgreSQL. Zastosowano wystąpienie usługi Azure SQL Database ogólnego przeznaczenia 5. generacji z 2 rdzeniami wirtualnymi oraz wystąpienie usługi Azure Database for PostgreSQL ogólnego przeznaczenia z 2 rdzeniami wirtualnymi wraz z wystąpieniem usługi Azure for Redis Premium P1 o pojemności 6 gigabajtów. Te wyniki porównano z wystąpieniami usługi Azure SQL Database ogólnego przeznaczenia 5. generacji z 8, 16, 24 i 32 rdzeniami wirtualnymi oraz wystąpieniami usługi Azure Database for PostgreSQL ogólnego przeznaczenia z 8, 16, 24 i 32 rdzeniami wirtualnymi bez usługi Azure Cache for Redis. Dane porównawcze uzyskano z testu obciążenia bazy danych aplikacji internetowej firmy GigaOm, który symuluje typową aplikację internetową i bazę danych zaplecza w warunkach rosnącego obciążenia żądaniami HTTP. Rzeczywiste wyniki mogą się różnić w zależności od konfiguracji i regionu. Zobacz pełne badanie.

Bezpłatne konto

Wypróbuj usługi przetwarzania w chmurze platformy Azure bezpłatnie przez maksymalnie 30 dni.

Płatność zgodnie z rzeczywistym użyciem

Zacznij pracę, korzystając z cennika opartego na płatnościach zgodnie z rzeczywistym użyciem. Nie ma żadnych zobowiązań z góry — możesz zrezygnować w dowolnym momencie.

Dodaj elastyczną warstwę buforowania do aplikacji za pomocą w pełni zarządzanej usługi Redis. Dowiedz się, jak rozpocząć pracę z usługą Azure Cache for Redis.

Jeśli chcesz uruchomić elastyczne, oparte na plikach buforowanie dla aplikacji o wysokiej wydajności, poczytaj o usłudze Azure HPC Cache.