İçerik kataloğu motoru
Katalog motoru, ön taraftaki oyun vitrinlerinin ve promosyon koleksiyonlarının çekirdeğidir: Sağlayıcılardan (RGS) meta verileri toplar ve normalleştirir, arama/filtreler/sıralama sağlar, yargı ve markaya göre erişilebilirlik kurallarını uygular, kişiselleştirme ve promosyon yerleşimlerini karıştırır ve daha sonra API aracılığıyla öngörülebilir SLO ile hızlı yanıtlar sunar.
1) Hedefler ve ilkeler
Hızlı okuma: p95 ≤ dizin/arama isteği başına 100-150 ms.
Gerçek ve tazelik: Temel özelliklerin (kullanılabilirlik, ikramiyeler, sağlayıcı durumları) garantili alaka düzeyi.
Esneklik: editoryal koleksiyonlar ve sürümleri olmayan promosyon yuvaları.
Uyumluluk: Coğrafi/yaş/içerik kuralları, lisanslar, sorumlu oyun kısıtlamaları.
Çok kiracılı/bölge: marka izolasyonu ve veri ikameti uyumluluğu.
Gözlemlenebilirlik: Outing Kalite Metrikleri, A/B, Oyun Dönüştürme/Bahis.
2) Etki alanı modeli (minimum)
Varlıklar:- Oyun, sağlayıcının bir oyunu/ürünüdür.
- Sağlayıcı - RGS/stüdyo.
- Değişken - bir oyunun varyantları (volatilite, çizgiler, limitler, sunucu).
- Koleksiyon - editoryal/otomatik seçim (örn. "Yeni Öğeler", "Jackpotlar").
- Yerleştirme - sayfada/yuvada sabit konum/afiş/fayans.
- Yetenek/Özellik - oyun özellikleri (ücretsiz dönüşler, satın alma özelliği, jackpot).
- JurisdictionRule - erişilebilirlik/kısıtlama kuralları.
- Sinyaller - davranışsal/operasyonel sinyaller (popülerlik, TO, gelir).
- Varlık - cihazlar/yoğunluklar için seçeneklerle medya (simgeler, posterler, demo videolar).
Anahtarlar: 'game _ id' (sabit dahili, eşit değil provider_game_id), 'tenant _ id', 'bölge', 'yerel'.
3) En yüksek ve normalleştirme
Konveyör:1. Kaynak Adaptörleri (çekiciler): RGS/stüdyolarla entegrasyonlar (dizinler, özellikler, RTP, etiketler).
2. Sanitize ve Harita - Harici alanları tek bir sözlükte (ACL) eşleyin, doğrulayın ve tekilleştirin.
3. Enrich: yerelleştirmeler, kategoriler, anlamsal etiketler, yaş sınırı derecelendirmeleri.
4. Orta: pazara göre içerik bayrakları (NSFW/dini semboller/hassas konular).
5. Yayınlama: 'GameUpserted/ProviderStatusChanged' olayları - katalog projeksiyonu.
Idempotence: 'source _ id' + 'version _ ts' içeren tüm mesajlar; Tekrarlanan yan etkiler olmadan işlenir.
Evrim şeması: adaptörlerde 'schema _ version' + mapper geçişleri.
4) Normalleştirilmiş şema (basitleştirilmiş)
json
{
"game_id": "g_3f92",
"tenant_id": "brand_eu",
"provider": { "id": "pr_evolution", "name": "Evolution" },
"title": { "en": "Lightning Roulette", "de": "Lightning Roulette" },
"capabilities": ["live","roulette","multiplier","bonus"],
"rtp": 97.3,
"volatility": "high",
"limits": { "min": 0.1, "max": 1000.0, "currency": "EUR" },
"jurisdiction": {
"allowed": ["MT","EE","DE"],
"blocked": ["NL","BE"],
"age_rating": 21
},
"assets": {
"tile": { "1x":"...", "2x":"..." },
"poster": { "web":"...", "mobile":"..." }
},
"tags": ["new","jackpot"],
"release_date": "2025-09-12",
"status": "active",
"variants": [{ "id":"v1","server":"eu-central-1","rtp":97.3 }]
}
5) Arama, filtreler, fasetler
Dizinler: tam metin isme/eşanlamlılara göre, fasetler 'sağlayıcı', 'yetenekler', 'volatilite', 'rtp _ bucket', 'etiketler'.
Filtreler: yargı/bölge/dil/cihaz/yaş, yalnızca aktif/sertifikalı.
Eşanlamlılar/stemming: kullanıcı terimlerinin haritası ("kitaplar", "meyveler", "toplar").
Yazım hataları: uzunluk kısıtlaması olan toleranslı arama (düzenleme mesafesi ≤1 -2).
6) Sıralama: sinyaller ve formül
İşaretler (örnek):- Tazelik (serbest bırakılmasından bu yana geçen süre).
- Nüfus (başlar/saat, benzersiz oyuncular).
- Kalite (katalogdan oyuna TO, 1/7 gün tutun).
- İş (pazarlama artırır, fırsatlar, promosyon yuvaları).
- Uyumluluk (gerekirse hassas içerik için yumuşak düşürmeler).
- Oyuncu uyumu (profil/tercih uyumluluğu).
score = w1freshness + w2popularity + w3ctr + w4player_fit + w5boost
Ağırlıklar yapılandırma/deneyler tarafından kontrol edilir; Tüm sinyaller normalize edildi [0; 1].
7) Kişiselleştirme
Kısa bellek: son lansmanlar ve türler, RYW - kullanıcı hemen yeni eylem görür.
Uzun bellek: Oyun ve oyuncu profili gömmeleri (oyun türleri/volatilite/oturumlar).
Güvenlik: Kişiselleştirme asla yargı/yaş kurallarını ihlal etmez.
Fallback: birkaç sinyal varsa - nötr sıralama + editoryal koleksiyonlar.
8) Koleksiyonlar ve promosyon yerleşimleri
Koleksiyonlar:- Otomatik: kural/sorgu (örn. 'capabilities contains' jackpot 'AND release_date> = NOW () -30d') içerir.
- Editoryal: Sipariş ve zamanlama ile manuel liste.
- Yerleşimler: Sayfalardaki sabit konumlar (kahraman, satır-1-yuva-3), A/B, segmente/yargı alanına göre hedefleme.
- Tarihler ve öncelikler: 'Starts _ at/ends _ at', çakışma önceliği, yayınlanmadan önce önizleme.
9) Uyum ve Erişilebilirlik Politikası
Coğrafi/yargı: Ülkelerin/bölgelerin beyaz/siyah listeleri, lisansların/sertifikaların doğrulanması.
Yaş derecesi: asgari yaş, uyarılar, uyumsuz pazarlar için saklanma.
Konu/sembolizm: Ülkeye göre hassas içerik bayrakları (din, alkol, vb.).
Sorumlu oyun: Limit/timeout oyuncuları için gizle/indir.
Denetim: Sebeplerle kullanılabilirlikteki değişikliklerin değişmez günlüğü.
10) Çok kiracı ve çok bölgeli
Tüm veriler 'tenant _ id've' region'olarak işaretlenmiştir.
İzolasyon: Bölgelere göre kuorumlar/tonozlar; Bölgeler arası projeksiyonlar - yalnızca kümeler.
Adalet: Kiracı başına alım/yayın kotaları, böylece "gürültülü" marka gerisini geciktirmez.
11) Mimari taslak
Yazma çekirdeği dizini (CP): normalleştirme + işlem giden kutusu olayları.
Projeksiyonlar/Okuma Modelleri (EC): arama endeksleri, materyalize koleksiyonlar, popülerlik sayaçları.
- Soğuk sayfalar/görüntüler için Edge/CDN.
- Bellek içi sıcak sorgular için önbellek (key = filters + page + tenant + region).
- Ficheflags: serbest bırakılmadan yuvarlanan sıralama/toplama kuralları.
12) API (REST/GraphQL, örnekler)
REST
GET /v1/catalog?tenant=brand_eu®ion=EE&locale=ru
&filter=jackpot,true&sort=score_desc&page=1&size=24
→ 200 { items:[...], facets:{...}, as_of:"2025-10-31T12:10:02Z" }
GraphQL (parça)
graphql query Catalog($tenant:String!,$region:String!,$q:String,$filters:Filters){
catalog(tenant:$tenant, region:$region, q:$q, filters:$filters){
items { gameId title provider { name } score badges assets { tile } }
facets { providers { key,count } capabilities { key,count } }
freshnessMs
}
}
Sözleşmeler:
- Her zaman'as _ of/tazelikMs ', çağrı, fasetleri döndürün.
- Kişiselleştirme için - PII olmadan oturum işaretleyici (RYW).
13) Sinyaller ve veri akışı
Popülerlik: oyunları başlatırken artışlar - dakika kovaları - projeksiyondaki birimler.
TO/dönüşüm: Yerleşimler/koleksiyonlar üzerindeki sayaçları tıklayın/başlatın.
Çalışma durumları: sağlık sağlayıcıları (RGS), ikramiyeler/limitler (olay akışı).
Pazarlama artırır: oyunlar/kategoriler/tedarikçiler için zaman faktörleri.
14) Gözlemlenebilirlik ve SLO
Dizin metrikleri:- 'catalog _ p95 _ ms', 'catalog _ p99 _ ms', 'error _ rate'.
- 'index _ freshness _ ms' (proje gecikmesi), 'ingest _ lag _ ms'.
- 'ctr', 'click-to-launch', 'collection _ coverage' (koleksiyonlardan % check out).
- 'lift _ ctr', 'lift _ conversion', "exploit vs exploit" доля.
- % doğru uygulanan coğrafi/yaş kuralları, blok sayısı/saat.
Uyarılar: 'ingest _ lag _ ms' büyümesi, anahtar koleksiyonlarda TO'da düşüş, sağlayıcının bozulması (sorundaki etiketler).
15) Performans ve önbelleğe alma
Strateji: sıcak sorgular - filtreler tarafından bir anahtar ile 30-120 s önbellek; Kişisel bloklar - kısa TTL (10-30 s) veya önbellek yok.
Engellilik: 'GameUpserted/AvailabilityChanged/PlacementUpdated' etkinliklerine göre.
Pagination: sinyalleri güncellerken kartları "atlamamak" için kararlı imleçler.
16) Medya ile çalışma
Oluşturma profilleri: Web/mobil/TV için boyutlar/yoğunluklar.
Optimizasyon: WebP/AVIF, lazy-load, fayanslar için sprite/atlas.
İçerik güvenliği: tarama, filigran, satır içi PII yasağı.
17) Test etme
Adaptörler ve API'ler için Sözleşme/Şema testleri.
Alaka düzeyi testleri: altın sorgu setleri - beklenen sonuçlar/sipariş.
Kişiselleştirme: Korkuluk metrikleri ile çevrimdışı AUC/NDCG + çevrimiçi A/B (oyun içi zaman, para yatırma, RG sinyalleri).
Kaos: sağlayıcı bozulması, ani artışlar, indeksleme gecikmeleri.
18) Playbook'lar (runbook'lar)
1. Dizin gecikmesi> SLO: ikincil koleksiyonları durdurun, alma önceliğini artırın, sıralamayı geçici olarak basitleştirin.
2. Sağlayıcı "kırmızı": düşük/onun oyunları gizlemek, alternatif koleksiyonları yükseltmek.
3. API hatası atlama: önbelleği/arka ucu denetleyin, güvenlik zaman aşımlarını etkinleştirin, sayfa boyutunu küçültün.
4. Yanlış kullanılabilirlik: Son kuralı geri alın, kritik pazarların "beyaz listesini" ekleyin, denetim değişiklikleri yapın.
5. Sıralama sürümü: Kanarya sunumu (%5 - %25 - %50 - %100), TO/dönüşüm geri dönüşü.
19) Tipik hatalar
Harici sağlayıcı şemalarını dahili bir modelle karıştırma (ACL yok).
'As _ of/tazelik' yokluğu - "modası geçmiş" dizin hakkında tartışmalar.
Yargı kurallarını ihlal eden kişiselleştirme.
Sinyallerin ve A/B'nin ayrışması olmadan tek "sihirli" sıralama formülü.
Önbelleğe alma ve imleçler olmadan büyük sayfalar - p99 "ateş".
Olaylar + projeksiyonlar yerine dizin ve OLTP'ye çift yazma.
20) Satış öncesi kontrol listesi
- Tüm sağlayıcılar için normalleştirilmiş alan sözlüğü ve ACL.
- Idempotent yutmak, giden kutusu/gelen kutusu, DLQ ve redrive.
- Katalog projeksiyonları ve taze SLO ile arama endeksleri.
- Ağırlık kontrollü sıralama, sinyal ayrışması ve A/B
- Uyum kuralları (coğrafi/yaş/konu) ve değişikliklerin denetimi.
- Çok kiracı/bölge: veri izolasyonu, adalet, ikamet.
- API ile'as _ of ', fasetler, imleçler; Olaya göre önbellek ve sakatlık.
- p95/p99 metrikleri, alım/indeksleme, TO/dönüşüm; Uyarılar.
- Olay oyun kitapları; Kanarya salımları ve ficheflags.
- Alaka, sözleşmeler, kaos ve kişiselleştirme testleri.
Sonuç
Katalog motoru, oyun içeriği üzerinde bir "arama motoru + kural sistemi + vitrin'dir. Güçlü ACL, normalleştirilmiş veriler, hızlı okuma tahminleri, şeffaf sıralama sinyalleri, korkuluk ölçümleri ile kişiselleştirme ve sıkı uyumluluk, kataloğu üretimde sürprizler olmadan ve düzenleyicilerle uzlaşmadan sürdürülebilir ve ölçülebilir bir ürün büyüme koluna dönüştürür.