GH GambleHub

Στρατηγικές αποθήκευσης

1) Γιατί να κρυφτείτε και πού να το κάνετε

Το Cache είναι ένα γρήγορο στρώμα μνήμης που μειώνει την καθυστέρηση και το φορτίο σε ακριβούς πόρους (CPU/DB/εξωτερικό API). Σημαντικοί στόχοι:
  • Ταχύτητα (p95/p99 χαμηλότερη), κόστος (λιγότερη έξοδος/ΚΜΕ), σταθερότητα (λιγότερες εξαρτήσεις κάτω από την κορυφή).
  • Εξομάλυνση αιχμής και απομόνωση από «θορυβώδεις γείτονες».
Τυπικά επίπεδα:

1. Πελάτης (περιηγητής/κινητός) - μνήμη HTTP, IndexedDB, τοπική αποθήκευση.

2. Edge/CDN - Οι κόμβοι POP είναι πιο κοντά στο χρήστη, η κρύπτη στατική και μέρος της API.

3. - Nginx/Envoy/Varnish (microcash, SWR).

4. Μνήμη υπηρεσίας - Redis/Memcached εντός του συμπλέγματος.

5. In-process - in-memory (καφεΐνη/χάρτης Guava/LRU).

6. Κρυφή μνήμη στη βάση δεδομένων - αναπαραστάσεις υλικού, δευτερεύοντες δείκτες.

Κανόνας: κρύπτη όσο το δυνατόν πιο κοντά στον καταναλωτή, αλλά κρατήστε την αλήθεια μια φορά.

2) Μοτίβα κρύπτης

2. 1 Αγρανάπαυση («τεμπέλης φόρτωσης»)

Η αίτηση διαβάζεται πρώτα από την κρύπτη. σε περίπτωση αστοχίας - από την πηγή, στη συνέχεια γράφει στην κρύπτη.
Πλεονεκτήματα: απλότητα, έλεγχος. Κατά: ψυχρή εκκίνηση, αναντιστοιχία παραθύρων.

2. 2 Ανάγνωση μέσω

Η ανάγνωση είναι πάντα μέσω της κρύπτης, η οποία πηγαίνει στην πηγή όταν χάνει (βιβλιοθήκη/στρώμα πληρεξουσίου).
Είναι βολικό να συγκεντρωθούν οι πολιτικές TTL/serialization.

2. 3 Διαγραφή/Επαναγραφή (διαγραφή)

Γράψτε στη μνήμη και στην πηγή συγχρονισμένα → συνέπεια υψηλότερη, καθυστέρηση υψηλότερη.
Εγγραφή: γράψτε στην κρύπτη, ασύγχρονη flash γράψτε στην πηγή → γρήγορα, αλλά ο κίνδυνος απώλειας και σύγκρουσης.

2. 4 Μελλοντική ανανέωση (προορατική)

Προβλέπει «η TTL θα λήξει σύντομα» και ενημερώνει το κλειδί στο παρασκήνιο, αποτρέποντας τη σφραγίδα.

2. 5 Αρνητική θήκη

Η αποθήκευση «χωρίς δεδομένα/404/άδεια» σε σύντομο TTL μειώνει το φορτίο στην πηγή.

2. 6 Μικροκρυψώνα

Πολύ σύντομες TTL (0. 5-5 s) στο L7 για «σχεδόν δυναμική» (λίστες, κύρια) - μειώνει απότομα τις ουρές.

3) Μνήμη HTTP: κεφαλίδες και έλεγχος

3. 1 Βασικοί τίτλοι

'Cache-Contro :' max-age ',' s-maxage '( shared ),' public/private ',' no-store ',' stale-while-revalidate ',' stale-if-error '.
Επικυρωτές: 'ETag' (hash περιεχομένου), 'Last-Modified'.
Ερωτήματα με όρους: 'If-No-Match', 'If-Mode' → 304 Not Modified.

3. 2 Ποικιλία και κλειδιά

Το 'Vary: Accept-Encoding, Authorization, Cookie, Accept-Language' - δημιουργεί διαφορετικές επιλογές κρυφής μνήμης. Ελαχιστοποίηση του 'Vary' ώστε να μην «ανατιναχτεί» η πληθικότητα.

3. Παράδειγμα απάντησης HTTP


Cache-Control: public, max-age=60, s-maxage=300, stale-while-revalidate=60
ETag: "a1b2c3"
Vary: Accept-Encoding

4) Βασικός σχεδιασμός και TTL

4. 1 κλειδιά

Δομή: 'ενοικιαστής: χρήστης: {id}: προφίλ: v3' (περιλαμβάνει έκδοση σχήματος).
Αποφύγετε την PII στο κλειδί.
Για συλλογές - παράμετροι κλειδιών + ερωτημάτων (κανονικοποιημένες και ταξινομημένες).

4. 2 TTL και συνέπεια

Ένα σύντομο TTL μειώνει την αναντιστοιχία αλλά αυξάνει τις αστοχίες.
Για κρίσιμα δεδομένα - επικυρωτές («ETag») και SWR (stale-while-revalidate).
Για σπάνια μεταβαλλόμενες - μακριές TTL + «βόμβες» αναπηρίας.

4. 3 Έκδοση/basting

Για ασύμβατες αλλαγές, αλλάξτε την έκδοση πρόθεμα/κλειδί ('v2 → v3').
Για στατικούς πόρους - hash περιεχομένου στο όνομα αρχείου.

5) Αναπηρία: στρατηγικές και πρακτικές

5. 1 Άμεση διαγραφή

'πλήκτρο DEL '/' PURGE' επί του πληρεξουσίου. Κίνδυνος: Φυλές μεταξύ αφαίρεσης και πολλαπλών αναγνωστών.

5. 2 Υποκατάστατα κλειδιά

Συσχετίστε το έγγραφο με ένα σύνολο ετικετών (κατηγορία/συντάκτης). Αναπηρία - με ετικέτα.
Varnish/Edge - 'Surrogate-Key: άρθρο: 42 ετικέτα: συγγραφέας: 7' + 'BAN tag: συγγραφέας: 7'.

5. Αναπηρία με γνώμονα το γεγονός

Pub/Sub (Kafka/NATS): όταν αλλάζει η πηγή, δημοσιεύουμε το γεγονός «ακυρώστε».
Οι καταναλωτές κρυφοκοιτάζουν και διαγράφουν/ενημερώνουν κλειδιά.

5. 4 Δύο φάσεις

Πρώτον, σημειώνουμε το κλειδί παρωχημένο (μαλακό TTL), εξυπηρετούμε το μπαγιάτικο, το ενημερώνουμε στο παρασκήνιο και το αντικαθιστούμε ατομικά.

6) Αντιμετώπιση της σφραγίδας/σκύλου και των θερμών κλειδιών

6. 1 Αίτημα συγχώνευσης (μεμονωμένη πτήση)

Ένας παραγωγός ενημερώνει το κλειδί, ενώ οι υπόλοιποι αναμένουν το αποτέλεσμα (mutex/ετικέτα «επικαιροποιήσεις»).

6. 2 Jitter к TTL

Προσθήκη τυχαιότητας (± 10- 20%) στο TTL για την αποφυγή σύγχρονου οιδήματος.

6. 3 Μαλακό TTL + σκληρό TTL

Πριν το μαλακό TTL, σερβίρουμε από την κρύπτη, παράλληλα με τη σκανδάλη ανανέωσης. από το hard-TTL - θεωρούμε μια αστοχία.

6. 4 Θερμά κλειδιά

Τοπικές κρυψώνες πάνω από κοινές (δύο βαθμίδες).
Αναπαραγωγή θερμού κλειδιού σε πολλαπλά θραύσματα και τυχαία επιλογή (μόνο ανάγνωση).
Όριο επιτοκίου για την επικαιροποίηση μιας συγκεκριμένης κλείδας.

6. 5 Παράδειγμα Redis + Lua (σκίτσο μιας πτήσης)

lua
-- SETNX lock with TTL to avoid deadlocks local ok = redis. call("SET", KEYS[1], "1", "NX", "EX", ARGV[1])
if ok then return "LOCKED"
else return "WAIT"
end

7) Πολιτικές πρόληψης και υποδοχή κρυφής μνήμης

7. Έξωση

LRU: απλό και καλό για την τοποθεσία.
LFU: Καλύτερα για «μακρόβια» καυτά κλειδιά.
ARC/TinyLFU: ισοζύγιο ταχύτητας/συχνότητας.

7. 2 Εισδοχή

Μην αφήνετε σε γιγάντια σπάνια αντικείμενα (φίλτρα TinyLFU/Bloom).
Συμπίεση μεγάλων τιμών (LZ4/Zstd) στο όριο μεγέθους/καθυστέρησης.

8) Χαρτογράφηση και τοπολογίες

8. Συνεπής hashing

Σταθερά κατανέμει κλειδιά στους κόμβους, μειώνει την κίνηση κατά τη διάρκεια ανάπτυξης/συμπίεσης συστάδων.

8. 2 Τοπολογίες Redis/Memcached

Redis Cluster (slots/shards), Sentinel (feilover), αναπαραγωγή μόνο ανάγνωσης.
Το memcached είναι ένα sharding από την πλευρά του πελάτη (ketama hashing), χωρίς αντιγραφή επιπέδου εξυπηρετητή.

8. Τοπικό + Διανεμημένο

Cascade: in-proc (micro-TTL/LRU) → Redis (TTL μεγαλύτερη) πηγή →.
Προσέξτε με τα TTL παχέος εντέρου και τους επικυρωτές κρυφής μνήμης.

9) Ακμή, μνήμη CDN και L7

9. 1 Micro-cache на Nginx

nginx proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api:100m inactive=10m;
map $request_method $skip_cache { default 0; POST 1; PUT 1; DELETE 1; }

server {
location /api/list {
if ($skip_cache) { add_header Cache-Control "no-store"; }
proxy_cache api;
proxy_cache_valid 200 2s;       # micro-cache proxy_cache_use_stale error timeout updating;
proxy_cache_background_update on;   # SWR add_header X-Cache $upstream_cache_status;
proxy_pass http://upstream;
}
}

9. 2 Απεσταλμένος (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. http. cache. file_system_http_cache. v3. FileSystemHttpCacheConfig cache_path: "/var/cache/envoy"

9. 3 Βερνίκι (Υποκατάστατα κλειδιά)

Χρήση «υποκατάστατου κλειδιού» και «απαγόρευσης» ετικετών για αναπηρία κατά παρτίδες.

10) Κρυφή μνήμη και συνοχή των δεδομένων

10. 1 Ανάγνωση-σας-γράφει

Για προφίλ χρήστη/κάδο ανακύκλωσης, παρέχεται είτε σύντομη TTL, διαγραφή ή σήμανση πελάτη (παράκαμψη για N δευτερόλεπτα μετά την εγγραφή).

10. 2 Τελικά έναντι Ισχυρών

Για τη σύσταση/ανάλυση - ενδεχόμενη + μακρά TTL.
Για καταστάσεις χρημάτων/παραγγελιών - σύντομη TTL, επικύρωση, μερικές φορές χωρίς κρύπτη σε κρίσιμες διαδρομές.

10. 3 Αναλλοίωτες ουσίες

Μη αποθηκεύετε πεδία που επηρεάζουν την ασφάλεια/ACL χωρίς αυστηρούς TTL και επανεπικύρωση.

11) Παρατηρησιμότητα, SLO και διαχείριση

11. 1 Μετρήσεις

( ανά διαδρομή), , .
, , .
Καθυστέρηση: p50/p95/p99 από την κρύπτη έναντι της πηγής.
και QPS/ψηφιολέξεις τους.

11. 2 Κούτσουρα και ίχνη

Αρχείο 'X-Cache: HIT/MISS/STALE/UPDATING'.
Σε ίχνη, σημειώστε την πηγή της απόκρισης ('cache = true', 'tier = edge' service 'local').

11. Προσέγγιση 3 SLO

Παράδειγμα: "για API/κατάλογο p99 ≤ 250 ms, η μνήμη χτύπησε ≥ 85%, σφραγίστηκε ≤ 0. 1% των αιτήσεων"

11. 4 Runbooks

«Οι αστοχίες αυξάνονται» → ελέγξτε TTL, προθέρμανση/αναπηρία, καυτά κλειδιά, μέγεθος κρύπτης και πολιτική αποδοχής.

12) Ασφάλεια και πολυπλοκότητα

Ενσωματωμένο αναγνωριστικό ενοικιαστή σε κλειδιά (και στο 'Vary' για HTTP).
Μην αποκρύπτετε τις ιδιωτικές απαντήσεις ως «δημόσιες».
Κρυπτογράφηση κρυπτογράφησης με ευαίσθητα δεδομένα ή αποθήκευση μόνο μη-PII/ID.

13) Τυπικές συνταγές

13. 1 Κατάλογος/Ταινία (σχεδόν δυναμική)

Edge-microcass 1-3 s + SWR, εντός - Redis για 15-60 s, αναπηρία με επικαιροποιημένα γεγονότα.

13. Προφίλ χρήστη 2

Cache-aide με TTL 30-120 s, παράκαμψη 5-10 s μετά την ενημέρωση προφίλ (cookie/header), ή write-through.

13. 3 Μαθήματα νομισμάτων/βιβλία αναφοράς

Long TTL (λεπτά-ώρες) + στοχευόμενη αναπηρία όταν δημοσιεύονται νέα στοιχεία· «ETag» για GET υπό όρους.

13. 4 Αποτελέσματα αναζήτησης

Edge-microcass 1-2 s, inside - refresh-learning και coalescing, ομαλοποίηση των παραμέτρων ερωτήσεων στο κλειδί.

14) Αντι-μοτίβα

Μετρητά χωρίς αναπηρία: ελπίδα μόνο για TTL → μακριά παράθυρα άσχετου χαρακτήρα.
Giant 'Vary': «έκρηξη» επιλογών → χαμηλό ποσοστό επιτυχίας.
Μονή κρύπτη για prod/πειράματα → μόλυνση.
Δεν υπάρχει προστασία από ακίδες πηγής σφράγισης κατά τη λήξη του TTL.
Ταμειακές ροές/δικαιώματα/μνήμη ACL χωρίς αυστηρές εγγυήσεις.
Συμπίεση «τα πάντα στη σειρά» - επιπλέον επεξεργαστές, φθορά του p99 σε μικρά αντικείμενα.

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

  • Καθορισμός των επιπέδων κρυφής μνήμης και των στόχων τους (άκρη/υπηρεσία/τοπική).
  • Κλειδιά σχεδιασμού (έκδοση, ενοικιαστής, ομαλοποίηση παραμέτρων).
  • Επιλέξτε το μοτίβο (cache-grout/read-through/refresh-learning).
  • Ρύθμιση TTL/soft-TTL/jitter, ενεργοποίηση SWR.
  • Εφαρμογή προστασίας από ανθρακωρυχεία/μονόπλευρη πτήση.
  • Οργάνωση αναπηρίας (εκδηλώσεις, ετικέτες, εκκαθάριση/απαγόρευση).
  • Εισάγετε hit-ratio/latency μετρήσεις και 'X-Cache' ταμπλό.
  • Εκτελέστε δοκιμές φορτίου θερμού κλειδιού.

Γράψτε SLO και runbooks.

  • Ελέγξτε την απομόνωση ασφάλειας/ενοικιαστή και 'Vary'.

16) ΣΥΧΝΈΣ ΕΡΩΤΉΣΕΙΣ

Ε: Τι να επιλέξετε - απόκρυψη ή ανάγνωση

A: Για απλές υπηρεσίες - κρυφή καλλιέργεια. Χρειαζόμαστε συγκεντρωτισμό και μια ενιαία πολιτική - ανάγνωση.

Ε: Πώς να κατανοήσετε το βέλτιστο TTL

A: Έναρξη από την επιτρεπόμενη απαρχαίωση, τη συχνότητα επικαιροποιήσεων και το ποσοστό επιτυχίας-στόχου. προσθήκη νευρικότητας και παρατήρηση p95/p99/κόστος.

Ε: Πότε είναι κατάλληλη η εγγραφή

A: Για ροές υψηλού φορτίου, όπου η ενδεχόμενη συνέπεια είναι αποδεκτή και υπάρχει αξιόπιστη σειρά αναμονής/ημερολόγιο για «προσθήκη».

Ε: Μπορούν να αποθηκευτούν εγκεκριμένες απαντήσεις

A: Ναι, αλλά σημειώστε «ιδιωτικό» ή/και συμπεριλάβετε τον ενοικιαστή/χρήστη στο διακόπτη/' Vary '. Για πραγματικά ιδιωτική - κρυφή μνήμη πελατών.

Ε: Πώς να ζεστάνετε την κρύπτη

A: Λίστες από δημοφιλή κλειδιά, σκουλήκι φόντου, replay από κούτσουρα, προθέρμανση πριν την κυκλοφορία/κορυφή (μαύρη Παρασκευή, κλπ.).

17) Σύνολα

Ο αποτελεσματικός εγκλωβισμός είναι βασικός σχεδιασμός + λογικός TTL + ένα καλά επιλεγμένο μοτίβο, που ενισχύεται από την αναπηρία γεγονότων, τα SWR/ανανέωση-μπροστά, και την προστασία εξολόθρευσης. Βαθμίδα της κρύπτης (πελάτης/άκρο/υπηρεσία), προσθήκη παρατηρησιμότητας και SLO - και λήψη σταθερών ουρών καθυστέρησης, προβλέψιμο κόστος και ανθεκτικότητα αιχμής.

Contact

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

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

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

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

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

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