CDN i buforowanie krawędzi
CDN i buforowanie krawędzi
1) Cele
CDN (Content Delivery Network) zmniejsza opóźnienie i obciążenie pochodzenia: buforuje statyczną i warunkowo dynamiczną zawartość w węzłach krawędziowych, zapewnia skalę, stabilność i bezpieczeństwo (DDoS/WAF), dodaje logikę krawędzi (odpowiedzi/żądania pisania, uwierzytelnianie, A/B).
2) Model pamięci podręcznej i klucze
Клий кеба = 'scheme + host + path +? (wybrane parametry zapytania) + headers (Vary)'
Zalecane:- Normalizować zapytanie ('utm _' wykluczyć, pozostawić' v ',' lang ',' country ', itp.).
- Zminimalizuj 'Vary' (na przykład 'Vary: Accept-Encoding, Accept-Language'), unikaj 'Vary:'.
- Dla API - klucz z identyfikatora trasy + (semver, hash, build id) + niezbędne zapytanie/nagłówki (na przykład 'X-Tenant').
- Dla spersonalizowanych stron - segmentacja krawędzi (przez cookie/geo) lub Skip-Cache.
3) Polityka i nagłówki TTL
Pozycje bazowe:- „Cache-Control: publiczny, maksymalny wiek = 300, s-maxage = 3600, stale-while-revalidate = 60, stale-if-error = 300”
- „Sterowanie zastępcze” (jeżeli jest obsługiwane) jest odrębną polityką dla CDN innych niż przeglądarka.
- „ETag ”/„ Last-Modified” - wnioski warunkowe (304) i oszczędności ruchu.
- W przypadku osób prywatnych: „Cache-Control: private, no-store”, jeśli nie jest buforowany.
- API pozwalające na pamięć podręczną: 'Cache-Control: public, s-maxage = 60' + klucz wersji.
Zalecane podejście: zasoby „wieczne” (z odciskiem palca w nazwie pliku) → „max-age = 31536000, immutable”; „strony/JSON” → krótki TTL + SWR.
4) Niepełnosprawność: oczyszczanie/miękkie oczyszczanie
Purge by URL: pointwise.
Purge by tag/key: group purges (use 'Surrogate-Key: products: 42 category: food').
Soft-purge: znaczniki treści „przestarzałe”, krawędź daje stale aż do otrzymania nowej wersji.
„Ciepłe” ocieplenie: po wdrożeniu, wyciągnij główne strony z regionów.
5) Wzory wydajności krawędzi
Stale-While-Revalidate: szybka odpowiedź z „przestarzałą” kopią + aktualizacją tła.
Prefetch zasobów krytycznych (preload, preconnect, dns-prefetch).
Kompresja: gzip/br (dla tekstu), zstd jeśli obsługiwany jest CDN.
HTTP/2/3 (QUIC): multipleksowanie i mniej opóźnień.
Wznowienie sesji TLS i zszywanie OCSP na obwodzie.
6) Obrazy i filmy
Optymalizacja obrazu na krawędzi: resize/format negotiate ('Accept: image/avif, webp'), авта-WebP/AVIF, DPR-варианта.
Ładunek leniwy („srcset”, „rozmiary”).
Wideo: HLS/DASH, rozdrobniony MP4, tarcza pochodzenia (centralna pamięć podręczna) w celu zmniejszenia burzy.
Miniaturowe usługi i podpisane adresy URL dla prywatnych obrazów.
7) Bezpieczeństwo na obwodzie
WAF: zasady OWASP, blokowanie kraju/ASN, limity stawek z kluczem (IP + ciasteczko + token).
DDoS: szorowanie L3/4, kontrolery L7, wyzwania JS/turnstile.
Podpisane adresy URL/pliki cookie dla zasobów prywatnych (wideo/raporty): TTL + HMAC/EdDSA.
Ogrodzenia geograficzne i zgodność (na przykład zakazanie regionów).
8) Obliczanie krawędzi (logika na krawędzi)
Sprawy:- Personalizacja bez łamania pamięci podręcznej: segmenty (A/B), geo, język na krawędzi i zawartość jest buforowana.
- Pisanie odpowiedzi/tytułów, przekierowań, podziałów AB.
- Uwierzytelnianie oparte na tokenie: weryfikacja podpisu JWT, powiązanie klucza.
- Canary przez ciasteczko/procent: część ruchu do nowego backendu.
Przykłady technologii to Cloudflare Workers/Trwałe obiekty, Fast Compute @ Edge, AWS Lambda @ Edge.
9) Multi-CDN i globalny obwód
Przyczyny: zasięg, SLA, koszty, ograniczenia regionalne, izolacja incydentów.
GSLB/Traffic Steering: na geo/opóźnienie/rzeczywiste błędy; kontrole zdrowotne z wielu punktów obserwacyjnych.
Schemat pojedynczego klucza/nagłówka (Surrogate-Key), zsynchronizowane zasady oczyszczania.
Tarcza pochodzenia jest powszechna dla wszystkich CDN, aby nie „uderzyć” pochodzenia z niepełnosprawnościami.
10) Pozyskiwanie drewna i mierniki
Zbierz:- Współczynnik trafienia (pamięć podręczna, CDN → krawędź/pochodzenie), współczynnik trafienia bajtów.
- Latency p50/p95/p99, wskaźnik błędów według kodu/trasy.
- Źródła: RPS/bajty/błędy (ochrona przed zbędnymi brakami).
- Wykresy regionalne (według POP/ASN/kraj).
- Zintegruj się z obserwowalnością: Prometeusz (wyciągnąć przez eksporterów), Grafana/OTel (push z kłód krawędzi).
11) SEO - SPA/SSR
Strony SEO z SWR i krótkim TTL są szybkie i świeże.
Mapa strony/roboty - buforujemy przez długi czas, ale pozwalamy na miękkie oczyszczenie.
Pracownik serwisowy: buforowanie offline, prefetch ścieżek krytycznych, aktualizacje docelowe.
12) Konfiguracje próbki i nagłówki
12. 1 Profile kontroli pamięci podręcznej
Statyczny z odciskiem palca:
Cache-Control: public, max-age=31536000, immutable
HTML/SSR:
Cache-Control: public, max-age=60, s-maxage=600, stale-while-revalidate=60, stale-if-error=600
Surrogate-Control: max-age=600, stale-while-revalidate=120
API (sklep buforowany):
Cache-Control: public, s-maxage=60
Vary: Accept-Encoding
12. 2 NGINX (pochodzenie) - normalizacja zapytań/nagłówków
nginx map $arg_utm_source $utm_skip { default 1; "" 0; }
map $args $normalized_args {
default "";
"~(^ &)v=([a-z0-9]+)(& $)" "v=$2";
}
proxy_cache_key "$scheme://$host$request_uri?$normalized_args";
add_header Surrogate-Key "product:{{id}} category:{{cat}}";
12. 3 Szybko VCL - miękkie oczyszczanie i klucze
vcl sub vcl_recv {
set req. hash += req. http. host req. url. path;
set req. hash += querystring. decode(req. url, "v,lang");
if (req. method == "PURGE") {
if (req. http. Fastly-Soft-Purge) { softpurge; } else { purge; }
return (synth(200, "purged"));
}
}
sub vcl_deliver {
set resp. http. Surrogate-Key = "product:42 category:food";
}
12. 4 Pracownicy w chmurze - podpisane adresy URL
js export default {
async fetch(req, env) {
const url = new URL(req. url);
if (url. pathname. startsWith("/private/")) {
const token = url. searchParams. get("token");
if (!token! verify(token, env. SIGNING_KEY)) return new Response("Forbidden", { status: 403 });
}
return fetch(req);
}
}
12. 5 Lambda @ Edge - Opcje Geo
js exports. handler = async (event) => {
const req = event. Records[0].cf. request;
const country = req. headers['cloudfront-viewer-country']?.[0]?.value 'US';
if (country === 'DE') req. headers['accept-language'] = [{ key:'Accept-Language', value:'de' }];
return req;
};
13) Dane prywatne i API
Nigdy nie buforuj prywatnych odpowiedzi bez izolacji kluczy (per-user/per-token).
Użyj podpisanych plików cookie/nagłówki i 'Vary: Autoryzacja' w ścisłej kontroli (inaczej - cache-bust).
Bezpieczna alternatywa: oddzielna warstwa publiczna (buforowana) i prywatne inkluzje (skład ESI/krawędzi).
14) Zasady geo/treści
Ograniczenia licencyjne: geo-odmowa na krawędzi, pośredników zamiast blokowania pochodzenia.
Wiek/banery regulacyjne - render na krawędzi (nie punch cache).
15) Anty-wzory
'no-cache, no-store' dla całego miejsca → utrata efektu CDN.
'Vary' na niestabilnych nagłówkach (na przykład 'User-Agent') → kardynalność.
Oczyścić cały pamięć podręczną na każdym wydaniu.
Krótkie TTL bez SWR → burza do pochodzenia.
Osobiste strony są buforowane bez segmentacji/token kluczy.
Brak tarczy pochodzenia → wiele równoległych braków.
16) Lista kontrolna wdrażania (0-45 dni)
0-10 dni
Kategoria zasobów: niezmienne/HTML/API.
Włącz gzip/br, HTTP/2/3, normalizację zapytań, 'klucz zastępczy'.
Wprowadź SWR/IFE i oczyszczenie podstawy.
11-25 dni
Optymalizacja obrazu krawędzi (rozmiar/format), tarcza pochodzenia.
Podpisane adresy URL dla mediów prywatnych, profile WAF/DDoS.
Deski rozdzielcze: wskaźnik trafienia, pobrania pochodzenia, p95 przez POP.
26-45 dni
Strategia multi-CDN lub GSLB, wagi kanarkowe na obwodzie.
Krawędź-obliczenie dla segmentacji/AB/geo, miękkie-purge przez klawisze.
Automatyczne ocieplenie i oczyszczanie w CI/CD.
17) Wskaźniki zapadalności
Współczynnik trafienia bajtów ≥ 85% dla statycznej, ≥ 60% dla dynamiki HTML/warunkowej.
Pochodzenie RPS stabilne w szczytach (brak „burz”).
p95 TTFB zmniejszyło się o ≥ 30% w głównych regionach.
% stałych odpowiedzi na incydenty> 90% (użytkownik ledwo zauważył).
Kompletna automatyzacja kluczy do oczyszczania rurociągów.
18) Wniosek
Skutecznym układem CDN są klucze/TTL/opcje, dyscyplina niepełnosprawności i logika krawędzi. Dodaj SWR/IFE, tarczę pochodzenia, optymalizację mediów i silne bezpieczeństwo (WAF, podpisane adresy URL). Standaryzuj mierniki i zintegruj czystkę z CI/CD - i otrzymasz szybki, ekonomiczny i stabilny obwód, gotowy do obciążeń szczytowych i czarnych łabędzi.