GH GambleHub

Technologie und Infrastruktur → Cache-Ebenen und Datenspeicherung

Cache-Ebenen und Datenspeicherung

1) Warum Sie einen mehrschichtigen Cache benötigen

Cache ist ein kurzer Weg zur Antwort, ohne in „teure“ Subsysteme (DBs, externe APIs, Netzwerke) zu gehen. Multilayer verteilt die Last: Browser → CDN/Edge → Anwendungsschicht → verteilter Cache → DB/Speicher. Ziele: Reduzieren Sie die P95/P99, entladen Sie den Ursprung, halten Sie Spitzen besser stand und reduzieren Sie die Kosten für Bytes.

2) Karte der Cache-Ebenen

1. Браузер: `Cache-Control`, `ETag`, `Last-Modified`, `stale-while-revalidate`.
2. CDN/Edge: TTL/ключ, Vary, Signed URLs, image-resize; tiered/shield.
3. API Gateway/Service Mesh: Kurz lebender Antwortcache über sicheres GET.
4. Anwendung (in-process): LRU/LFU, Near-Cache für „heiße“ Schlüssel, Millisekunden.
5. Verteilter Cache (Redis/Memcached) - Die Basisebene für die Dynamik.
6. DB-Caches: Pg/Innodb-Puffer, PgBouncer-Multiplexing, materialisierte Ansichten.
7. Disk/Object Stops: vorkompilierte Snapshots, Blob-Cache (z.B. S3 + CDN).

Das Prinzip: "je näher am Benutzer - desto kürzer die TTL und weniger Personalisierung; Je näher an den Daten, desto reicher die Konsistenzpolitik".

3) Caching-Muster

Cache-Aside (Lazy): Wir lesen → bei MISS laden wir von der Quelle → legen sie in den Cache. Einfach, gibt TTL-Steuerung.
Read-Through: Die App liest durch einen Cache, den sie selbst aus der Quelle zieht. Es ist bequem, die Politik zu zentralisieren.
Write-Through: Die Aufnahme geht sofort in den Cache und in die Quelle. Konsistenter, aber teurer in der Aufnahme.
Write-Back (Write-Behind): Wir schreiben in den Cache, die Quelle wird asynchron aktualisiert (Warteschlange). Hohe Geschwindigkeit, Liefergarantien und Idempotenz erforderlich.
Refresh-Ahead: Bei „Top“ -Schlüsseln aktualisieren wir den Wert, bevor die TTL abläuft.

Wo was: Spielkarten/Kataloge - cache-aside/read-through; Zähler/Führungstafeln - write-back + CRDT/Aggregationen; Währungs-/Limitverzeichnisse - read-through mit kontrollierter TTL.

4) Schlüssel, Segmentierung und Namensgebung

Шаблон: `domain:entity:{id}:v{schema}|region={R}|currency={C}|lang={L}`.
Fügen Sie nur das in den Schlüssel ein, was die Antwort tatsächlich ändert (Region, Währung, Sprache, Version des Schemas).
Versionierung von Schemata: Bei inkompatiblen Änderungen erhöhen Sie „vN“ im Schlüssel und vermeiden Sie Masseneinschläge.
Namespacing nach Produkten/Tenanten: 'tenant: {t}:...' - kritisch für multi-tenant.
Ein Bloom-Filter auf die „Existenz des Schlüssels“ kann das Wandern in die Quelle reduzieren.

5) TTL, Frische und Behinderung

TTL-Matrix:
  • Statik (gehashte Dateien): 30-365 Tage + 'immutable';
  • Kataloge/Banner: 5-60 Minuten + 'stale-while-revalidate';
  • Leaderboards/Zitate: 2-15 Sekunden;
  • Verzeichnisse (Währungen/Limits): 1-10 Minuten.
  • Behinderung durch Ereignisse: wir veröffentlichen 'Produkt. updated '→ Behinderung des Punktschlüssels/Präfix.
  • Tag-based purge: Gruppenbereinigungen nach Tag (Promo/Katalogfreigabe).
  • Soft-Expiry: Nach Ablauf der TTL geben wir die veraltete als' stale' ab, parallel aktualisieren wir (SWR/SIE).
  • Versioned Keys> Bulk Purge: billiger und sicherer.

6) Stampede, „heiße“ Schlüssel und Wettbewerb

Dogpile/Stampede Schutz:
  • Einzelflug (Coalescing-Anfrage): Ein Anführer aktualisiert den Schlüssel, der Rest wartet.
  • TTL-Jitter: Erodieren Sie die Lecks, indem Sie einen einmaligen Zusammenbruch vermeiden.
  • SWR lokal: Wir geben dem Nutzer den überfälligen Wert, im Hintergrund aktualisieren wir.
Hot Keys:
  • Replizieren des „heißen“ Schlüssels in mehrere Schlitze' Schlüssel # 1.. N', verteilt durch Lesen;
  • near-cache im Prozessspeicher;
  • prewarm/refresh-ahead vor den Gipfeln (Turniere/Matches).
  • Concarrency-Update-Limits für schwere Schlüssel.

7) Konsistenz und Kreuzschichten

Write-invalidate: beim Schreiben in die Quelle - synchron die entsprechenden Schlüssel (pub/sub) deaktivieren.
Read-repair: Bei Unstimmigkeiten den Cache mit dem korrekten Wert aktualisieren.
Eventual vs Strong: Kritische Geldtransaktionen können direkt/mit kurzer TTL gelesen werden; UI-Vitrinen und Statistiken sind evental.
CRDT/Aggregatoren: für verteilte Zähler/Ratings - „merge-safe“ -Strukturen (G-Counter, Top-K auf Threads).
Kaskadierende Behinderung: Das „Spiel“ -Update behindert die Karte + Liste + benutzerdefinierten Empfehlungscache.

8) Serialisierung, Komprimierung und Format

Formate: Protobuf/MessagePack schneller als JSON; für CDN/Browser - JSON mit Brotli.
Kompression in Redis: vorteilhaft für Objekte> 1-2 KB, aber achten Sie auf die CPU.
Partielle Antworten/Felder auf Anforderung: weniger Bytes → weniger TTFB und RAM.

9) Verdrängungspolitik und Größe

LRU (Standard) - sicher; LFU ist besser für „populäre“ Inhalte.
Größe der Schlüssel/Werte: Behalten Sie die Kontrolle (Metriken 'avg value size', 'max').
Quoten nach Namespace/Tenant, damit ein Produkt nicht den gesamten Cache „frisst“.

10) Sicherheit und PII/PCI

Persönliche/finanzielle Daten - nicht auf CDN/Edge und in allgemeinen Schichten zwischenspeichern; Verwenden Sie Token/Projektionen.
Verschlüsselung sensibler Werte in Redis über Client-Side Crypto (mit Vorsicht vor TTL-Kontrollverlusten).
Strenge ACL und Isolierung von Netzwerken; feste NAT/IP für egress zu den Anbietern.

11) Beobachtbarkeit und Cache-SLO

Metriken:
  • Hit Ratio (nach Ebenen und Präfixen), Origin Offload.
  • TTFB/P95/P99 vor/nach dem Cache, Latency Redis.
  • Evictions, OOM, keyspace hits/misses.
  • Stampede Rate (Anteil der parallelen Updates), refresh time.
  • Stale served % и Freshness lag.
SLO-Beispiele:
  • Spielekatalog: Hit Ratio ≥ 85%, TTFB P95 ≤ 150 ms (Rand).
  • API-Handbücher: Revalidation-Hit ≥ 60%, P95 ≤ 200 ms.
  • Redis: P99 Operation ≤ 5 ms, evictions nicht mehr als 1% pro Stunde.

12) FinOps: Cache-Kosten

$/GB-Monat RAM vs $/RPS Herkunft: Berechnen Sie den Amortisationspunkt.
Offload und egress: CDN + Redis reduzieren den ausgehenden Datenverkehr von Regional-Origin.
Image/WebP/AVIF und Denormalisierung bieten die größten Byte-Einsparungen.
Begrenzen Sie „liebe MISS“: analytica „bytes × MISS × region“.

13) Beispiele (Fragmente)

13. 1 Cache-Aside mit Einzelflug (Pseudocode)

python def get(key, ttl, loader):
val = redis. get(key)
if val: return val with single_flight (key): # only one updates val = redis. get (key) # double check if val: return val data = loader () # request to source redis. setex(key, ttl_with_jitter(ttl), serialize(data))
return data

13. 2 Veröffentlichung der Behinderung nach Veranstaltung

json
{
"event": "game. updated",
"game_id": "g123",
"affected": ["catalog:list:region=TR", "game:card:g123:"]
}

Der Consumer abonniert den Kanal und macht 'DEL '/' PUBLISH' zu den entsprechenden Schlüsseln/Tags.

13. 3 Schlüssel mit Schemaversion und Locale


game:card:v2:id=g123    region=BR    currency=BRL    lang=pt-BR

14) Checkliste Umsetzung

1. Cache Level Map und TTL-Matrix (statisch/halbstatisch/API).
2. Schlüsselbezeichnung: Domäne, Schema-Version, Ort/Region/Währung, Tenant.
3. Auswahl des Per-Endpoint-Musters (aside/read-through/write-through/back).
4. SWR/SIE, Einzelflug und TTL-Jitter gegen Stampede.
5. Behinderung durch Veranstaltungen (pub/sub), Tag-Purge für Gruppen.
6. Near-Cache für Hot Keys und Prewarm vor Peaks.
7. Formate und Kompression (protobuf/MsgPack, Brotli), Größenkontrolle.
8. LRU/LFU-Richtlinien, Quoten für Namespace/Tenant.
9. SLO/метрики: hit ratio, latency, evictions, stale %, freshness lag.
10. Sicherheit: No-Store für Personal, Tokenisierung, Netzwerk/ACL.

15) Anti-Muster

„no-cache“ „nur für den Fall“ und TTL-Ausfälle - Null Offload.
Der Schlüssel enthält alle Abfragen/Überschriften → eine Explosion der Kardinalität.
Massive Verfolgung von „nur CDN/Redis“ bei jeder Veröffentlichung.
Fehlender Schutz vor Stampede und einmaliges Auslaufen der „Top Keys“.
Ein einziges gemeinsames Redis ohne Quoten/Isolierung; Der „heiße“ Tenant frisst den ganzen Cache.
Caching von persönlichen Antworten auf Edge/CDN.
Keine Telemetrie freshness/evictions → blinde Kontrolle.

16) iGaming/Fintech Kontext: Praktische Hinweise

Leaderboards/Ratings: TTL 2-10 s, Aggregate-Streams + CRDT, SWR bei Störungen.
Spiele-Verzeichnis/Banner: CDN + Redis; Schlüssel: Region/Währung/Sprache; Behinderung durch „promo: update“ -Tags.
Zahlungsstatus: kein Cache auf dem Schreibpfad; Lesen - eine kurze TTL (≤3 -5 s) oder eine direkte Anfrage.
KYC/AML antwortet: Cache nicht-PII-Derivate (Status), nicht speichern Bilder/Dokumente in Redis.
VIP-Pfad: separater Namespace/Redis-Pool, bevorzugter Service.

Summe

Eine starke Cache-Strategie ist die Architektur der Ebenen, die richtigen Aktualisierungsmuster, eine durchdachte TTL/Behinderung, Stampede-Resistenz, saubere Schlüssel und Versionen sowie Beobachtbarkeit und FinOps. Indem Sie diesen Prinzipien folgen, stabilisieren Sie die Schwänze der P95/P99, reduzieren die Belastung der Quellen und erhalten vorhersehbare Kosten für eine Millisekunde - genau dort, wo es für das Produkt und das Unternehmen am wichtigsten ist.

Contact

Kontakt aufnehmen

Kontaktieren Sie uns bei Fragen oder Support.Wir helfen Ihnen jederzeit gerne!

Integration starten

Email ist erforderlich. Telegram oder WhatsApp – optional.

Ihr Name optional
Email optional
Betreff optional
Nachricht optional
Telegram optional
@
Wenn Sie Telegram angeben – antworten wir zusätzlich dort.
WhatsApp optional
Format: +Ländercode und Nummer (z. B. +49XXXXXXXXX).

Mit dem Klicken des Buttons stimmen Sie der Datenverarbeitung zu.