GH GambleHub

Texnologiyalar və Infrastruktur → Cash səviyyələri və məlumatların saxlanması

Cash səviyyələri və məlumatların saxlanması

1) Niyə çox qatlı cache lazımdır

Cache - «bahalı» alt sistemlərə (DB, xarici API, şəbəkələr) getmədən cavabın qısa yoludur. Çox qatlı yük paylayır: brauzer → CDN/edge → tətbiqi qat → paylanmış önbellək → DB/saxlama. Məqsədlər: P95/P99 azaltmaq, origini boşaltmaq, zirvələrə daha dözmək və baytın qiymətini azaltmaq.

2) Cache səviyyələrinin xəritəsi

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: Təhlükəsiz GET-də qısa ömürlü cache.
4. App (in-process): LRU/LFU, «isti» açarlar üçün near-cache, millisaniyələr.
5. Paylanmış önbellək (Redis/Memcached): dinamika üçün əsas qat.
6. Caches DB: Pg/Innodb tamponlar, PgBouncer multiplexing, materialized views.
7. Disk/obyekt hekayələri: precomputed snapshots, blob-cache (məsələn, S3 + CDN).

Prinsip: "istifadəçiyə nə qədər yaxın olarsa, TTL bir o qədər qısa və daha az personalizasiya; məlumatlara nə qədər yaxın olarsa, konsistentlik siyasəti də bir o qədər zəngindir".

3) Caching nümunələri

Cache-Aside (Lazy): oxumaq → MISS mənbədən göndərmək → cache qoymaq. Sadə, TTL nəzarət verir.
Read-Through: app özü mənbədən çəkir cache vasitəsilə oxuyur. Siyasəti mərkəzləşdirmək rahatdır.
Write-Through: giriş dərhal cache və mənbəyə gedir. Daha tutarlı, lakin daha bahalı.
Write-Back (Write-Behind): cache yazın, mənbə asenxron (növbə) yenilənir. Yüksək sürət, çatdırılma zəmanəti və idempotentlik tələb olunur.
Refresh-Ahead: «Top» açarları TTL bitənə qədər yeniləyir.

Harada: oyun kartları/kataloqlar - cache-aside/read-through; sayğaclar/lider bordlar - write-back + CRDT/aqreqasiya; valyuta/limit referansları - nəzarət TTL ilə read-through.

4) Açarlar, seqmentasiya və neyminq

Шаблон: `domain:entity:{id}:v{schema}|region={R}|currency={C}|lang={L}`.
Açara yalnız cavabın həqiqətən dəyişdiyini daxil edin (region, valyuta, dil, sxem versiyası).
Sxemlərin versiyalaşdırılması: uyğun olmayan dəyişikliklərlə - kütləvi purge-dən qaçaraq açarda 'vN' artırın.
Məhsullar/tenantlar üzrə Namespacing: 'tenant: {t}:...' - multi-tenant üçün kritik.
Bloom filter «açarın mövcudluğu» mənbəyə səfərləri azalda bilər.

5) TTL, təravət və əlillik

TTL matrisi:
  • Statik (Hash faylları): 30-365 gün + 'immutable';
  • kataloqlar/bannerlər: 5-60 dəqiqə + 'stale-while-revalidate';
  • aparıcı bordlar/kotirovkalar: 2-15 saniyə;
  • məlumat kitabçaları (valyutalar/limitlər): 1-10 dəqiqə.
  • Hadisələrin əlilliyi: "product. updated '→ nöqtə açarı/prefiksinin əlilliyi.
  • Tag-based purge: etiketlərə görə qrup təmizləmələri (promo/kataloq buraxılışı).
  • Soft-Expiry: TTL-dən sonra köhnəlmiş 'stale' kimi veririk, paralel olaraq yeniləyirik (SWR/SIE).
  • Versioned Keys> kütləvi purge: daha ucuz və daha təhlükəsiz.

6) Stampede, «isti» açarları və rəqabət

Dogpile/Stampede qorunması:
  • Single-flight (request coalescing): bir lider açarı yeniləyir, qalanları gözləyir.
  • TTL Jitter: ani çöküşdən qaçaraq axınları bulanıqlaşdırın.
  • SWR lokaldır: vaxtı keçmiş dəyəri istifadəçiyə veririk, fonda yeniləyirik.
Hot Keys:
  • «isti» açarın oxunuşla paylanmış bir neçə 'key # 1.. N' yuvasına replikasiyası;
  • prosesin yaddaşında near-cache;
  • pik əvvəl prewarm/refresh-ahead (turnirlər/matçlar).
  • Ağır açarlar üçün concarrensi yeniləmə limitləri.

7) Konsistentlik və çarpaz qatlar

Write-invalidate: mənbəyə yazarkən - müvafiq açarları (pub/sub) sinxron şəkildə əlil edin.
Read-repair: Uyğunsuzluqlar baş verərsə, cachı düzgün qiymətlə yeniləyin.
Eventual vs Strong: kritik pul əməliyyatları birbaşa/qısa TTL ilə oxuyun; UI-vitrinlər və statistika - eventual.
CRDT/aqreqatorlar: paylanmış sayğaclar/reytinqlər üçün - «merge-safe» strukturları (G-Counter, axınlarda Top-K).
Kaskad əlilliyi: «Oyun» yeniləmə əlil kart + siyahı + istifadəçi cache tövsiyələr.

8) Serial, sıxılma və format

Formatlar: ProtoBof/MessagePack daha sürətli JSON; CDN/brauzer üçün - Brotli ilə JSON.
Redis sıxılması:> 1-2 KB obyektlər üçün sərfəlidir, lakin CPU-ya nəzarət edin.
Partial responses/tələb olunan sahələr: daha az bayt → daha az TTFB və RAM.

9) Yerdəyişmə siyasəti və ölçüsü

LRU (default) - təhlükəsiz; LFU - «məşhur» məzmun üçün daha yaxşıdır.
Açar/dəyər ölçüsü: nəzarət edin (metriklər 'avg value size', 'max').
Bir məhsul bütün cache «yedi» deyil namespace/tenant üçün kvotalar.

10) Təhlükəsizlik və PII/PCI

Şəxsi/maliyyə məlumatları - CDN/edge-də və ümumi təbəqələrdə önbelleğe alınmamalıdır; tokenlər/proyeksiyalar istifadə edin.
Client-side crypto vasitəsilə Redis həssas dəyərləri şifrləmə (TTL nəzarət itkisinə qarşı ehtiyatla).
Ciddi ACL və izolyasiya şəbəkələri; provayderlərə egress üçün sabit NAT/IP.

11) Müşahidə və SLO cache

Metriklər:
  • Hit Ratio (qatlara və prefikslərə görə), Origin Offload.
  • TTFB/P95/P99 əvvəl/sonra cache, Latency Redis.
  • Evictions, OOM, keyspace hits/misses.
  • Stampede rate (paralel yeniləmələrin payı), refresh time.
  • Stale served % и Freshness lag.
SLO nümunələri:
  • Oyun kataloqu: Hit Ratio ≥ 85%, TTFB P95 ≤ 150 ms (edge).
  • API referansları: Revalidation-hit ≥ 60%, P95 ≤ 200 ms.
  • Redis: P99 əməliyyat ≤ 5 ms, evictions saatda 1% -dən çox deyil.

12) FinOps: cache dəyəri

$/GB-ay RAM vs $/RPS origin: geri ödəmə nöqtəsini hesablayın.
Offload və egress: CDN + Redis regional-origin çıxış trafikini azaldır.
Image/WebP/AVIF və denormalizasiya ən çox bayt qənaət verir.
«Bahalı MISS» limiti: «bayt × MISS × region» analitikası.

13) Nümunələr (fraqmentlər)

13. 1 Cache-Aside single-flight ilə (psevdokod)

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 Hadisə üzrə əlilliyin nəşri

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

Konsumer kanala abunə olub və 'DEL '/' PUBLISH' açarlarına/etiketlərinə uyğun gəlir.

13. 3 Sxem versiyası və lokal açar


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

14) Giriş çek siyahısı

1. Cache və TTL matris səviyyələrinin xəritəsi (statik/yarı statik/API).
2. Neyming açarları: domen, sxem versiyası, lokal/region/valyuta, tenant.
3. per-endpoint (aside/read-through/write-through/back) nümunə seçimi.
4. SWR/SIE, single-flight və stampede qarşı TTL jitter.
5. Tədbirlərin əlilliyi (pub/sub), qruplar üçün tag-purge.
6. «isti» açarları və pik əvvəl prewarm üçün Near-cache.
7. Formatlar və sıxılma (protobuf/MsgPack, Brotli), ölçü nəzarəti.
8. LRU/LFU siyasətləri, namespace/tenant kvotaları.
9. SLO/метрики: hit ratio, latency, evictions, stale %, freshness lag.
10. Təhlükəsizlik: no-store şəxsi, tokenization, şəbəkə/ACL.

15) Anti-nümunələr

'no-cache' "və TTL-dən imtina - sıfır offload.
Açar bütün query/başlıqları daxildir → kardinallıq partlayış.
Hər buraxılışda kütləvi purge «bütün CDN/Redis».
stampede qarşı qorunma və «top açarları» birdəfəlik sona çatması yoxdur.
kvota/izolyasiya olmadan vahid ümumi Redis; «isti» tenant bütün keşi yeyir.
edge/CDN-ə şəxsi cavabların önbelləklənməsi.
Heç bir telemetriya freshness/evictions → kor nəzarət.

16) iGaming/fintech konteksti: praktik qeydlər

Aparıcı bordlar/reytinqlər: TTL 2-10 s, aggregate-streams + CRDT, SWR uğursuzluqlar.
Oyun kataloqu/bannerlər: CDN + Redis; açar: region/valyuta/dil; «promo: update» etiketləri ilə əlillik.
Ödəniş statusları: qeyd yolunda cache olmadan; oxu - qısa TTL (≤ 3-5 s) və ya birbaşa sorğu.
KYC/AML cavabları: qeyri-PII törəmələri (statuslar) önbelleğe alın, Redis-də şəkillər/sənədlər saxlamayın.
VIP yol: ayrı namespace/hovuz Redis, prioritet xidmət.

Yekun

Güclü önbellək strategiyası səviyyələrin arxitekturası, düzgün yeniləmə nümunələri, düşünülmüş TTL/əlillik, stampede müqaviməti, səliqəli açarlar və versiyalar, həmçinin müşahidə və FinOps. Bu prinsiplərə əməl edərək, P95/P99 quyruqlarını sabitləşdirir, mənbə yükünü azaldır və məhsul və biznes üçün ən vacib olan bir milisaniyənin proqnozlaşdırıla bilən dəyərini əldə edirsiniz.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.