GH GambleHub

Teknoloji ve Altyapı - Önbellek katmanları ve veri depolama

Önbellek katmanları ve veri depolama

1) Neden çok katmanlı bir önbelleğe ihtiyacınız var?

Önbellek, "pahalı" alt sistemlere (veritabanları, harici API'ler, ağlar) gitmeden bir cevaba giden kısa bir yoldur. Katmanlama yükü dağıtır: browser> CDN/edge> application layer - distributed cache - database/storage. Hedefler: P95/P99 azaltmak, kaynağı boşaltmak, zirvelere daha sıkı dayanmak ve bayt maliyetini azaltmak.

2) Önbellek seviyesi haritası

1. Браузер: 'Cache-Control', 'ETag', 'Last-Modified', 'stale-while-revalidate'.
2. CDN/Edge: TTL/ключ, Vary, İmzalı URL'ler, resim yeniden boyutlandırma; katmanlı/kalkan.
3. API Gateway/Service Mesh: Güvenli GET için kısa ömürlü yanıt önbelleği.
4. Uygulama (işlem içi): LRU/LFU, kısayol tuşları için önbelleğe yakın, milisaniye.
5. Dağıtılmış önbellek (Redis/Memcached): Dinamikler için ana katman.
6. DB önbellekleri: Pg/Innodb tamponları, PgBouncer çoğullama, materyalize görünümler.
7. Disk/nesne depoları: önceden hesaplanmış anlık görüntüler, blob önbellek (örneğin, S3 + CDN).

İlke: "Kullanıcıya ne kadar yakın olursa, TTL o kadar kısa ve daha az kişiselleştirme; Verilere ne kadar yakın olursa, tutarlılık politikası o kadar zengin olur"

3) Önbellek desenleri

Cache-Aside (Lazy): Okuyoruz - MISS ile kaynaktan yüklüyoruz - önbelleğe koyuyoruz. Basit, TTL kontrolü sağlar.
Okuma: Uygulama, kaynağın kendisinden çeken bir önbellekten okur. Politikayı merkezileştirmek uygundur.
Yazma: Kayıt hemen önbelleğe ve kaynağa gider. Daha tutarlı, ama kayıtlarda daha pahalı.
Geri Yazma (Geriye Yazma): önbelleğe yazarız, kaynak eşzamansız olarak güncellenir (kuyruk). Yüksek hız, nakliye garantileri ve idempotency gerekli.
Refresh-Ahead: "üst" tuşlar için, TTL süresi dolmadan önce değeri güncelleyin.

Nerede ne: oyun kartları/dizinleri - önbellek-kenara/okuma-through; Sayaçlar/skor tabloları - geri yazma + CRDT/toplama; Para/limit dizinleri - kontrollü TTL ile okuma.

4) Anahtarlar, segmentasyon ve adlandırma

Шаблон: 'domain: entity: {id}: v {schema} | region = {R} | currency = {C} | lang = {L}'.
Anahtara yalnızca cevabı gerçekten değiştiren şeyleri ekleyin (bölge, para birimi, dil, şema sürümü).
Şema sürümü oluşturma: uyumsuz değişiklikler için - anahtarda 'vN' değerini yükseltin, toplu temizlemeden kaçının.
Ürüne/kiracıya göre ad alanı: 'tenant: {t}:...' - çok kiracı için kritik.
"Anahtar varoluş" için Bloom filtresi, kaynağa yapılan yolculukları azaltabilir.

5) TTL, tazelik ve sakatlık

TTL-matrisi:
  • Statik (karma dosyalar): 30-365 gün + 'değişmez';
  • Kataloglar/afişler: 5-60 dakika + 'bayat-while-revalidate';
  • Leadboard/alıntılar: 2-15 saniye;
  • Dizinler (para birimleri/limitler): 1-10 dakika.
  • Engellilik olayları: yayınla 'ürünü. Güncellendi '- nokta tuşu/önek sakatlığı.
  • Etiket tabanlı temizleme: etikete göre grup temizliği (promosyon/katalog sürümü).
  • Yumuşak Vade: TTL'nin süresi dolduktan sonra, eski olanı 'bayat'olarak veriyoruz, paralel olarak güncelliyoruz (SWR/SIE).
  • Sürüm Anahtarlar> toplu temizleme: daha ucuz ve daha güvenli.

6) Stampede, sıcak tuşlar ve rekabet

Dogpile/Stampede koruması:
  • Tek uçuş (istek birleştirme): Bir lider anahtarı günceller, gerisi bekler.
  • TTL jitter: Çıkışı bulanıklaştırır, bir kerelik çöküşü önler.
  • SWR yerel olarak: süresi dolan değeri kullanıcıya verir, arka planda güncelleriz.
Kısayol tuşları:
  • Çoklu 'anahtar # 1'e sıcak tuş çoğaltma.. Okunarak dağıtılan n 'yuvaları
  • Proses belleğinde önbelleğe yakın;
  • Seçimlerden önce warm/refresh-ahead (turnuvalar/maçlar).
  • Ağır anahtarlar için concarrency güncellemeleri sınırları.

7) Tutarlılık ve çapraz katmanlar

Write-invalidate: kaynağa yazarken - eşzamanlı olarak ilgili anahtarları devre dışı bırakın (pub/sub).
Okuma-onarma: tutarsızlıklar durumunda, önbelleği doğru değerle güncelleyin.
Nihai ve Güçlü: kritik nakit işlemleri doğrudan/kısa TTL ile okunur; UI vitrinler ve istatistikler - nihai.
CRDT/toplayıcılar: dağıtılmış sayaçlar/derecelendirmeler için - "birleştirme güvenli" yapılar (akışlarda G-Counter, Top-K).
Basamaklı sakatlık: "Oyun'un güncellenmesi kart + liste + özel öneri önbelleğini devre dışı bırakır.

8) Serileştirme, sıkıştırma ve format

Formatlar: JSON'dan daha hızlı protobuff/MessagePack; CDN/tarayıcı için - Brotli ile JSON.
Redis'te Sıkıştırma:> 1-2 KB nesneler için faydalıdır, ancak CPU'ya dikkat edin.
Kısmi yanıtlar/isteğe bağlı alanlar: daha az bayt - daha az TTFB ve RAM.

9) Önleyici politikalar ve boyut

LRU (varsayılan) - güvenli; LFU "popüler" içerik için daha iyidir.
Anahtar/değer boyutu: kontrol altında tutun (metrikler 'avg değer boyutu', 'maks').
Ad alanı/kiracı kotaları, böylece bir ürün tüm önbelleği "yemez".

10) Güvenlik ve PII/PCI

Kişisel/finansal veriler - CDN/edge ve ortak katmanlarda önbelleğe almayın; Belirteçleri/projeksiyonları kullanın.
Redis'teki hassas değerlerin istemci tarafı kripto yoluyla şifrelenmesi (TTL kontrol kayıpları konusunda dikkatli).
Sıkı ACL'ler ve ağ izolasyonu; Sağlayıcılara çıkış için sabit NAT/IP.

11) Gözlemlenebilirlik ve önbellek SLO

Metrikler:
  • Isabet Oranı (katman ve önek ile), Origin Aktarımı.
  • Önbellekten önce/sonra TTFB/P95/P99, Latency Redis.
  • Tahliyeler, OOM, keyspace vuruşları/kaçırmaları.
  • İzdiham hızı, yenileme süresi.
  • Bayat servis % и Tazelik gecikme.
SLO örnekleri:
  • Oyun kataloğu: Vuruş Oranı ≥ %85, TTFB P95 ≤ 150 ms (kenar).
  • API dizinleri: Revalidation-hit ≥ %60, P95 ≤ 200 ms.
  • Redis: P99 operasyonu ≤ 5 ms, tahliye saatte %1'den fazla değil.

12) FinOps: önbellek değeri

$/GB aylık RAM vs $/RPS kaynağı: geri ödeme noktasını hesaplayın.
Boşaltma ve çıkış: CDN + Redis, bölge kaynaklı giden trafiği azaltır.
Görüntü/WebP/AVIF ve denormalizasyon en büyük bayt tasarrufunu sağlar.
Sınırla "pahalı MISS": analitik "bayt × MISS × bölge".

13) Örnekler (fragmanlar)

13. 1 Tek uçuşlu önbellek-Kenara (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 Engelliliğin etkinliğe göre yayınlanması

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

Tüketici kanala abone olur ve 'DEL'/' PUBLISH' tuşlarını/etiketlerini eşleştirir.

13. 3 Şema sürümü ve yerel ayarlı anahtar


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

14) Uygulama kontrol listesi

1. Önbellek düzeyi eşlemesi ve TTL matrisi (statik/yarı statik/API).
2. Anahtar adlandırma: etki alanı, şema sürümü, yerel/bölge/para birimi, kiracı.
3. Uç nokta deseni başına seçin (sor/oku/yaz/geri).
4. SWR/SIE, tek uçuş ve TTL jitter vs izdiham.
5. Etkinlikler tarafından devre dışı (pub/sub), gruplar için etiket temizleme.
6. Kısayol tuşları için önbelleğe yakın ve zirvelerden önce ön warm.
7. Formatlar ve sıkıştırma (protobuf/MsgPack, Brotli), boyut kontrolü.
8. LRU/LFU politikaları, ad alanı/kiracı kotaları.
9. SLO/метрики: isabet oranı, gecikme, tahliye, bayat %, tazelik gecikmesi.
10. Güvenlik: Kişisel, tokenization, ağ/ACL için mağaza yok.

15) Anti-desenler

'önbellek yok' "sadece durumda've TTL arızaları sıfır yük aktarımı.
Anahtar tüm sorguları/başlıkları içerir - kardinalite patlaması.
Toplu temizleme "toplam CDN/Redis'her sürümü ile.
İzdihama karşı koruma eksikliği ve "üst anahtarların'bir kerelik sona ermesi.
Kotalar/izolasyon olmadan tek ortak Redis; "Sıcak" kiracı tüm önbelleği yiyor.
Edge/CDN'ye kişisel yanıtları önbelleğe alma.
Tazelik/tahliye telemetrisi yok - kör kontrol.

16) iGaming bağlamı/fintech: pratik notlar

Skor tabloları/derecelendirmeler: TTL 2-10 s, toplu akışlar + CRDT, çökmelerde SWR.
Oyun kataloğu/afişler: CDN + Redis; anahtar: bölge/para birimi/dil; "promo: update" etiketleri ile engellilik.
Ödeme durumları: yazma yolunda önbellek yok; Okuma - kısa TTL (≤3 -5 saniye) veya doğrudan istek.
KYC/AML yanıtları: önbellek PII olmayan türevleri (durumları), Redis görüntüleri/belgeleri saklamayın.
VIP yolu: ayrı ad alanı/Redis havuzu, öncelikli hizmet.

Toplam

Güçlü bir önbellek stratejisi, seviye mimarisi, doğru güncelleme kalıpları, düşünceli TTL/engellilik, izdiham direnci, düzgün anahtarlar ve sürümler ve gözlemlenebilirlik ve FinOps'dur. Bu ilkeleri izleyerek, P95/P99 kuyruklarını stabilize edecek, kaynaklar üzerindeki yükü azaltacak ve milisaniye başına öngörülebilir bir maliyet elde edeceksiniz - tam olarak ürün ve iş için en önemli yer.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.