Модуль турнірів і місій: події, рейтинги, нагороди
1) Бізнес-цілі та типи активностей
Цілі: зростання утримання (D1/D7), ARPPU, збільшення глибини сесій, просування нових ігор і ринків.
Формати:- Турніри: за сумою очок/виграшів/мультиплікаторам, спринти (30-60 хв), денні, сезонні.
- Місії/квести: послідовності завдань (зіграй N спінів, виграй X, спробуй Y провайдера), з прогресом і нагородами по етапах.
- Лідерборди: глобальні, по ринках/іграх/ставках, приватні (друзі/VIP).
- Джекпоти/рейтинги студій: «топ провайдерів тижня», «полювання за множником».
KPI: участь ≥ 12-25% активної аудиторії, частка доходу з промо 10-20%, скарги <0. 5% учасників, виданий призовий фонд ≤ план.
2) Архітектура і потоки даних
Компоненти
1. Events Gateway → прийом ігрових подій (spin, bet, win, round_end) з game-gateway/провайдерів.
2. Rules Engine → матчить події на правила турнірів/місій, нараховує очки (idempotent).
3. Leaderboard Service → агрегує окуляри, зберігає топи/зрізи, підтримує сортування і тай-брейки.
4. Progress Service (місії) → стан завдань/етапів, видача проміжних нагород.
5. Rewards Service → розрахунок і безпечна виплата (через гаманець: cash/bonus/fs/points).
6. Admin/Studio UI → створення, планування, прев'ю економіки, симуляції.
7. Realtime/WS → публікація оновлень лідерборда, прогресу, повідомлень.
8. Anti-Abuse → ліміти, сигнали ризику, інтеграція з антифродом/бот-менеджером.
9. Storage/Cache → KV/Redis для гарячих топів, OLTP для фактів, DWH для аналітики.
Потік (e2e)
`game_event → gateway → rules_match → points → leaderboard_update → (progress_update) → notify → rewards_at_close → wallet_postings`
3) Подієва модель (мінімум полів)
json
{
"event_id": "e_9f2",  "ts": "2025-10-23T17:41:26Z",  "user_id": "u_123",  "market": "DE",  "brand": "X",  "game": {"id":"g_77", "provider":"PragmaticPlay", "type":"slot"},  "bet": {"amount_minor": 100, "currency":"EUR"},  "win": {"amount_minor": 250, "multiplier":2. 5},  "round": {"id":"r_abc","status":"ended"},  "device": {"platform":"mobile","asn":"mno"},  "trace_id": "t_…"
}Транспорт - Kafka/HTTP, idempotent обробка (dedupe по'event _ id'), підпис провайдера/ігрового шлюзу (HMAC).
4) Правила турнірів і конструктор завдань
Декларативна схема (приклад YAML):yaml id: t_october_sprint window: {start: 2025-10-25T18:00Z, end: 2025-10-25T19:00Z, tz: Europe/Kyiv}
scope:
markets: [DE, SE]
providers: [PragmaticPlay, Hacksaw]
scoring:
formula: "points = min(win. amount/bet. amount, 50) 100" # по множнику min_bet_minor: 50 eligible_games: ["g_"]
leaderboard:
type: «best_n_rounds» # підсумовуємо кращі N раундів n: 20 tiebreaker: ["highest_single_multiplier","earliest_finish_ts"]
rewards:
pool: {currency: EUR, total_minor: 1000000}
distribution: «ladder» # сходи, топ-100 anti_abuse:
min_round_duration_ms: 800 max_rps_per_user: 0. 5 exclude_asn_categories: ["hosting", "proxy"]yaml mission_id: m_halloween steps:
- id: s1 goal: {type: "spin_count", game_type: "slot", count: 50}
reward: {type: "freespins", value: 10, game: "g_66"}
- id: s2 goal: {type: "win_multiplier", min: 10}
reward: {type:"bonus", amount_minor: 500}
completion_reward: {type: "points", amount: 1000}5) Рейтинги та алгоритми підрахунку
Основні моделі
Сума очок: лінійна/логарифмічна/з капом за раунд.
Кращі N раундів: знижує «pay-to-grind», утримує «спринтову» динаміку.
Максимальний множник (xWin): нормує валюти і ставки.
MMR/рейтингова система: ELO-подібна для PvP/таблиць дружньої конкуренції.
Тай-брейки
1.'highest _ single _ multiplier'→ 2)'fewest _ rounds'→ 3)'earliest _ finish _ ts'→ 4)'user _ id'лексикографічно (фіксовано в правилах).
Продуктивність
Зберігайте топ-K (наприклад, 10k) в Redis Sorted Set'ZADD key score member'.
Для «кращих N раундів»: зберігайте min-heap останніх кращих N на користувача і суму, оновлюйте «на льоту».
Періодично snapshot (кожні 30-60 с) в OLTP/об'єктне.
6) Нагороди та виплати
Типи нагород: cash/bonus/free spins/points/предмети/квитки.
Правила:- Видача тільки після фіналізації (вікно оскаржень 5-10 хв).
- Всі виплати - через Rewards Service → Wallet (ledger): double-entry, ідемпотентність по'reward _ id'.
- Для проміжних етапів місій - видача «м'яких» нагород (FS/points), cash - по завершенні ланцюжка.
- КУС/відповідальна гра: при блокуванні облікового запису - утримання/заморожування призу до перевірки.
- Fixed ladder: заздалегідь задані ступені (1-е місце 30%, 2-е 20%,...).
- Proportional: частка від пулу за очками, але з cap на місце.
- Ticket-based: місії дають «квитки», розіграш по квитках (прозорий RNG).
7) Анти-аб'юз, чесність і комплаєнс
Фільтри eligibility: min ставка/тривалість раунду, виняток «0-bet», повторних ре-тріщів, «мікро-ставок» в конвеєрі.
Бот-сигнали: headless-UA, аномальна періодичність, аномально стабільний RPS, проксі-ASN → приховані челенджі/заморозка окулярів.
Дедуп/ідемпотентність: події по'event _ id', нарахування по'score _ id'.
Audit trail: знімки лідерборда, seed RNG (для ticket-розіграшу), версія правил, хеш розрахунків.
Юридичне: правила/обмеження по ринках, вік, самовиключення.
8) Економіка турнірів
Budget guardrails: верхня межа пулу + динамічний «safety valve» (зниження проміжних бонусів при перегріві).
Еластичність: зміщення нагород в points/FS замість cash для утримання маржі.
Коефіцієнти окупності: призовий фонд/надходження з сегменту турнірних ігор; таргет 8-15%.
Симулятор в адмінці: прогін історичних подій → прогноз виплат/участі.
9) API-контракти (спрощено)
Отримати активні турніри/місії
http
GET /v1/contests? market=DE&brand=X
→ 200 [{"id":"t_october_sprint","start":"…","end":"…","type":"xwin","status":"live"}]Подія гри (ingest)
http
POST /v1/events
{"event_id":"e_9f2", "...": "..."}
→ 202 {"accepted":true}Лідерборд (топ-K і позиція користувача)
http
GET /v1/leaderboards/t_october_sprint? top=100&me=u_123
→ 200 {"top":[{"pos":1,"user":"u_9","score":18400},...],    "me":{"pos":342,"score":5600,"delta":+200}}Прогрес місії та нагорода
http
GET /v1/missions/m_halloween/progress? user=u_123
→ 200 {"steps":[{"id":"s1","done":true},{"id":"s2","done":false}],"reward_ready":true}
POST /v1/rewards/claim
{"context":"mission","id":"m_halloween","step":"s1"}
→ 201 {"status":"granted","reward_id":"rw_77"}10) Сховища та масштабування
Гарячий шлях: Redis (Sorted Sets/Hash) для топів і прогресу; TTL на «галасливі» ключі, шардування по'contest _ id'.
Істина: OLTP (Postgres/MySQL) - факти окулярів/прогресу/виплат (WORM-знімки).
Черги: Kafka - потік подій; Consumer-групи по регіонах/брендах.
Кеші: короткий TTL 1-5 с; stale-while-revalidate для публічних топів (через CDN).
WebSocket: окремий кластер/пул під realtime, батч-розсилка і rate-limit повідомлень.
11) Спостережуваність і контроль якості
SLI/SLO:- `leaderboard_update_latency_p95 ≤ 250мс`
- `events_ingest_success ≥ 99. 9%`
- `rewards_grant_success ≥ 99. 9%`
- `ws_push_rtt_p95 ≤ 120мс`
- скарги на несправедливість <0. 5% учасників.
- rate подій/учасників, унікальні гравці, розподіл по ставці/іграм, середній множник;'grant _ errors','dedupe _ hits'.
- Трейси: ingest → rules → score → LB update → reward; теги'contest _ id','rule _ id'.
- Логи: JSON з'trace _ id', заборона PII; WORM для аудиту.
12) Інциденти і runbook'і (скорочено)
A. Відставання лідерборда (lag> 2с)
Дії: збільшити споживачів Kafka, знизити партійний «гарячий ключ» (repartition), включити batching update.
Тимчасове: заморозити realtime-анімації, показувати «~ 1-2с затримка».
B. помилки видачі нагород
Дії: зупинити нові'grant', звіритися зі снапшотом, переграти'grant'ідемпотентно; статус-апдейт в лобі.
Сплеск абьюза (proxy ASN)
Дії: посилити eligibility, включити невидимий челендж, тимчасово не враховувати очки сумнівним сесіям, пост-верифікація.
13) UX і локалізація
Реальний час: індикатор «live», плавні дельти окулярів, позиція і відстань до наступного місця.
Прозорі правила: доступ до формули/тай-брейків/обмежень.
Нотифікації: «залишилося 5 хвилин», «ти в топ-50», «доступна нагорода».
Локалізація/правові тексти: по ринках, часові пояси (Europe/Kyiv і локалі учасників).
14) Безпека і приватність
Псевдоніми гравців на публічних топах; приховування PII за замовчуванням.
Підписи вебхуків/подій, mTLS; захист від «кеш-пойзона» на edge.
Rate-limit API, захист від кеш-бастингу, контроль'idempotency _ key'.
GDPR: терміни зберігання подій, право на видалення (анонімізація) без псування аудиту.
15) Тестування та симуляції
Реплей історичних подій для валідації правил і економіки.
Навантажувальні: bursts 30-120 з перед стартом; soak 2-4 год.
Property-based: інваріанти («сума виданих нагород ≤ бюджет», «тай-брейк детермінований»).
A/B: різні формули окулярів, глибина сходів, формат місій.
16) Чек-лист продакшн-готовності
- Декларативні правила (версії, підписи), симулятор економіки.
- Ідемпотентність: `event_id`, `score_id`, `reward_id`; Inbox/Outbox.
- Тай-брейки фіксовані в правилах, детермінізм сортування.
- Лідерборди: топ-K в Redis + снапшоти; анти-шторм (jitter, coalescing).
- Anti-abuse: eligibility, боти/ASN, velocity-ліміти.
- Rewards → Wallet через double-entry; KYC-чек перед cash.
- Спостережуваність: SLI/SLO, дашборди, алерти; WORM-аудит.
- DR/Failover: multi-AZ, бекапи/restore, «freeze & finalize» сценарій.
- Локалізація, ліцензії, публічні правила і consent.
- Runbook'і на lag/помилки grant/сплеск ботів, шаблони комунікацій.
Резюме
Успішний модуль турнірів і місій - це подієва шина + детерміновані правила + швидкі лідерборди + безпечні виплати. Додайте строгі тай-брейки, анти-аб'юз, симулятор економіки і спостережуваність SLO, тримайте всі операції ідемпотентними і аудіруемими - і ви отримаєте інструмент, який ростить залученість і виручку без суперечок з гравцями, регуляторами і командою підтримки.
