Bufory krawędzi i POP
1) Co to jest POP i dlaczego jest „krawędź”
POP (Point of Presence) to sieć dostarczania treści (CDN/edge) węzeł geograficznie blisko użytkownika. Pamięć podręczna krawędzi - warstwa odpowiedzi magazynowania bezpośrednio w POP, która zmniejsza:- Opóźnienie (mniej RTT przed klientem).
- Ładunek i koszt na pochodzenie (odciążenie).
- Ruch między regionami/chmurami (oszczędzanie jaj).
Krawędź to nie tylko pamięć podręczna. Nowoczesne POP obsługują routing L7, filtry WAF/bot, limit szybkości, A/B/kanary, transformacje i obliczenia krawędzi (skrypty/funkcje).
2) Architektury buforowania krawędzi
2. 1 Płaski vs wielopoziomowy
Każdy POP idzie do pochodzenia. Proste, ale drogie dla pochodzenia.
POP → Tarcza POP (centralna pamięć podręczna) → pochodzenie. Tarcza gromadzi pamięci podręcznej brakuje, tworzy parasol dla pochodzenia.
2. 2 Segmenty regionalne
Odrębne domeny buforowania według regionu/jurysdykcji (RODO/lokalizacja danych).
Wariant: „EU-only POP” i „Global POP”, oddzielne klucze/zasady.
2. 3 Anycast + opóźnienie/routing geo-świadomy
Anycast prowadzi klienta do najbliższego POP za pośrednictwem BGP.
Przełączniki Geo/Latency-Aware między POP/regionalne puli na aktywnych pomiarów RTT/błędów.
3) Klucze pamięci podręcznej, 'Vary', TTL i świeżość
3. 1 Projekt klucza
Normalizuj zapytania: sortuj parametry zapytań, usuwaj szum (utm, ref).
Należy uwzględnić osie semantyczne: 'lokator', 'locale', 'schemat version' ('v = 3'), ale unikać PII.
W przypadku treści prywatnych należy oddzielić pamięć podręczną publiczną i prywatną (patrz: § 7).
3. 2 Cache Control (HTTP)
Tytuły:- „Cache-Control: public, max-age = 60, s-maxage = 300, stale-while-revalidate = 60, stale-if-error = 120”
- „ETag ”/„ Last-Modified” dla warunkowych BP (304).
- Różnica: zminimalizować kardynalność ('Accept-Encoding', 'Accept-Language', czasami 'Authorization '/' Cookie' dla ścieżek prywatnych).
- Micro-cache dla „bliskiego głośnika”: 1-5 sekund + SWR.
3. 3 Strategie nieustanne
SWR (stale-while-revalidate): udzielić przestarzałej odpowiedzi i zaktualizować z tłem.
SIE (stale-if-error): w przypadku błędu pochodzenia używamy pamięci podręcznej przed 'SIE' -TTL.
Miękki/twardy TTL: miękki termin (może stale), twardy (pełna miss).
4) Niepełnosprawność: jak zaktualizować „krawędź”
4. 1 Według kluczy i tagów
PURGE/BAN by URL/prefix - szorstki, ale szybki.
Klucz zastępczy/tagi: przypisanie znaczników do obiektów („artykuł: 42”, „kategoria: 7”), zakaz według tagu - masowa niepełnosprawność bez brutalnej siły URL.
4. 2 Niepełnosprawność zdarzeń
Przy zmianie danych pochodzenia, opublikować zdarzenia (Kafka/NATS) → krawędź wyłączone połączenie BAN/PURGE/soft-expire.
4. 3 Artefakt wersioning
Dla statycznego - zawartość-hash w nazwie pliku.
W przypadku interfejsów API zmień wersję kluczową ('v = 4') dla niezgodnych ze wspólnym rynkiem zmian.
5) Ochrona i wydajność pochodzenia
5. 1 Osłona pochodzenia
Włącz Shield POP jako pojedynczy punkt miss → pomnożyć burzę przez pochodzenie.
5. 2 Koalescencja/lot jednoosobowy
Na krawędzi, jedna prośba „uderza” pamięci podręcznej na miss; reszta czeka (bez nadrobienia zaległości).
5. 3-Rate-limit/Kolejka/Shedding на edge
W przypadku przeciążenia należy zrzucić żądania o niskim priorytecie/anonimowe do POP, a nie pochodzenie.
5. 4 Podpisany adres URL/podpisane pliki cookie
Pochodzenie jest ukryte za krawędzią. Dostęp do treści prywatnych - poprzez podpisane linki/pliki cookie z TTL i atrybutami (IP/Geo/Path), aby nie rozpowszechniać dla „wszystkich”.
6) Transport i transformacja
6. 1 HTTP/2-3 QUIC
HTTP/2: multipleksowanie, kompresja nagłówka.
HTTP/3/QUIC: mniej zamków HOL i lepiej na utraconych → kanałów poniżej p95/p99 TTFB.
6. 2 Kompresja i obrazowanie
Brotli dla tekstu, AVIF/WebP dla obrazów, rozmiar obrazu na krawędzi (rozmiary responsywne, DPR).
Warianty pamięci podręcznej według formatu/rozmiaru: klucze zawierają 'szerokość/format' (lub 'Vary: Accept '/Client-Hints).
6. 3 TLS/0-RTT (schludny)
Session replaying przyśpiesza instalację, 0-RTT może być podatny na powtórzenie → włącz tylko dla idempotent XT.
7) Public vs private edge cache
7. 1 Publiczne
"Cache-Control: public, s-maxage =... "i minimalne" Odmiana "
Nadaje się do katalogu, wiadomości, zdjęcia, statyczne CDN.
7. 2 Prywatne/spersonalizowane
Opcje:- Nie buforuj na wspólnym poziomie: 'Cache-Control: private' (pamięć podręczna przeglądarki).
- Segmentacja klucza: włączyć najemcę/użytkownika-id (lub token-hash) do klucza i zaznaczyć jako prywatnie udostępnione (ostrożnie z przechowywaniem i PII).
- Podpisane pliki cookie i Edge-auth: pamięć podręczna jest publiczna, ale dostęp przez podpis (opcje z zaszyfrowanym stanem sesji na krawędzi).
8) Obliczanie krawędzi (Pracownicy/Funkcje)
Łatwe funkcje na POP: ścieżka/nagłówki pisania, podział A/B, normalizacja klucza, logika SWR, prefetch sąsiednich zasobów.
Lokalne KV/Cache API na POP dla operacji milisekundowych.
Ograniczenia: krótkie czasy/pamięć, brak długotrwałych połączeń, staranna praca z PII/regionalność.
Pseudo-example (Pracownicy-like)
js export default {
async fetch(req, env) {
const key = normalize(req);
let res = await caches. default. match(key);
if (res) return withHitHeader(res, "HIT");
res = await fetch(req, { cf: { cacheEverything: true }});
const ttl = computeTTL(res);
eventWaitUntil(caches. default. put(key, res. clone(), { expirationTtl: ttl }));
return withHitHeader(res, "MISS");
}
}
9) Przykłady konfiguracji
9. 1 Nginx: mikro-pamięć podręczna + SWR
nginx proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api:200m inactive=30m;
map $request_method $skip_cache { default 0; POST 1; PUT 1; DELETE 1; }
server {
location /api/list {
proxy_cache api;
proxy_cache_key "$scheme://$host$uri$is_args$args";
proxy_cache_valid 200 2s; # micro-cache proxy_cache_use_stale error timeout updating;# SIE + SWR proxy_cache_background_update on;
add_header X-Edge-Cache $upstream_cache_status;
proxy_pass http://origin_pool;
}
}
9. 2 lakiery: klucze zastępcze - BAN
vcl sub vcl_recv {
if (req. method == "BAN") {
if (req. http. Surrogate-Key) {
ban("obj. http. Surrogate-Key ~ " + req. http. Surrogate-Key);
return (synth(200, "Banned"));
}
}
}
sub vcl_deliver {
set resp. http. Surrogate-Key = "article:42 tag:author:7";
set resp. http. Cache-Control = "public, s-maxage=300, stale-while-revalidate=60";
}
9. 3 Wysłannik (filtr krawędzi pamięci podręcznej)
yaml http_filters:
- name: envoy. filters. http. cache typed_config:
"@type": type. googleapis. com/envoy. extensions. filters. http. cache. v3. CacheConfig typed_config:
"@type": type. googleapis. com/envoy. extensions. http. cache. simple_http_cache. v3. SimpleHttpCacheConfig
9. 4 Zachowanie w stylu CloudFront (miniaturka)
Zachowanie A: '/images/' - długi TTL, kompresja, różnią się w formatach.
Zachowanie B: '/api/' - krótkie TTL, SWR, podpisane pliki cookie, WAF/bot.
Origin Shield jest włączony, statusy 500/502/504 → „stale-if-error”.
10) Obserwowalność, SLO i sprawozdawczość
10. 1 Metryka
cache_hit_ratio (według POP/region/trasa), byte_hit_ratio.
origin_offload = 1 − (origin_requests/ edge_requests).
TTFB/TTL według kwantyli, stale_responses_total, revalidations_total.
stampede_prevented_total, coalesced_waiters.
shield_hit_ratio (jeśli wielopoziomowy), origin_egress_bytes (koszt).
10. 2 kłody/szlaki
Dzienniki oznaczone jako „HIT/MISS/STALE/UPDATING/BYPASS”, klucz, TTL, POP, najemca.
W rozłożonych śladach należy zaznaczyć źródło („krawędź”, „pochodzenie”) i przyczynę (przedłużenie/ciągłość/błąd).
10. 3 przykłady SLO
„Дла '/api/list ': p99 TTFB ≤ 250 мoz, trafienie krawędzi ≥ 70%, uderzenie bajtowe ≥ 80%, błąd pochodzenia-offload ≥ 90%”.
„Wskaźnik odpowiedzi 'stale-if-error' ≤ 1% dziennie”.
11) Bezpieczeństwo, prywatność, zgodność
Zarządzanie WAF/bot - na krawędzi do filtrowania do pochodzenia.
Regionalność danych: przechowywać prywatne artefakty tylko w ważnych TZO; Użyj klawiszy specyficznych dla danego regionu i ACL.
Podpisy i żetony na krawędzi, nie dać prywatnych odpowiedzi z pamięci podręcznej.
Minimalizacja PII: nie włączaj danych osobowych do kluczy; szyfrować pliki cookie; krótkie TTL do personalizacji.
12) Typowe przepisy kulinarne
12. 1 „Prawie dynamiczny” (taśmy/listy)
Mikro-pamięć podręczna 1-3 z + SWR na krawędzi, włączona tarcza, pojedynczy lot, ujemna pamięć podręczna dla pustych wyników 1-5 s.
12. 2 Obraz/Chmury mediów
Recyzja/formatowanie krawędzi (WebP/AVIF), opcje pamięci podręcznej przez 'width/format', długi TTL, niepełnosprawność przez znaczniki treści.
12. 3 API z personalizacją
"Cache-Control: private 'or podpisany cookie + key-segmentation (najemca), short TTL, SWR dla" prawie publicznych "części odpowiedzi.
12. 4 Duże sprzedaży/Picks
Ocieplenie kluczowych zasobów (prewarm), zwiększenie TTL dla statyków, agresywne SWR/SIE, twarde limity pochodzenia, Shield zawarte.
13) Anty-wzory
Brak 'Vary' z różnymi odpowiedziami → wycieki/nieprawidłowe dane.
Ogromne 'Vary' → kardynalność → niski hit.
Wspólna pamięć podręczna dla prod/eksperymenty → zanieczyszczenie.
Brak jednego lotu → sztorm brakuje na pochodzenie.
SWR bez ograniczeń → aktualizować wyścigi i lawiny potwierdzić żądania.
Krawędź pamięci podręcznej prywatnych odpowiedzi jako publiczne → incydenty bezpieczeństwa.
Brak wielopoziomowego/tarczy przy ładunku na całym świecie → przegrzanie pochodzenia.
14) Lista kontrolna wdrażania
- Mapa pokrycia POP, włączyć anycast + latency-routing.
- Wybierz politykę wielopoziomową/tarczową i jednoosobową/koalescingową.
- Klucze projektowe i Vary (minimalna kardynalność, brak PII).
- Konfiguracja TTL/SWR/SIE (soft/hard TTL) i pamięci podręcznej negatywnej.
- Włącz podpisany adres URL/plik cookie, ukryj pochodzenie, włącz filtry WAF/bot.
- Organizowanie niepełnosprawności: Surogate-Key/BAN + imprezy napędzane.
- Podnieść hit/byte-hit/offload/TTFB mierniki i deski rozdzielcze per-POP.
- Rozgrzewka przed szczytami, książki startowe do burzy/przeciążenia.
- Testy prywatności/regionalności, kluczowe audyty i audyty polityczne.
- SLO/błędny budżet na kryteria krawędzi i TTL/SWR auto-słabe.
15) FAQ
P: Jak wybrać TTL na krawędzi?
Odp.: Odsuń dopuszczalny cel przestarzałości i współczynnika trafienia. Dla „bliskiej dynamiki” - 1-5 s + SWR; dla katalogów/obrazów - minuty/godziny z niepełnosprawnością według zdarzeń/tagów.
P: Kiedy jest potrzebny Shield POP?
Odp.: Z globalnym ruchem lub gorącymi klawiszami: tarcza drastycznie zmniejsza braki w pochodzeniu i stabilizuje „nadrabianie zaległości” fal.
P: Jak buforować autoryzowane odpowiedzi?
Odp.: Albo „prywatna” (przeglądarka), albo publiczna z podpisanym plikiem cookie/URL i segmentacją kluczy (bez PII), albo ogólnie obejście krytycznych danych osobowych.
P: Co zrobić z HTTP/3?
Odp.: Włącz: Telefon komórkowy/utracony kanał wygrywa szczególnie. Kontroluj kompatybilność proxy i fallback na HTTP/2.
16) Kwoty całkowite
Bufory krawędzi i sieć POP są fundamentem szybkich i ekonomicznych platform. O sukcesie decyduje prawidłowy klucz i „Varary”, rozsądne TTL/SWR/SIE, niepełnosprawność znacznika/zdarzenia, ochrona pochodzenia wielopoziomowego/tarczy, a także obserwacja (hit/offload/TTFB) oraz dyscyplina bezpieczeństwa/prywatności. Postępuj zgodnie z listą kontrolną - a „krawędź” będzie twoim akceleratorem, a nie źródłem niespodzianek.