Βελτιστοποίηση CDN και μείωσης της καθυστέρησης
1) Στόχοι και χάρτης καθυστέρησης
Καθυστέρηση = DNS + TCP/TLS + TTFB (server/origin/cache) + παράδοση περιεχομένου (RTT × τόμοι) + απόδοση πελάτη.
Βελτιστοποίηση = μείωση του αριθμού των RTT, μείωση των ψηφιολέξεων, και μετακίνηση υπολογισμού/κρύπτης πιο κοντά στο χρήστη.
2) Αρχιτεκτονική CDN
Το Anycast POP είναι ένας κοντινός κόμβος δρομολόγησης BGP.
Κλιμακωτή ασπίδα αποθήκευσης/προέλευσης - ένα ενδιάμεσο στρώμα «ομπρέλα» που μειώνει την καταιγίδα αστοχίας στην προέλευση.
Γεωγραφική/περιφερειακή δρομολόγηση - δέσμευση του ενοικιαστή/δικαιοδοσίας (κυριαρχία δεδομένων, άδειες).
Αποτυχία - εφεδρική προέλευση/περιοχή, δείγματα υγείας και γρήγορος διακόπτης.
3) Κρύπτη: κλειδιά, κεφαλίδες, στρατηγικές
3. Κλειδιά κρύπτης 1
Το προκαθορισμένο είναι 'scheme + host + path +? ερώτηση ".
Προσθήκη μόνο των παραμέτρων που θέλετε ('? v = ','? lang = ','? ενοικιαστής = '). Οι υπόλοιποι βρίσκονται σε αμηχανία.
'Vary' - minimal: 'Accept-Encoding', 'Accept-Language' (αν είναι απαραίτητο), 'Authorization' usually breaks the cache.
3. 2 Πολιτικές
Δημόσια στατικά: «Cache-Control: public, max-age = 31536000, immutable» + rev (hash in name).
Ημιδυναμική (κατάλογοι, κανόνες, συχνές ερωτήσεις): 's-maxage = 300, stale-while-revalidate = 600, stale-if-error = 86400'.
API-GET: χρησιμοποιήστε το ETag/Last-Modified, 'SWR/SIE', επιτρέψτε τη συγχώνευση (ένα αίτημα για ένα καυτό κλειδί).
Ιδιώτης: προσωπικές απαντήσεις - στην περίμετρο μέσω του υπολογισμού άκρων (ESI/kv) ή ανά ενοικιαστή.
3. Αντι-καταιγίδα
Αίτημα εξαναγκασμού - ταυτόχρονη κατάρρευση αιτημάτων αστοχίας.
Σερβίρετε μπαγιάτικο - δώστε ένα ξεπερασμένο αντικείμενο όταν η προέλευση αποτύχει.
Επανεπικύρωση ιστορικού - επικαιροποίηση στο παρασκήνιο.
4) HTTP/2-3, TCP/TLS και πρόωρη επιστροφή
: πολυπλέκτης, συμπίεση κεφαλίδας· περιορίζουν τα «max ταυτόχρονα ρεύματα», μεγάλες κεφαλίδες.
(QUIC): σημαντική μείωση του κινητού/υψηλής απώλειας TTFB· να προσέχετε τα Αρχικά ραγδαία και το Retry.
TLS 1. 3: 1-RTT χειραψία· συρραφή OCSP· HSTS.
: μόνο για idempotent 'GET' και εάν λαμβάνονται υπόψη οι κίνδυνοι επανάληψης.
103 Πρώιμες υποδείξεις: Πρώιμη «Σύνδεση: rel = προφόρτωση» για κρίσιμους πόρους.
Preconnect/DNS- prefetch: '<link rel = «preconnec href =» https ://cdn. παράδειγμα «>».
5) Υπολογισμός ακμών και «λεπτή εξατομίκευση»
Στην άκρη: απογραφή τίτλου, σταθεροποίηση γεω/ενοικιαστή, σήμανση Α/Β, εύκολη εξατομίκευση χωρίς να ζητηθεί προέλευση.
Κανόνας: μην αποθηκεύετε PII σε κόμβους POP. συγκεντρωτικά μεγέθη/δημόσια δεδομένα μόνο.
6) Βελτιστοποίηση μέσων και μορφοτύπων
Εικόνες: αυτόματη μετατροπή σε WebP/AVIF, 'srcset/μεγέθη', 'lazyload'.
Συμπίεση: Brotli για κείμενα (HTML/CSS/JS/JSON), gzip fallback.
Βίντεο: HLS/DASH, CDN-segment caching, 'preload = metadata', αφίσα.
Γραμματοσειρές: υποσύνολο + 'εμφάνιση γραμματοσειράς: ανταλλαγή'. οικοδεσπότης με μεγάλη κρύπτη.
Κρίσιμο CSS: εσωτερική πρώτη οθόνη. το υπόλοιπο είναι async.
7) Σχήματα API και κρυψώνα
Idempotent GET - κρύπτουμε με κλειδιά αιτήματος (συμπεριλαμβανομένης της έκδοσης δεδομένων).
ETag: Ισχυρό φορτίο hash + 'If-No-Match'.
Υποκατάστατο-Control (ειδικό CDN) για τη διάκριση από τον πελάτη 'Cache-Control'.
Υπογεγραμμένα URL - για ιδιωτικά στατικά/μέσα.
GraphQL: ομαλοποίηση της μνήμης κλειδιού με λειτουργία/μεταβλητές; χρήση κρύπτης μερικής αποθήκευσης/διαλύτη.
Websockets: για πραγματικό χρόνο - συντομευμένα μηνύματα, συμπίεση (permessage-deflate), θέση WS-θραύσματα πιο κοντά στο χρήστη.
8) Παραδείγματα διαμόρφωσης
8. 1 NGINX (καταγωγή: αποθηκεύουμε 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 Ταχέως VCL (SWR, coalescing, αγνόηση 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 (Κανόνες μετασχηματισμού, κανόνες κρύπτης, πρώιμες υποδείξεις - псевдо)
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) Κινητά δίκτυα και «ασταθές» Διαδίκτυο
Να χρησιμοποιείται HTTP/3 επιθετικά. μείωση του μεγέθους της κρίσιμης διαδρομής (HTML + κρίσιμης σημασίας CSS <14 KB).
Προτεραιότητα H2/H3: Προτεραιότητα (HTML→CSS→JS→media αργότερα).
Επαναπροσδιορισμός πολιτικής με νευρικότητα, ιδεότητα για API.
Προϋπολογισμοί μεγέθους και δεσμοποίηση: διαχωρισμός κωδικών, αναβολή της JS, αφαίρεση αχρησιμοποίητων CSS/JS.
10) Παρατηρησιμότητα και SLO
RUM: TTFB, LCP, INP, CLS ανά περιφέρεια/ASN/ενοικιαστές· p95/p99 διανομές.
Συνθετικά: οδός ελέγχου «/υγεία/cdn «από POP-s.
Μετρήσεις Cache: συνολική αναλογία hit-ratio και ανά κλειδί. ρυθμός ανίχνευσης προέλευσης· εξοικονόμηση άνθρακα.
Ειδοποιήσεις: πτώση του λόγου επιτυχίας, αύξηση εξόδου από την πηγή, υποβάθμιση του H3-fraction, 5xx ανά ασπίδα.
11) Ιδιαιτερότητες του iGaming/Finance
Κατάλογοι/αποδόσεις παιχνιδιών: σύντομη 's-maxage' + SWR; ключ με περιφερειακή επίγνωση ("ενοικιαστής" lang ").
Κορυφές γεγονότων (σπίρτα, κληρώσεις): θέρμανση κρύπτης (προθέρμανση), «κατάψυξη» βαρέων προσωπικοτήτων, κατοπτρικών πηγών.
Πληρωμή/ερμάριο: μην κρατάτε ιδιωτικά, αλλά επιταχύνετε μέσω H3 + TLS ακμής και κοντινής περιοχής.
Δικαιοδοσίες: διαχωρισμός τομέων/διαδρομών ανά περιφέρεια· 'Vary: X-Region' control.
12) Αντιπατερίδια
'Vary:' σε όλα? το κλειδί κρυφής μνήμης εξαρτάται από τα περιττά cookies/κεφαλίδες.
Έλλειψη SWR/SIE → μαύρες οθόνες για αστοχίες σύντομης προέλευσης.
Διαυγής κρύπτη «παντού» αντί για point disability με ετικέτες/κλειδιά.
Πόροι χωρίς αναθεώρηση ονόματος και με «μέγιστη ηλικία = 0».
Παγκόσμια αποθήκη άρνησης για «εξουσιοδότηση» ακόμη και όταν δίνεται δημόσια.
Έλλειψη συνασπισμού → θύελλας στην προέλευση.
Πρόωρη «βαριά» εξατομίκευση των POP.
13) Κατάλογος ελέγχου ετοιμότητας Prod
- Anycast POP + κλιμακωτή/ασπίδα; ανεπάρκεια των υγειονομικών ελέγχων και της προέλευσης.
- Τα κλειδιά της κρύπτης είναι ελάχιστα. αγνοούν τα περιττά ερωτήματα/cookies· «Υποκατάστατο ελέγχου».
- Ενεργοποιημένα SWR/SIE, ενεργά με άνθρακα. στήλη σερβιρίσματος σε σφάλματα.
- ενεργοποιείται HTTP/3 TLS 1. 3; Το 103 Early Hints είναι διαμορφωμένο για κρίσιμους πόρους.
- Εικόνες: AVIF/WebP, αλλαγή μεγέθους στην ακμή. Μπρότλι για στίχους.
- API-GET с ETag/τελευταία τροποποιημένη; ιδιαιτερότητα/υποχώρηση· δεν κρύβουν ιδιωτικά προφίλ.
- Προεξοχή σε στατικά πεδία. Κρίσιμη γραμμή CSS.
- Metrics: hit-ratio, origin-equing, TTFB/LCP p95, H3-share, ανά περιφέρεια/ενοικιαστή.
- Σχέδιο προθέρμανσης της κρύπτης πριν από τα γεγονότα. αναπηρία σημείου (ετικέτες).
- Διαφοροποίηση/κλειδιά/τεκμηρίωση TTL· playbook των συμβάντων (πτώση του λόγου επιτυχίας).
14) TL, DR
Διατήρηση της πεζοπορίας σε μια προέλευση στο ελάχιστο: κλιμακωτή/ασπίδα + κατάλληλα κλειδιά κρύπτης + SWR/SIE + συγχώνευση. Ενεργοποιήστε το HTTP/3/TLS 1. 3, χρησιμοποιήστε 103 Early Hints και preconnect. Συμπίεση και μετατροπή μέσων στο άκρο, inline κρίσιμης σημασίας CSS. Για API - ETag, καθαρό 'Vary', idempotency και λογικό caching 'GET'. Μέτρηση του λόγου hit-ratio, TTFB/LCP p95, έξοδος προέλευσης και προθέρμανση της κρύπτης εκ των προτέρων στις κορυφές.