CDN- und Latenzreduktionsoptimierung
1) Ziele und Verzögerungskarte
Latency = DNS + TCP/TLS + TTFB (Server/Origin/Cache) + Content Delivery (RTT × Volumen) + Client Renderer.
Optimierung = Wir reduzieren die Anzahl der RTTs, reduzieren die Bytes und bringen die Berechnungen/den Cache näher an den Benutzer.
2) CDN-Architektur
Anycast POPs ist ein naher Knoten für BGP-Routing.
Tiered caching/Origin Shield ist eine „Regenschirm“ -Zwischenschicht, die den Miss-Sturm auf das Origin reduziert.
Geo-/Regionalrouting - Tenant/Jurisdiktionsbindung (Datenhoheit, Lizenzen).
Failover - Standby-Origin/Region, Gesundheitstests und Schnellschalter.
3) Cache: Schlüssel, Überschriften, Strategien
3. 1 Cache-Schlüssel (Cache-Schlüssel)
Die Standardeinstellung ist 'scheme + host + path +? query'.
Fügen Sie nur die gewünschten Parameter hinzu ('? v =','? lang =','? tenant ='). Der Rest ist in ignore-params.
'Vary' ist das Minimum: 'Accept-Encoding', 'Accept-Language' (wenn die Wahrheit benötigt wird), 'Authorization' bricht normalerweise den Cache.
3. 2 Politik
Öffentliche Statik: 'Cache-Control: public, max-age = 31536000, immutable' + rev (hash im Namen).
Halbdynamik (Kataloge, Regeln, FAQ): 's-maxage = 300, stale-while-revalidate = 600, stale-if-error = 86400'.
API-GET: Verwenden Sie ETag/Last-Modified, 'SWR/SIE', aktivieren Sie Coalescing (eine Hotkey-Anforderung).
Privat: Persönliche Antworten - am Perimeter über Edge-Compute (ESI/kv) oder Per-Tenant-Cache.
3. 3 Anti-Sturm
Fordern Sie Coalescing an - brechen Sie gleichzeitige Miss-Anfragen ab.
Serve-stale - Geben Sie ein veraltetes Objekt, wenn ein Origin fehlschlägt.
Background revalidation - Aktualisieren Sie im Hintergrund.
4) HTTP/2-3, TCP/TLS und frühe Rückkehr
HTTP/2: Multiplex, Header-Komprimierung; begrenzen Sie' max concurrent streams', große Überschriften.
HTTP/3 (QUIC): starker Rückgang der TTFB bei mobilen/hohen Verlusten; Achten Sie auf Initial-Schwellenwerte und Retry.
TLS 1. 3: 1-RTT handshake; OCSP stapling; HSTS.
0-RTT: nur für idempotente' GET 'und wenn Replay-Risiken berücksichtigt werden.
103 Early Hints: frühe' Link: rel = preload 'für kritische Ressourcen.
Preconnect / DNS-prefetch: `<link rel="preconnect" href="https://cdn. example">`.
5) Edge-Compute und „subtile Personalisierung“
Am Rand: Header-Zählung, Geo/Tenant-Fixierung, A/B-Markierung, einfache Personalisierung ohne Aufforderung zum Origin.
Regel: PII nicht auf POP-Knoten speichern; nur Aggregate/öffentliche Daten zwischenspeichern.
6) Medien- und Formatoptimierung
Bilder: automatische Konvertierung in WebP/AVIF, resize-on-edge, 'srcset/sizes', 'lazyload'.
Kompression: Brotli für Texte (HTML/CSS/JS/JSON), gzip fallback.
Video: HLS/DASH, CDN-Segment Caching, 'preload = metadata', Poster.
Schriftarten: subset + 'font-display: swap'; Hosting mit langem Cache.
Kritische CSS: inline ersten Bildschirm; Der Rest ist async.
7) API-Muster und Caching
Idempotent GET - Zwischenspeichern von Abfrageschlüsseln (einschließlich Datenversion).
ETag: starker Payload-Hash + „If-None-Match“.
Surrogate-Control (CDN-Spezifität) zur Unterscheidung vom Client 'Cache-Control'.
Signierte URLs - für private Statik/Medien.
GraphQL: Normalisieren Sie den Cache-Schlüssel nach Operation/Variablen; Partielles Caching/Resolver-Cache verwenden.
WebSockets: für Echtzeit - Nachrichten reduzieren, komprimieren (permessage-deflate), WS-Shards näher am Benutzer positionieren.
8) Beispiele für Konfigurationen
8. 1 NGINX (Origin: Zwischenspeichern von API-GET)
nginx
We give SWR and ETag location/api/v1/catalog/{
proxy_cache api_cache;
proxy_cache_key "$scheme$request_method$host$uri$is_args$args";
proxy_cache_valid 200 5m;
proxy_cache_use_stale updating error timeout http_500 http_502 http_503 http_504;
add_header Cache-Control "public, s-maxage=300, stale-while-revalidate=600, stale-if-error=86400";
add_header ETag $upstream_http_etag;
proxy_ignore_headers Set-Cookie; # do not break the Set-Cookie proxy_hide_header cache;
proxy_pass http://catalog;
}
8. 2 Fastly VCL (SWR, coalescing, ignore cookies)
vcl sub vcl_recv {
set req. hash_ignore_busy = true; # coalescing if (req. url. qs ~ "^(?!.(lang v)=)") { remove req. url. qs; }
if (req. http. Cookie) { remove req. http. Cookie; }
}
sub vcl_backend_response {
set beresp. ttl = 300s;
set beresp. stale_if_error = 86400s;
set beresp. stale_while_revalidate = 600s;
if (beresp. http. Set-Cookie) { unset beresp. http. Set-Cookie; }
}
8. 3 Cloudflare (Transform Rules, Cache Rules, Early Hints — псевдо)
json
{
"cache_rule": {
"if": "http. request. uri. path matches \"/assets/.\"",
"action": {"cache": {"eligibility":"eligible", "ttl": 31536000}}
},
"transform_rule": {
"set_headers": [{"name":"Cache-Control","value":"public, s-maxage=300, stale-while-revalidate=600"}]
},
"early_hints": {"enable": true}
}
9) Mobilfunknetze und „nicht nachhaltiges“ Internet
Verwenden Sie HTTP/3 aggressiv; den kritischen Pfad verkleinern (HTML + critical CSS <14 KB).
Priority H2/H3: Priorisieren (HTML→CSS→JS→media später).
Retray-Richtlinie mit Jitter, idempotency für API.
Größe-Budgets und Bündelung: Code-Splitting, Deferred JS, Entfernen von nicht verwendetem CSS/JS.
10) Beobachtbarkeit und SLO
RUM: TTFB, LCP, INP, CLS nach Regionen/ASN/Tenanten; Verteilung p95/p99.
Synthetik: Kontrollroute „/health/cdn “durch POP-am.
Cache-Metriken: Hit-Ratio Overall und Per-Key; origin fetch rate; coalescing savings.
Alertas: Hit-Ratio-Rückgang, Origin-Egress-Wachstum, H3-Lappen-Abbau, 5xx auf Schild.
11) Spezifität von iGaming/Finanzen
Spielkataloge/Quoten: kurz' s-maxage'+ SWR; region-aware ключ (`tenant|region|lang`).
Event-Spitzen (Matches, Ziehungen): Cache-Aufwärmen (Pre-Warm), „Einfrieren“ schwerer Personalisierungen, Mirror-Quellen.
Payment/Cabinet: Nicht privat zwischenspeichern, sondern über H3 + edge-TLS und eine nahe Region beschleunigen.
Jurisdiktionen: getrennte Domänen/Pfade pro Region; Kontrolle „Vary: X-Region“.
12) Antipatterns
„Vary:“ für alle hintereinander; Cache-Schlüssel hängt von überflüssigen Cookies/Headern ab.
Das Fehlen von SWR/SIE → „schwarze Bildschirme“ mit kurzen Origin-Abstürzen.
Cache-Bereinigung „überall“ statt punktueller Behinderung durch Tags/Schlüssel.
Ressourcen ohne Namensrevision und mit 'max-age = 0'.
Ein globaler Deny-Cache für 'Authorization' auch dort, wo public gegeben wird.
Mangel an Coalescing → Sturm auf Origin.
Vorzeitige „harte“ Personalisierung auf POP.
13) Checkliste Prod-Ready
- Anycast POP + tiered/shield; health-checks und origin failover.
- Cache-Schlüssel sind minimal; überflüssige Query/Cookies ignorieren; 'Surrogate-Control'.
- SWR/SIE enthalten, Coalescing aktiv; serve-stale bei Fehlern.
- HTTP/3 enthalten; TLS 1. 3; 103 Early Hints sind für kritische Ressourcen eingerichtet.
- Bilder: AVIF/WebP, resize-on-edge; Brotli für Texte.
- API-GET с ETag/Last-Modified; Idempotenz/Retrai; keine privaten Profile zwischenspeichern.
- Preconnect zu Statik-Domänen; kritische CSS-Inline.
- Metriken: hit-ratio, origin-egress, TTFB/LCP p95, H3-Anteil, nach Regionen/Tenanten.
- Plan zum Aufwärmen des Caches vor Ereignissen; punktuelle Behinderung (Tags).
- Vary/keys/TTL-Dokumentation; Playbook der Vorfälle (Hit-Ratio-Sturz).
14) TL; DR
Das Wandern zum Origin auf ein Minimum reduzieren: tiered/shield + die richtigen Cache-Keys + SWR/SIE + coalescing. Schalten Sie HTTP/3/TLS 1 ein. 3, verwenden Sie 103 Early Hints und Preconnect. Komprimieren und konvertieren Sie Medien am Rand, inline kritisches CSS. Für APIs - ETag, ordentlich 'Vary', Idempotenz und intelligentes Caching 'GET'. Messen Sie Hit-Ratio, TTFB/LCP p95, Origin Egress und wärmen Sie den Cache bei Peaks im Voraus auf.