Jak działa buforowanie
Ważne
Usługa Azure CDN Standard firmy Microsoft (klasyczna) zostanie wycofana 30 września 2027 r. Aby uniknąć zakłóceń w działaniu usługi, należy przeprowadzić migrację profilów usługi Azure CDN Standard z usługi Microsoft (klasycznej) do warstwy Azure Front Door Standard lub Premium do 30 września 2027 r. Aby uzyskać więcej informacji, zobacz Azure CDN Standard from Microsoft (classic) retirement (Wycofanie usługi Azure CDN w warstwie Standardowa z firmy Microsoft (wersja klasyczna).
Usługa Azure CDN z Edgio została wycofana 15 stycznia 2025 r. Aby uzyskać więcej informacji, zobacz Azure CDN from Edgio retirement FAQ (Usługa Azure CDN from Edgio retirement FAQ).
Ten artykuł zawiera omówienie ogólnych pojęć dotyczących buforowania oraz sposobu, w jaki usługa Azure Content Delivery Network używa buforowania w celu zwiększenia wydajności. Jeśli chcesz dowiedzieć się, jak dostosować zachowanie buforowania w punkcie końcowym sieci dostarczania zawartości, zobacz Kontrolowanie zachowania buforowania usługi Azure Content Delivery Network przy użyciu reguł buforowania i Kontrolowanie zachowania buforowania usługi Azure Content Delivery Network przy użyciu ciągów zapytań.
Wprowadzenie do buforowania
Buforowanie to proces przechowywania danych lokalnie, dzięki czemu przyszłe żądania dotyczące tych danych będą uzyskiwane szybciej. W najczęściej używanym typie buforowania buforowanie przeglądarki internetowej przeglądarka internetowa przechowuje kopie danych statycznych lokalnie na lokalnym dysku twardym. Dzięki buforowaniu przeglądarka internetowa może uniknąć wykonywania wielu rund na serwerze i zamiast tego uzyskiwać dostęp do tych samych danych lokalnie, co pozwala zaoszczędzić czas i zasoby. Buforowanie jest odpowiednie do lokalnego zarządzania małymi danymi statycznymi, takimi jak obrazy statyczne, pliki CSS i pliki JavaScript.
Podobnie buforowanie jest używane przez sieć dostarczania zawartości na serwerach brzegowych w pobliżu użytkownika, aby uniknąć żądań powrotnych do źródła i zmniejszenia opóźnienia użytkownika końcowego. W przeciwieństwie do pamięci podręcznej przeglądarki internetowej, która jest używana tylko dla jednego użytkownika, sieć dostarczania zawartości ma udostępnioną pamięć podręczną. W udostępnionej pamięci podręcznej sieci dostarczania zawartości żądanie pliku przez użytkownika może być używane przez innego użytkownika, co znacznie zmniejsza liczbę żądań do serwera pochodzenia.
Zasoby dynamiczne, które zmieniają się często lub są unikatowe dla pojedynczego użytkownika, nie mogą być buforowane. Te typy zasobów mogą jednak korzystać z optymalizacji przyspieszania witryn dynamicznych (DSA) w sieci dostarczania zawartości platformy Azure w celu zwiększenia wydajności.
Buforowanie może wystąpić na wielu poziomach między serwerem pochodzenia a użytkownikiem końcowym:
- Serwer sieci Web: używa udostępnionej pamięci podręcznej (dla wielu użytkowników).
- Sieć dostarczania zawartości: używa udostępnionej pamięci podręcznej (dla wielu użytkowników).
- Dostawca usług internetowych (ISP): używa udostępnionej pamięci podręcznej (dla wielu użytkowników).
- Przeglądarka internetowa: używa prywatnej pamięci podręcznej (dla jednego użytkownika).
Każda pamięć podręczna zwykle zarządza własną aktualnością zasobów i przeprowadza walidację, gdy plik jest nieaktualny. To zachowanie jest zdefiniowane w specyfikacji buforowania HTTP RFC 7234.
Świeżość zasobów
Ponieważ zasób buforowany może być potencjalnie nieaktualny lub nieaktualny (w porównaniu z odpowiednim zasobem na serwerze pochodzenia), ważne jest, aby każdy mechanizm buforowania kontrolować, kiedy zawartość pobiera odświeżanie. Aby zaoszczędzić czas i zużycie przepustowości, zasób buforowany nie jest porównywany z wersją na serwerze pochodzenia za każdym razem, gdy jest uzyskiwany dostęp. Zamiast tego, o ile zasób buforowany jest uznawany za świeży, przyjmuje się, że jest to najnowsza wersja i jest wysyłany bezpośrednio do klienta. Zasób buforowany jest uznawany za świeży, gdy jego wiek jest krótszy niż wiek lub okres zdefiniowany przez ustawienie pamięci podręcznej. Na przykład gdy przeglądarka ponownie ładuje stronę internetową, sprawdza, czy każdy zasób buforowany na dysku twardym jest świeży i ładuje go. Jeśli zasób nie jest świeży (nieaktualny), kopia aktualna jest ładowana z serwera.
Walidacja
Jeśli zasób jest uznawany za nieaktualny, serwer pochodzenia zostanie poproszony o zweryfikowanie go w celu ustalenia, czy dane w pamięci podręcznej nadal są zgodne z tym, co znajduje się na serwerze pochodzenia. Jeśli plik został zmodyfikowany na serwerze pochodzenia, pamięć podręczna aktualizuje jego wersję zasobu. W przeciwnym razie, jeśli zasób jest świeży, dane są dostarczane bezpośrednio z pamięci podręcznej bez wcześniejszego weryfikowania.
Buforowanie sieci dostarczania zawartości
Buforowanie jest integralną częścią sposobu działania sieci dostarczania zawartości w celu przyspieszenia dostarczania i zmniejszenia obciążenia źródła dla zasobów statycznych, takich jak obrazy, czcionki i filmy wideo. W buforowaniu sieci dostarczania zawartości zasoby statyczne są selektywnie przechowywane na strategicznie umieszczonych serwerach, które są bardziej lokalne dla użytkownika i oferują następujące korzyści:
Ponieważ większość ruchu internetowego jest statyczna (na przykład obrazy, czcionki i klipy wideo), buforowanie sieci dostarczania zawartości zmniejsza opóźnienie sieci, przenosząc zawartość bliżej użytkownika, zmniejszając w ten sposób odległość, z jaką dane są przesyłane.
Odciążając pracę z siecią dostarczania zawartości, buforowanie może zmniejszyć ruch sieciowy i obciążenie serwera pochodzenia. Zmniejsza to koszty i wymagania dotyczące zasobów aplikacji, nawet jeśli istnieje duża liczba użytkowników.
Podobnie jak w przypadku implementacji buforowania w przeglądarce internetowej, można kontrolować sposób buforowania w sieci dostarczania zawartości, wysyłając nagłówki dyrektywy cache-directive. Nagłówki dyrektywy pamięci podręcznej to nagłówki HTTP, które są zwykle dodawane przez serwer pochodzenia. Chociaż większość tych nagłówków została pierwotnie zaprojektowana do obsługi buforowania w przeglądarkach klienckich, są one również używane przez wszystkie pośrednie pamięci podręczne, takie jak sieci dostarczania zawartości.
Dwa nagłówki mogą służyć do definiowania aktualności pamięci podręcznej: Cache-Control
i Expires
.
Cache-Control
jest bardziej aktualny i ma pierwszeństwo przed parametrem Expires
, jeśli oba istnieją. Istnieją również dwa typy nagłówków używanych do walidacji (nazywanych modułami sprawdzania poprawności): ETag
i Last-Modified
.
ETag
jest bardziej aktualna i ma pierwszeństwo przed parametrem Last-Modified
, jeśli obie są zdefiniowane.
Nagłówki dyrektywy pamięci podręcznej
Usługa Azure Content Delivery Network obsługuje następujące nagłówki dyrektywy HTTP cache-directive, które definiują czas trwania pamięci podręcznej i udostępnianie pamięci podręcznej.
Kontrolka pamięci podręcznej:
- Wprowadzono w protokole HTTP 1.1, aby zapewnić wydawcom sieci Web większą kontrolę nad ich zawartością i sprostać ograniczeniom nagłówka
Expires
. -
Expires
Zastępuje nagłówek, jeśli jest on zdefiniowany iCache-Control
zdefiniowany. - W przypadku użycia w żądaniu HTTP od klienta do sieci dostarczania zawartości POP
Cache-Control
jest domyślnie ignorowane przez wszystkie profile usługi Azure Content Delivery Network. - W przypadku użycia w odpowiedzi HTTP z serwera pochodzenia do sieci dostarczania zawartości POP
Cache-Control
jest domyślnie honorowany przez wszystkie profile usługi Azure Content Delivery Network. Usługa Azure CDN honoruje również zachowania buforowania dla dyrektyw Cache-Control w RFC 7234 — Protokół transferu hipertekstowego (HTTP/1.1): buforowanie (ietf.org).
Wygasa:
- Starszy nagłówek wprowadzony w protokole HTTP 1.0; obsługiwane w celu zapewnienia zgodności z poprzednimi wersjami.
- Używa godziny wygaśnięcia opartej na dacie z drugą precyzją.
- Podobnie jak
Cache-Control: max-age
. - Używany, gdy
Cache-Control
nie istnieje.
Pragma:
- Domyślnie nie są honorowane przez usługę Azure Content Delivery Network.
- Starszy nagłówek wprowadzony w protokole HTTP 1.0; obsługiwane w celu zapewnienia zgodności z poprzednimi wersjami.
- Używany jako nagłówek żądania klienta z następującą dyrektywą:
no-cache
. Ta dyrektywa nakazuje serwerowi dostarczenie nowej wersji zasobu. -
Pragma: no-cache
jest równoważne zCache-Control: no-cache
.
Moduły sprawdzania poprawności
Gdy pamięć podręczna jest nieaktualna, moduły sprawdzania poprawności pamięci podręcznej HTTP są używane do porównywania buforowanej wersji pliku z wersją na serwerze pochodzenia.
Usługa Azure CDN Standard firmy Microsoft obsługuje tylko Last-Modified
usługę .
Uwaga
Usługa Azure CDN firmy Microsoft (klasyczna) nie obsługuje ETag
usługi .
Ostatnia modyfikacja:
- Określa datę i godzinę ostatniej modyfikacji zasobu przez serwer pochodzenia. Na przykład
Last-Modified: Thu, 19 Oct 2017 09:28:00 GMT
. - W przypadku zawartości większej niż 8 MB serwery zaplecza pochodzenia powinny zachować spójne
Last-Modified
znaczniki czasu na zasób. Zwracanie niespójnychLast-Modified
czasów z serwerów zaplecza spowoduje błędy niezgodności modułu sprawdzania poprawności i spowoduje błędy HTTP 5XX. Usługa Azure Storage może nie obsługiwać spójnychLast-Modified
sygnatur czasowych w replikach, co może powodować podobne błędy niezgodności modułu sprawdzania poprawności. - Pamięć podręczna weryfikuje plik przy użyciu,
Last-Modified
wysyłającIf-Modified-Since
nagłówek z datą i godziną w żądaniu. Serwer pochodzenia porównuje datę z nagłówkiemLast-Modified
najnowszego zasobu. Jeśli zasób nie został zmodyfikowany od określonego czasu, serwer zwraca kod stanu 304 (niezmodyfikowany) w odpowiedzi. Jeśli zasób został zmodyfikowany, serwer zwraca kod stanu 200 (OK) i zaktualizowany zasób.
Określanie, które pliki mogą być buforowane
Nie wszystkie zasoby można buforować. W poniższej tabeli przedstawiono zasoby, które można buforować na podstawie typu odpowiedzi HTTP. Zasoby dostarczane z odpowiedziami HTTP, które nie spełniają wszystkich tych warunków, nie mogą być buforowane.
Warunki | Wartość |
---|---|
Kody stanu HTTP | 200, 203, 206, 300, 301, 410, 416 |
Metody HTTP | GET, HEAD |
Limity rozmiaru pliku | 300 GB |
Aby buforowanie działało na zasobie, serwer pochodzenia musi obsługiwać wszystkie żądania HEAD i GET HTTP, a wartości długości zawartości muszą być takie same dla wszystkich odpowiedzi HEAD i GET HTTP dla zasobu. W przypadku żądania HEAD serwer pochodzenia musi obsługiwać żądanie HEAD i musi odpowiadać przy użyciu tych samych nagłówków, jak w przypadku otrzymania żądania GET.
Uwaga
Żądania zawierające nagłówek autoryzacji nie będą buforowane.
Domyślne zachowanie buforowania
Domyślnym zachowaniem buforowania dla usługi Azure CDN jest honorowanie zawartości źródła i pamięci podręcznej przez dwa dni.
Pochodzenie honoru: to ustawienie określa, czy należy przestrzegać nagłówków dyrektywy cache-(Cache-Control
lub Expires
), jeśli znajdują się one w odpowiedzi HTTP z serwera pochodzenia.
Czas trwania pamięci podręcznej usługi CDN: to ustawienie określa czas trwania, przez który zasób jest buforowany w usłudze Azure CDN. Jeśli źródło Honor jest włączone, a odpowiedź HTTP z serwera pochodzenia zawiera Cache-Control: max-age
nagłówek lub Expires
, usługa Azure CDN będzie używać czasu trwania określonego przez te nagłówki zamiast domyślnego okresu dwudniowego.
Uwaga
Usługa Azure CDN nie gwarantuje minimalnego czasu przechowywania obiektu w pamięci podręcznej. Buforowana zawartość może zostać wykluczony z pamięci podręcznej sieci dostarczania zawartości, zanim wygaśnie, jeśli zawartość nie jest żądana tak często, aby zapewnić miejsce na częściej żądaną zawartość.
Następne kroki
- Aby dowiedzieć się, jak dostosować i zastąpić domyślne zachowanie buforowania w sieci dostarczania zawartości za pomocą reguł buforowania, zobacz Kontrolowanie zachowania buforowania usługi Azure Content Delivery Network przy użyciu reguł buforowania.
- Aby dowiedzieć się, jak używać ciągów zapytań do kontrolowania zachowania buforowania, zobacz Control Azure Content Delivery Network caching behavior with query strings (Kontrolowanie zachowania buforowania usługi Azure Content Delivery Network za pomocą ciągów zapytań).