Memorie cache şi POP
1) Ce este POP și de ce este „marginea”
POP (Point of Presence) este un nod de rețea de livrare a conținutului (CDN/edge) aproape geografic de utilizator. Memoria cache Edge - un strat de stocare a răspunsurilor direct în POP, ceea ce reduce:- Latență (mai puțin RTT înainte de client).
- Încărcare și cost pe origine (descărcare).
- Trafic între regiuni/nori (de ieșire-economisire).
Edge nu este doar o memorie cache. POP-urile moderne acceptă rutare L7, filtre WAF/bot, limită de rată, A/B/canare, transformări și muchii de calcul (scripturi/funcții).
2) arhitecturi de caching Edge
2. 1 Apartament vs niveluri
Flat: Fiecare POP merge la origine. Simplu, dar scump pentru origine.
Etajat/Scut: POP → Shield POP (memorie cache centrală) → origine. Scutul acumulează pierderi de memorie cache, creează o umbrelă pentru origine.
2. 2 Segmente regionale
Domenii separate de caching pe regiuni/jurisdicții (GDPR/localizare date).
Variantă: „POP-uri numai pentru UE” și „POP-uri globale”, chei/reguli separate.
2. 3 Anycast + latenţă/rutare geo-conştientă
Anycast aduce clientul la cel mai apropiat POP prin BGP.
Comutatoare conștiente de geo/latență între piscine POP/regionale pe măsurători active RTT/eroare.
3) chei cache, „Vary”, TTL și prospețime
3. 1 Design cheie
Normalizați interogările: sortați parametrii de interogare, eliminați zgomotul (utm, ref).
Includeți axe semantice: 'chiriaș', 'local', 'versiune schemă' ('v = 3'), dar evitați PII.
Pentru conținut privat, separați memoria cache publică și privată (a se vedea § 7).
3. 2 Controlul memoriei cache (HTTP)
Titluri:- 'Cache-Control: public, max-age = 60, s-maxage = 300, stale-în timp ce-revalidat = 60, vechi-dacă-eroare = 120'
- "ETag "/" Last-Modified 'for condițional GETs (304).
- Vary: minimizați cardinalitatea ('Accept-Encoding', 'Accept-Language', uneori 'Autorizare '/' Cookie' pentru căi private).
- Micro-cache pentru „near-speaker”: 1-5 secunde + SWR.
3. 3 Strategii vechi
SWR (stale-în timp ce-revalidate): da un răspuns depășit și actualiza cu fundalul.
SIE (stale-if-error): în cazul unei erori de origine, folosim memoria cache înainte de „SIE” -TTL.
Soft/Hard TTL: termen moale (poate vechi), greu (complet dor).
4) Dizabilitate: cum să actualizați „marginea”
4. 1 După cheie și după tag-uri
PURGE/BAN prin URL/prefix - dur, dar rapid.
Surogat-Key/Tags: atribuie etichete obiectelor ('articol: 42', 'categorie: 7'), ban by tag - handicap în masă fără forţă brută URL.
4. 2 Handicap de eveniment
Atunci când schimbați datele de origine, publicați evenimente (Kafka/NATS) → margine dezactivat apel BAN/PURGE/soft-expiră.
4. 3 Versioning artefact
Pentru static - conținut-hash în numele fișierului.
Pentru API-uri, schimbați versiunea cheie ('v = 4') pentru modificări incompatibile.
5) Protecția și performanța originii
5. 1 Ecranare de origine
Activați Shield POP ca un singur punct de miss → înmulțiți furtuna cu originea.
5. 2 Coalescing/un singur zbor
La margine, o cerere „lovește” memoria cache la o ratare; restul de așteptare (fără busculadă).
5. 3 Limita de tarif/Coadă/Vărsare на margine
Dacă este supraîncărcat, lăsați cererile cu prioritate redusă/anonime la POP, nu la origine.
5. 4 URL semnat/Cookie semnat
Originea este ascunsă în spatele marginii. Acces la conținut privat - prin link-uri/cookie-uri semnate cu TTL și atribute (IP/Geo/Path), pentru a nu distribui „tuturor”.
6) Transport și transformare
6. 1 HTTP/2-3 и QUIC
HTTP/2: multiplexare, compresie antet.
HTTP/3/QUIC: mai puține încuietori HOL și mai bine pe canalele de → pierdute sub p95/p99 TTFB.
6. 2 Compresie și imagini
Brotli pentru text, AVIF/WebP pentru imagini, redimensionarea imaginilor la margine (dimensiuni receptive, DPR).
Variante de cache după format/dimensiune: tastele includ „lățime/format” (sau „Vary: Accept ”/Client-Sugestii).
6. 3 TLS/0-RTT (îngrijit)
Reluarea sesiunii accelerează instalarea, 0-RTT poate fi vulnerabilă la reluare → permite numai pentru GET-uri idempotente.
7) cache public vs privat edge
7. 1 Public
'Cache-Control: public, s-maxage =... "şi minimal" Vary "
Potrivit pentru catalog, știri, imagini, CDN static.
7. 2 Privat/Personalizat
Opțiuni:- Nu cache la nivel partajat: „Cache-Control: privat” (memoria cache a browserului).
- Segmentarea cheilor: includeți chiriașul/id-ul de utilizator (sau token-hash) în cheie și marcați ca partajat privat (atent cu stocarea și PII).
- Cookie-uri semnate și Edge-auth: cache-ul este public, dar accesul prin semnătură (opțiuni cu stare de sesiune criptată pe margine).
8) Edge-calcul (lucrători/funcții)
Funcții ușoare pe POP: rescrierea căii/anteturilor, împărțirea A/B, normalizarea cheii, logica SWR, prefetchul resurselor vecine.
API local KV/Cache pe POP pentru operații milisecunde.
Limitări: scurte intervale de timp/memorie, lipsa conexiunilor de lungă durată, lucrul atent cu PII/regionalitate.
Pseudo-exemplu (Workers-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) Exemple de configurare
9. 1 Nginx: micro-cache + 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 Lac: chei surogat и 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 Envoy (filtru memorie cache)
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 Comportament în stil CloudFront (miniatură)
Comportament A: '/images/' - TTL lung, compresie, variază în formate.
Comportament B: '/api/' - scurt TTL, SWR, cookie semnat, protecție WAF/bot.
Scutul de origine este activat, statusurile 500/502/504 → 'stale-if-error'.
10) Observabilitate, SLO și raportare
10. 1 Măsurători
cache_hit_ratio (după POP/regiune/rută), byte_hit_ratio.
origin_offload = 1 − (origin_requests/ edge_requests).
TTFB/TTL după cantități, stale_responses_total, revalidations_total.
stampede_prevented_total, coalesced_waiters.
shield_hit_ratio (dacă sunt pe niveluri), origin_egress_bytes (cost).
10. 2 Busteni/Trasee
Jurnalele etichetate "HIT/MISS/STALE/ACTUALIZARE/BYPASS', cheie, TTL, POP, chiriaș.
În urmele distribuite, marcați sursa ('edge', 'origin') și cauza (revalidate/stale/error).
10. 3 exemple SLO
„Для ”/api/list„: p99 TTFB ≤ 250 мс, lovit de margine ≥ 70%, lovit de octet ≥ 80%, eroare de origine-descărcare ≥ 90% ”.
„Rata răspunsurilor” stale-if-error „≤ de 1% pe zi”.
11) Securitate, confidențialitate, conformitate
WAF/bot management - pe margine pentru filtrarea la origine.
Regionalitatea datelor: stocați artefacte private numai în POP-uri valabile; Utilizați chei și ACL-uri specifice regiunii.
Semnături și jetoane pe margine, nu dau răspunsuri private din memoria cache publică.
Minimizarea PII: nu includeți datele cu caracter personal în chei; criptarea cookie-urilor; TTL-uri scurte pentru personalizare.
12) Rețete tipice
12. 1 „Aproape dinamic” (benzi/liste)
Micro-cache 1-3 cu + SWR pe margine, scut activat, un singur zbor, negativ-cache pentru rezultate goale 1-5 s.
12. 2 Imagini/Nori Media
Edge recise/formatare (WebP/AVIF), opțiuni de memorie cache prin „lățime/format”, TTL lung, dizabilitate prin tag-uri de conținut.
12. 3 API-uri cu personalizare
'Cache-Control: private' or semnat cookie + key-segmentare (chiriaș), TTL-uri scurte, SWR-uri pentru părți „aproape publice” ale răspunsului.
12. 4 vânzări mari/ponturi
Încălzirea resurselor cheie (prewarm), creșterea TTL pentru statică, SWR/SIE agresiv, limite dure pentru origine, Shield inclus.
13) Anti-modele
Nu 'Vary' cu răspunsuri diferite → scurgeri/date incorecte.
Imens 'Vary' → cardinalitate → lovitură scăzută.
Cache comun pentru prod/experimente → contaminare.
Nicio furtună → fără zbor nu ratează originea.
SWR fără restricții → actualizează cursele și validează cererile de avalanșă.
Memoria cache a răspunsurilor private ca incidente de securitate → publică.
Absența nivelurilor/scutului la încărcare la nivel mondial → supraîncălzire de origine.
14) Lista de verificare a implementării
- Acoperire POP hartă, activați anycast + rutare latență.
- Selectați politicile pe niveluri/scut și un singur zbor/coalescing.
- Design chei și Vary (cardinalitate minimă, nu PII).
- Configurați TTL/SWR/SIE (soft/hard TTL) și memoria cache negativă.
- Activați URL-ul semnat/cookie, ascundeți originea, activați filtrele WAF/bot.
- Organizați dizabilitatea: Surogat-Key/BAN + condus de evenimente.
- Raise hit/byte-hit/offload/TTFB metrics and per-POP dashboards.
- Warm-up înainte de vârfuri, runbooks pentru furtună/supraîncărcare.
- Teste de confidențialitate/regionalitate, audituri cheie și de politică.
- SLO/buget eronat pentru margine și TTL/SWR criterii auto-tweak.
15) ÎNTREBĂRI FRECVENTE
Î: Cum de a alege TTL pe margine?
R: Împingeți obiectivul obsolescenței admisibile și al raportului de succes. Pentru "near-dynamics' - 1-5 s + SWR; pentru directoare/imagini - minute/ore cu handicap după evenimente/etichete.
Î: Când este necesar Shield POP?
R: Cu trafic global sau chei fierbinți: scutul reduce dramatic ratările originii și stabilizează undele „de recuperare”.
Î: Cum pot cache răspunsurile autorizate?
R: Fie „privat” (browser), fie public cu cookie/URL semnat și segmentarea cheilor (fără PII), fie, în general, by-pass pentru datele personale critice.
Î: Ce să faci cu HTTP/3?
R: Activare: Mobile/lost channel câștigă în special. Controlați compatibilitatea proxy-ului și a rezervei pe HTTP/2.
16) Totaluri
Edge caches și rețeaua POP sunt fundamentul platformelor de mare viteză și economice. Succesul este determinat de cheia corectă și de „Vary”, TTL/SWR/SIE rezonabil, tag/eveniment handicap, niveluri/protecție de origine scut, precum și de observare (hit/offload/TTFB) și de securitate/disciplina de confidențialitate. Urmați lista de verificare - iar „marginea” va fi acceleratorul, nu o sursă de surprize.