Мазмун каталогунун кыймылдаткычы
Каталогдун кыймылдаткычы - бул алдыңкы оюндардын жана промо-тандоолордун өзөгү: ал провайдерлерден (RGS) мета-маалыматтарды чогултат жана нормалдаштырат, издөө/фильтрлерди/ранжирлөөнү камсыз кылат, юрисдикциялар жана бренддер боюнча жеткиликтүүлүк эрежелерин колдонот, жекелештирүүнү жана промо-оюндарды аралаштырат, андан кийин менен API аркылуу тез жоопторду берет алдын ала SLO.
1) Максаттары жана принциптери
Fast Readings: p95 ≤ 100-150 ms каталог/издөө суроо-талап боюнча.
Чындык жана жаңылык: негизги атрибуттардын кепилденген актуалдуулугу (жеткиликтүүлүк, джекпот, провайдердик статустар).
Ийкемдүүлүк: редактордук коллекциялар жана жарнамалык слоттор релизсиз.
Шайкештик: гео/жаш/мазмун эрежелери, лицензия, жоопкерчиликтүү оюнду чектөө.
Multi-Тенант/аймак: Brands изоляция жана data residency сактоо.
Байкоо: чыгаруу сапаты метрика, A/B, оюн/коюмга айландыруу.
2) Домен модели (минималдуу)
Маңызы:- Game - оюн/продукт провайдери.
- Provider - RGS/студия.
- Variant - бир оюндун варианттары (туруксуздук, линиялар, лимиттер, сервер).
- Collection - редактордук/автоматтык тандоо (мисалы, "Жаңылык", "Джекпот").
- Placement - бекемделген позиция/баннер/тайл баракта/слотто.
- Capability/Feature - оюндун атрибуттары (free spins, buy feature, jackpot).
- JurisdictionRule - жеткиликтүүлүк/чектөө эрежелери.
- Сигналдар - жүрүм-турум/операциялык сигналдар (популярдуулук, CTR, revenue).
- Asset - медиа (сөлөкөттөр, плакаттар, демо) түзмөктөр/тыгыздыгы үчүн параметрлери менен.
Keys: 'game _ id' (туруктуу ички, барабар эмес provider_game_id), 'tenant _ id', 'region', 'locale'.
3) Ingest жана нормалдаштыруу
Конвейер:1. Source Adapters (Pullers): RGS/студиялар менен бириктирүү (каталогдор, чүчүкулак, RTP, теги).
2. Sanitize & Map: бирдиктүү сөздүк тышкы талаалар mapping (ACL), валидация жана дедупликация.
3. Enrich: локализациялар, категориялар, семантикалык теги, жаш курактык чектөөлөрдүн рейтинги.
4. Moderate: контент желектери (NSFW/диний белгилер/сезимтал темалар) базарларда.
5. Publish: окуялар 'GameUpserted/ProviderStatusChanged' → каталог проекциялары.
Демпотенттик: бардык билдирүүлөр менен 'source _ id' + 'version _ ts'; кайталоо эч кандай терс таасирлери жок иштетилет.
Эволюция схемасы: 'schema _ version' адаптерлерде + маппер миграциялары.
4) Нормалдаштырылган схема (жөнөкөйлөштүрүлгөн)
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) Издөө, чыпкалар, фасеттер
Индекстер: аты/синоним боюнча толук текст, 'provider', 'capabilities', 'volatility', 'rtp _ bucket', 'tags' деген фасеттер.
чыпкалар: юрисдикция/аймак/тил/түзмөк/жашы, гана активдүү/тастыкталган.
Синонимдер/стемминг: колдонуучунун терминдеринин картасы ("китептер", "мөмө-жемиштер", "шарлар").
Каталар: толерант издөө (edit distance ≤ 1-2) узундугу боюнча чектөө менен.
6) Ранжирлөө: сигналдар жана формула
Сигналдар (мисал):- Freshness (чыгаруу убактысы).
- Популярдуулук (учуруу/саат, уникалдуу оюнчулар).
- Quality (оюн каталогдон CTR, сактоо 1/7 күн).
- Бизнес (маркетинг күчөтүүлөр, бүтүмдөр, жарнамалык Slots).
- Compliance (зарыл болсо, сезгич мазмун үчүн жумшак төмөндөтүү).
- Player-fit (ылайыктуулугу/артыкчылык).
score = w1freshness + w2popularity + w3ctr + w4player_fit + w5boost
Салмагы конфигурация/эксперименттер тарабынан башкарылат; бардык сигналдар [0; 1].
7) Персоналдаштыруу
Кыска эс: акыркы учуруулар жана жанрлары, RYW - колдонуучу дароо жаңы иш-аракеттерди көрөт.
Узак эс: оюндардын жана оюнчу профилинин эмбеддинги (оюн жанрлары/туруксуздук/сессиялар).
Коопсуздук: жекелештирүү эч качан юрисдикция/курактык эрежелерди бузбайт.
Fallback: сигналдар аз болсо - бейтарап рейтинги + редактордук жыйнактары.
8) Коллекциялар жана жарнамалык плейсменттер
Коллекциялар:- Auto: эреже/суроо (мисалы, 'capabilities contains' jackpot 'AND release_date> = NOW () -30d').
- Editor: тартиби жана мөөнөттөрү менен кол тизмеси.
- Плейсмент: беттерде бекитилген позициялар (hero, row-1-slot-3), A/B, сегменттер/юрисдикциялар боюнча максаттуу.
- Мөөнөттөрү жана артыкчылыктары: 'starts _ at/ends _ at', чыр-чатактын артыкчылыгы, жарыялоо алдында алдын ала.
9) Комплаенс жана жеткиликтүүлүк саясаты
Гео/юрисдикция: өлкөлөрдүн/аймактардын ак/кара тизмелери, лицензияларды/сертификаттарды текшерүү.
Жаш рейтинги: минималдуу жаш курагы, эскертүүлөр, туура келбеген базарлар үчүн жашыруу.
Тематика/символика: өлкөлөр боюнча сезгич контенттин желектери (дин, спирт ж.б.).
Жооптуу оюн: лимиттери/тайм-аут менен оюнчулар үчүн жашыруу/төмөндөтүү.
Аудит: себептери менен жеткиликтүүлүктүн өзгөрүлбөс журналы.
10) Көп-тенант жана көп-аймак
Бардык маалыматтар 'tenant _ id' жана 'region' деп белгиленет.
Изоляция: региондор боюнча кворумдар/кампалар; кросс-аймактык проекциялар - агрегаттар гана.
Fairness: ingest/жарыялоо per tenant боюнча квота, ошондуктан "ызы-чуу" бренд башкаларды кечиктирбейт.
11) Архитектуралык контур
Write-ядро каталогу (CP): нормалдаштыруу + транзакциялык outbox окуялар.
Проекциялар/Read Models (EC): издөө индекстери, материалдаштырылган коллекциялар, популярдуулук эсептегичтери.
- "муздак" барактар/сүрөттөр үчүн Edge/CDN.
- In-memory ысык суроолор үчүн кэш (key = чыпкалар + бет + tenant + аймак).
- Ficheflags: релизи жок ранжирлөө эрежелери/жыйнактары ижарага.
12) API (REST/GraphQL, мисалдар)
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
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
}
}
Контракттар:
- Ар дайым 'as _ of/freshnessMs', пэйджинг, фасеттер.
- Персоналдаштыруу үчүн - PIIсиз сессиянын маркери (RYW).
13) Сигналдар жана маалымат агымы
Популярдуулук: оюндар → мүнөттүк бакеттер → проекциядагы агрегаттар башталганда инкременттер.
CTR/конверсия: плейсмент/жыйнактарда клик/учуруу эсептегичтери.
Операциялык статустар: провайдерлердин ден соолугу (RGS), джекпоттор/лимиттер (окуялардын агымы).
Маркетинг-күчөтүүлөр: оюндар/категориялар/берүүчүлөр үчүн убактылуу коэффициенттер.
14) Байкоо жана SLO
Каталогдун көрсөткүчтөрү:- `catalog_p95_ms`, `catalog_p99_ms`, `error_rate`.
- 'index _ freshness _ ms' (долбоордук кечигүү), 'ingest _ lag _ ms'.
- 'ctr', 'click-to-launch', 'collection _ coverage' (коллекциялардан% чыгаруу).
- `lift_ctr`, `lift_conversion`, «explore vs exploit» доля.
- Туура колдонулган гео/курактык эрежелердин%, блоктордун саны/саат.
Алерталар: 'ingest _ lag _ ms' өсүшү, негизги жыйнактарда CTR кулашы, провайдердин деградациясы (чыгаруудагы белгилер).
15) Аткаруу жана кэш
Стратегия: ысык суроолор - 30-120 ачкычы менен cache; жеке блоктор - кыска TTL (10-30 с) же кэш жок.
Майыптык: окуялар боюнча 'GameUpserted/AvailabilityChanged/PlacementUpdated'.
Пагинация: сигналдарды жаңыртканда карталар "секирип" кетпеши үчүн туруктуу курсорлор.
16) Медиа менен иштөө
Render профилдери: web/mobile/TV үчүн өлчөмдөр/тыгыздыктар.
оптималдаштыруу: WebP/AVIF, lazy-load, плиткалар үчүн sprite/атлас.
Мазмун коопсуздугу: сканерлөө, суу белгилери, inline-PII тыюу салуу.
17) Сыноо
Адаптер жана API үчүн Contract/Schema tests.
Relevancy tests: алтын суроо топтомдору → күтүлгөн натыйжалар/тартиби.
Персоналдаштыруу: оффлайн AUC/NDCG + онлайн A/B guardrail-метриктер менен (оюнда убакыт, депозиттер, RG сигналдары).
Chaos: провайдерлердин деградациясы, ingest жарылуулары, индекстөөнүн кечеңдеши.
18) Playbooks (runbooks)
1. Lag Index> SLO: экинчи жыйнактарды токтотуу, ingest артыкчылыгын жогорулатуу, убактылуу жөнөкөйлөтүү рейтинги.
2. "Кызыл" провайдери: анын оюндарын төмөндөтүү/жашыруу, альтернативдик коллекцияларды көтөрүү.
3. API каталарынын секирүү: Кэш/Backend текшерүү, коргоочу таймауттарды күйгүзүү, барактардын өлчөмүн азайтуу.
4. Туура эмес жеткиликтүүлүк: акыркы эрежени артка кайтаруу, маанилүү рыноктордун "ак тизмесин" киргизүү, өзгөрүүлөргө аудит жүргүзүү.
5. Release ранжирлөө: Канар rollout (5% → 25% → 50% → 100%), CTR/конверсия боюнча артка чегинүү.
19) типтүү каталар
Бирден-бир "сыйкырдуу" белги жана A/B жок ранжирлөө формуласы
ички модель (ACL жок) менен провайдерлердин тышкы схемаларын аралаштыруу.
Жок 'as _ of/freshness' → "эскирген" каталогу жөнүндө талаш.
Юрисдикция эрежелерин бузган персоналдаштыруу.
Чоң барактар кэшсиз жана курсорлору жок → p99 "атышат".
Dual-write индекс жана OLTP ордуна окуялар + проекциялар.
20) Азык-түлүктүн алдындагы чек-тизме
- Бардык провайдерлер үчүн нормалдаштырылган талаа жана ACL сөздүгү.
- Idempotent ingest, outbox/inbox, DLQ жана редрайв.
- SLO сергектик менен каталог проекциялары жана издөө индекстери.
- Башкарылуучу таразалар, сигналдардын бузулушу жана A/B менен рейтинги
- Комплаенс эрежелери (гео/жаш/тема) жана аудит өзгөрүүлөр.
- Multi-Тенант/аймак: маалыматтарды изоляциялоо, fairness, residency.
- API 'as _ of', фасеттер, курсорлор менен; окуялар боюнча кэш жана майыптык.
- Метрика p95/p99, ingest/индекстөө, CTR/конверсия; Алерталар.
- Playbook окуялар; Канар релиздери жана фичефлагдар.
- Тиешелүү тесттер, келишимдер, башаламандык жана жекелештирүү.
Корутунду
Каталогдун кыймылдаткычы - бул оюн мазмунунун үстүнөн "издөө системасы + эреже системасы + витрина". Күчтүү ACL, нормалдаштырылган маалыматтар, тез окуу үчүн проекциялар, ачык-айкын рейтингдик сигналдар, guardrail-метриктер менен жекелештирүү жана катуу комплаенс каталогду туруктуу жана өлчөнүүчү продукт өсүү рычагына айландырат - өндүрүштө сюрпризсиз жана жөнгө салуучу менен компромисссиз.