GH GambleHub

CDN caching και βελτιστοποίηση TTL

Σύντομη Περίληψη

Μια μνήμη CDN είναι ένας «επιταχυντής + ασπίδα» μεταξύ του χρήστη και της προέλευσης. Λειτουργεί καλά όταν:

1. Το κλειδί κρυφής μνήμης είναι σταθερό και δεν περιέχει «θόρυβο».

2. Πολιτική TTL υπό φόρτιση: 's-maxage '/' max-age' + 'stale-while-clalate/if-error'.

3. Η διαχείριση της αναπηρίας γίνεται με ετικέτες/προθέματα + «μαλακό» καθάρισμα.

4. Περιλαμβάνονται κλιμακωτή κρύπτη/θωράκιση προέλευσης και αρνητική κρύπτη.

5. Υπάρχει μια παρατηρησιμότητα: hit-ratio από στρώματα, p95 TTFB, return share 304.

Κεφαλίδες βάσης και τι σημαίνουν

«Cache-Control»:
  • 'max-age = ' - TTL για περιηγητή.
  • 's-maxage = ' - TTL για CDN/διαμεσολαβητή (επικαλύπτει 'max-age').
  • «stale-while-revalidate = » - παρέχει παρωχημένη, επικαιροποίηση παράλληλα.
  • 'stale-if-error = ' - επιστρέφουμε το ξεπερασμένο όταν συμβεί το σφάλμα προέλευσης.
  • 'immutable' - ο πόρος δεν αλλάζει (κατάλληλο για επαληθευμένα περιουσιακά στοιχεία).
  • 'ETag '/' Last-Modified' - προϋποθέσεις για 304, εκτός από bytes/CPU προέλευσης.
  • 'Vary' - μια λίστα με κεφαλίδες που επηρεάζουν το κλειδί κρυφής μνήμης (χρήση με συγκράτηση!).
  • «Υποκατάστατο-έλεγχος» - «επεκτεινόμενο» Cache-Control για CDN (εάν υποστηρίζεται).
  • «Εκπνέει» - είναι παρωχημένο, αλλά εξακολουθεί να λαμβάνεται υπόψη από τους πελάτες.
Παράδειγμα (στατικές, έτος):

Cache-Control: public, max-age=31536000, immutable
Παράδειγμα (ημι-ηχείο με ασφαλή απαρχαίωση):

Cache-Control: public, s-maxage=300, max-age=60, stale-while-revalidate=600, stale-if-error=86400
ETag: "a1c3..."

Σχεδιασμός και κανονικοποίηση κλειδιών

Ο στόχος είναι ουσιαστικά τα ίδια αιτήματα να εμπίπτουν στο ίδιο αντικείμενο.

Ομαλοποίηση URL: περίπτωση, διπλές σχισμές, σχισμή ίχνους, σειρά παραμέτρων ερωτημάτων.
Αγνοήστε τον «θόρυβο»: 'utm _',' fbclid ',' gclid ', αυθαίρετες ετικέτες ref.
Περιορισμένη ποικιλία: μόνο πραγματικά σημαντικοί τίτλοι ('Accept-Encoding', μερικές φορές 'Accept', 'Accept-Language' locale).
Κατηγορία συσκευής: εάν είναι απαραίτητο, χρησιμοποιήστε 2-3 κλάσεις (κινητά/επιτραπέζια/ταμπλέτα), όχι ατελείωτα κλαδιά χρήστη-πράκτορα.
Auth context: μην αποθηκεύετε ιδιωτικά εξ ορισμού. χρήση υπογεγραμμένων URL/παράκαμψης cookies ή χωριστών δημόσιων/ιδιωτικών διαδρομών.

Γρήγορο στυλ (ψευδο):

Surrogate-Key: product:123 catalog
Cache-Control: public, s-maxage=300, stale-while-revalidate=600
Vary: Accept-Encoding

στρατηγικές TTL ανά τύπο περιεχομένου

ΤύποςTTL CDN («s-maxage»)Περιηγητής («μέγιστη ηλικία»)Επιπρόσθετα
Επαληθευμένα περιουσιακά στοιχεία ('/εφαρμογή. α1β2. ις)1 έτος1 έτος'immutable', δεν απαιτείται αναπηρία
Κατάλογοι/σελίδες εκφόρτωσης1-10 λεπτά30-120 s'stale-while-revalidate = 10-30 мин'
Εικόνες (Resays)10-60 λεπτά5-15 λεπτάVary по 'Accept' (webp/avif)
Λήψη APIs (αποθηκευμένα)10-120 s0-30 sIdempotent μόνο, 'stale-if-error' 5-60 λεπτά
Σφάλματα 500/timeout00Αρνητική μνήμη 30-120 sec (σε επίπεδο CDN), μην κρυφτείτε 401/403/POST

Πολιτικές αναπηρίας

Με URL/Πρόθεμα: "σκούπισε τα πάντα κάτω από '/στατικό/2025-11-05/'.
Με ετικέτα/κλειδί: «αφαίρεση όλων των 'καταλόγων' και 'γινόμενο: 123'».
Απαλή εκκαθάριση: σημειώστε ως παρωχημένο, μην σβήσετε το αντικείμενο - ταχύτερη επαναπλήρωση.
Καθοδηγούμενη από γεγονότα: CI/CD ή admin event επικαλείται webhook «ακυρωμένες ετικέτες».

Σύσταση: Συνδυάστε και τις δύο τακτικές: διαδρομές έκδοσης για περιουσιακά στοιχεία + εκκαθάριση ετικετών για περιεχόμενο/σελίδες.

Κλιμακωτή κρύπτη, θωράκιση προέλευσης и προθάλαμος

Κλιμακωτή κρύπτη: περιφερειακά στρώματα CDN → λιγότερα αιτήματα καταγωγής.
Θωράκιση προέλευσης: μία «ασπίδα» POP προς προέλευση - βελτιώνει την τοποθεσία και την αναλογία επιτυχίας.
Προγεμισμένη συσκευή τύπου πένας: Προθέρμανση θερμών URL/κρυψώνων πριν από την εκδήλωση/απελευθέρωση.
Αρνητική κρύπτη: κρύπτη 5xx/Timeout για σύντομο χρονικό διάστημα (30-120 s) ώστε να μην κατακλύζεται η προέλευση με θύελλα ρετρά.

API Cache: Πότε μπορείτε

Μόνο GET/HEAD και idempotent.
Κλειδί: διαδρομή + βασικά ερωτήματα (για παράδειγμα, '? κατηγορία =... & σελίδα =... ').
Επικύρωση: 'ETag '/' Last-Modified' και σύντομη 's-maxage'.
Φίλτρα ανά χρήστη: εξατομίκευση της συνάρτησης πελάτη/άκρου ή χρήση υπογεγραμμένων αιτήσεων + «δημόσια» απάντηση.

Παράδειγμα (API, 30 s + SWR):

Cache-Control: public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600
ETag: "feed-v42"

Προστασία από δηλητηρίαση από κρύπτη

Ομαλοποίηση σκληρού URL/κεφαλίδας. Λευκή λίστα παραμέτρων στο κλειδί.
Απόκρυψη ύποπτων κεφαλίδων/αντιγράφων ('X-Forward-', επέκταση 'Accept').
Ορίστε το 'Vary' και ελέγξτε το μέγεθος/τον αριθμό των κεφαλίδων.
Διαχωρισμός τομέα: private/admin - σε ξεχωριστό όνομα χωρίς κρύπτη.
Επικύρωση των απαντήσεων: μην κρύπτετε 4xx (εκτός από 404 για στατικές), μην κρατάτε σελίδες «χρήστη» χωρίς ρητή πολιτική.

Συμπίεση και μορφότυποι

Brotli για κείμενο (js/css/json), gzip - back; τα προσυμπιεσμένα στοιχεία ενεργητικού είναι αποδεκτά.
Εικόνες: webp/avif όπου υποστηρίζεται. Χρήση 'Vary: Αποδοχή' + παραγώγων.
Αιτήματα για βίντεο/ήχο: κομμάτια CDN caches.
Περιεχόμενο - Διαπραγμάτευση: Διατηρήστε χαμηλή τη βασική πληθικότητα (κλάση συσκευών αντί ακατέργαστων UA).

Παρατηρησιμότητα και SLO

Βασικές μετρήσεις

Λόγος επιτυχίας (με ψηφιολέξεις/αιτήματα) на άκρη/βαθμίδα/ασπίδα.
p50/95/99 TTFB ανά περιφέρεια και τύπο (στατική/API).
Ρυθμός πλήρωσης/Έξοδος προέλευσης - πόσο πηγαίνει στην προέλευση.
Ποσοστό 304 και μέσο μέγεθος απόκρισης.
Σφάλμα προϋπολογισμού: μερίδιο των ζητημάτων «stale-if-error »/« SWR». συχνότητα καθαρισμού.

παραδείγματα SLO

"p95 TTFB 'statics σε περιφερειακό επίπεδο ≤ 120-150 ms, API GET cached ≤ 200-250 ms.
Στατικά hit-ratic ≥ 90%, ημι-ηχεία ≥ 60%.
Το ποσοστό των απαντήσεων από το μπαγιάτικο υποκατάστημα με σφάλματα ≤ 0. 5% σε 30 ημέρες.

Φύλλα εξαπάτησης Config

Nginx (αντίστροφος διαμεσολαβητής πριν από το CDN ή σε αυτο-PoP)

nginx proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CDN:512m max_size=100g inactive=7d;

map $args $clean_args {
"~(^    &)(utm_    gclid    fbclid) """; # default $ args simplified example;
}

server {
listen 443 ssl http2;
set $cache_key "$scheme$request_method$host$uri?$clean_args    $http_accept    $http_accept_encoding";
location /static/ {
proxy_cache CDN;
proxy_cache_key $cache_key;
proxy_ignore_headers Set-Cookie;
add_header Cache-Control "public, s-maxage=86400, max-age=3600, stale-while-revalidate=600" always;
proxy_pass https://origin_static;
}

location /api/public/ {
proxy_cache CDN;
proxy_cache_key $cache_key;
proxy_cache_valid 200 30s;
add_header Cache-Control "public, s-maxage=30, max-age=5, stale-while-revalidate=120, stale-if-error=600" always;
proxy_set_header If-None-Match $upstream_http_etag;
proxy_pass https://origin_api;
}
}

Απεσταλμένος (SWR + αρνητική μνήμη, έννοια)

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. cache. simple_http_cache. v3. SimpleHttpCacheConfig
Cache-Control/Surrogate-Control Header Cache Policies
We cache 5xx errors briefly via route/retry policy + local_rate_limit

Κεφαλίδες για «γρήγορα» περιουσιακά στοιχεία


Cache-Control: public, max-age=31536000, immutable
ETag: "hash"
Content-Encoding: br

Κεφαλίδες για ημι-ηχεία (καταλόγους)


Cache-Control: public, s-maxage=600, max-age=120, stale-while-revalidate=1800, stale-if-error=86400
Vary: Accept-Encoding, Accept

FinOps: Πώς εξοικονομεί χρήματα τα μετρητά

↓ προέλευσης εξόδου, μικρότερο φορτίο CPU/DB → χαμηλότερο κόστος υποδομής.
Λιγότερα αιτήματα για πληρωμένα backends (αναζήτηση/δείκτης/εικόνες).
Μέτρηση στόχου: $/μείωση του p95 και $/μείωση της εξόδου κατά 1 GB - παρακολουθήστε το αποτέλεσμα μετά την εκτόξευση.

iGaming/fintech special

Κατάλογοι/περιουσιακά στοιχεία παρόχων: εκδοθείσες διαδρομές + ετήσια TTL.
Προσγειώσεις εκδηλώσεων/τουρνουά: 1-5 λεπτά 's-maxage' + 'SWR' για 10-30 λεπτά. εκκαθάριση ετικετών κατά την αναβάθμιση.
Σελίδες LIV (συντελεστές/πίνακες): μερική κρύπτη μπλοκ JSON, σύντομη TTL (5-30 s), για προσωπικά μπλοκ - απόδοση πελάτη.
PSP/καταληκτικά σημεία πληρωμής: μην κρυφτείτε, μην αποθηκεύετε αυστηρά Cache μόνο βιβλία αναφοράς (πίνακες BIN, καταστάσεις).
Αντίμπορο: στατική/αποθήκευση GET, γκρίζες διαδρομές για ύποπτες ASN. κρατήσει «Vary» έξω από θορυβώδεις τίτλους.

Κατάλογος ελέγχου εφαρμογής

  • Κλειδί Cache περιγράφεται: ομαλοποίηση URL, λίστα επιτρεπόμενων ερωτήσεων, 'Vary' μόνο για το επιθυμητό.

Διαχωρισμένες διαδρομές δημόσιου/ιδιωτικού τομέα. ιδιωτικό - «no-store» και παράκαμψη CDN.

  • Κλίμακες TTL ανά τύπο περιεχομένου που εισήχθη. ρυθμισμένο 'SWR/εάν-σφάλμα'.
  • διατεταγμένη κλιμακωτή κρύπτη + θωράκιση προέλευσης· αρνητική μνήμη 5xx (σύντομη) ενεργοποιημένη.
  • Υπάρχει ετικέτα/URL εκκαθάριση, μαλακή εκκαθάριση? ολοκλήρωση με CI/CD.
  • Περιλαμβάνει συμπίεση (br/gzip), μορφότυπους εικόνων ιστού και απαντήσεις εύρους.
  • Μετρήσεις: λόγος επιτυχίας ανά στρώμα, p95 TTFB, 304, έξοδος προέλευσης. ειδοποιήσεις για αστοχίες.
  • Playbooks: προθέρμανση κρύπτης πριν από τις κορυφές, εκκαθάριση έκτακτης ανάγκης, υποβάθμιση προέλευσης.

Κοινά σφάλματα

Μη versio περιουσιακά στοιχεία με μεγάλες δέσμες TTL → «sticky» από χρήστες.
Το υπερβολικό 'Vary' (από το 'User-Agent', όλες οι κεφαλίδες) → μια έκρηξη πληθικότητας και μια χαμηλή αναλογία hit-ratio.
Caching 4xx/401/403/ιδιωτικό περιεχόμενο.
Έλλειψη αρνητικής μνήμης → χιονοστιβάδα αιτήσεων υποβαθμισμένης καταγωγής.
Καμία ετικέτα-καθαρισμός → μαζική εκκαθάριση σημείου και επαναπλήρωση καταιγίδας.
Το κλειδί κρυφής μνήμης περιλαμβάνει «θορυβώδεις» παραμέτρους UTM/ref.
Πολύ σύντομο TTL για στατικά → επιπλέον φορτίο σε CDN και προέλευση.

Mini playbooks

1) Προθέρμανση της κρύπτης πριν από την εκδήλωση

1. Συλλογή top-N URL από logs → 2) Παράλληλη prefetch (περιορισμένη ταχύτητα) ανά περιοχή → 3) Check hit-ratio ↑ και p95 ↓.

2) Κατολόγοι μαλακού καθαρισμού έκτακτης ανάγκης

1. Αποστολή 'PURGE '/ετικετών-clear → 2) Το CDN δίνει μπαγιάτικο και τραβάει φρέσκο με το φόντο → 3) Ελέγξτε ότι δεν υπάρχουν ακίδες για την προέλευση.

3) Αποτυχία καταγωγής

1. Το «stale-if-error» βοηθά τις X ώρες → 2) να ενεργοποιηθεί το πανό «τεχνική εργασία» στην άκρη → 3) Κατά την ανάκτηση - η προθέρμανση του στόχου.

Αποτέλεσμα

Ισχυρή στρατηγική CDN = σωστό κλειδί μνήμης + ουσιαστικό TTL με SWR/if-error + διαχειριζόμενη αναπηρία + κλιμακωτή/ασπίδα + παρατηρησιμότητα. Καθορίστε την πολιτική στις κεφαλίδες και το IaC, μετρήστε τον λόγο επιτυχίας και το p95, σχεδιάστε να ζεσταθείτε στις κορυφές - και οι χρήστες θα λαμβάνουν πάντα μια γρήγορη απάντηση, και η προέλευση θα παραμείνει ζωντανή ακόμα και στην πιο ζεστή ώρα.

Contact

Επικοινωνήστε μαζί μας

Επικοινωνήστε για οποιαδήποτε βοήθεια ή πληροφορία.Είμαστε πάντα στη διάθεσή σας.

Telegram
@Gamble_GC
Έναρξη ολοκλήρωσης

Το Email είναι υποχρεωτικό. Telegram ή WhatsApp — προαιρετικά.

Το όνομά σας προαιρετικό
Email προαιρετικό
Θέμα προαιρετικό
Μήνυμα προαιρετικό
Telegram προαιρετικό
@
Αν εισαγάγετε Telegram — θα απαντήσουμε και εκεί.
WhatsApp προαιρετικό
Μορφή: κωδικός χώρας + αριθμός (π.χ. +30XXXXXXXXX).

Πατώντας «Αποστολή» συμφωνείτε με την επεξεργασία δεδομένων.