Рейтинги в реальному часі: Технічна архітектура
Реал-тайм рейтинг - це зв'язка сервісів, яка перетворює мільйони ігрових подій в оновлювані позиції за сотні мілісекунд, зберігаючи чесність, аудіруемость і економічну керованість. Нижче - практичний конструктор від вимог до експлуатації.
1) Вимоги та цільові показники
Латентність до UI: ≤ 200-300 мс p95 від приходу події до оновлення позиції.
Точність: коректний залік «кращих N «/дивізіонів/тай-брейків при навантаженні і збоях.
Доступність: ≥ 99. 9% за період турніру; деградація без втрати цілісності.
Ідемпотентність: «рівно один раз» на рівні нарахувань, «принаймні один раз» на транспорті.
Масштаб: горизонтальне зростання по регіонах/дивізіонах/командах (top-K на шарді).
Аудит: незмінювані логи правил, подій, нарахувань і видач.
2) Системна схема (рівень 10 000 ft)
Клиент → Event Ingest → Scoring Engine → Stream Aggregator (Top-K/Top-M) → Write-Optimized Store → Hot Cache/Edge → UI/Comms → Rewards/Claim
Фоново: Snapshotter, Anti-Fraud/RG, Analytics & A/B, Audit/Observability.
3) Прийом подій (Event Ingest)
Завдання: захист від дублів, сплесків, мережевих втрат.
Ідемпотентність: кожна подія має'event _ uuid'; перевірка «бачили/нарахували».
Семантика доставки: транспорт - at-least-once, облік окулярів - exactly-once.
Backpressure: черги з динамічними партіями; при перевантаженні - пріоритизація «активних» турів.
Тимчасові вікна: допускаємо late events (наприклад, до 90 сек) - маршрутизуємо у «вікно перерахунку».
Час: серверне UTC, на клієнті - тільки відображення локалі.
4) Підрахунок окулярів (Scoring Engine)
Принципи: версіоновані правила, анти-pay-to-win, легкий відкат.
Версіонування: `rule_set_id` + feature-flags per-region/division.
Моделі: multiplier ('Score = round (100log2 (Win/Bet + 1))'), win-based з лог-кривою, wager-based (тільки як фонова мета).
Залік «кращих N «: тримаємо структуру top-N на гравця/день/тур; підсумовування/медіана за форматом.
Винятки: бонусні засоби'coef _ bonus ≤ 0. 5'або'0'; кап per spin/day; квоти на провайдера.
Тай-брейк: 1) більш раннє досягнення підсумкової швидкості; 2) більша різноманітність; 3) детермінований seed.
5) Стрім-агрегація і топ-K
Мета: швидко перераховувати позиції без сканування всієї множини.
6) Зберігання: write vs read
Write-optimized store: лог нарахувань, стани «best-N», тай-брейки, метадані (тільки запис/апдейти).
Read-optimized store (Query): денормалізовані «вітрини» для UI: топ-100, «моя позиція», «топ дня/дивізіону», внесок у команду.
Знімки (Snapshotter): погодинні «снепшоти» лідерборду; швидкий rollback/replay, звіти та аудит.
Узгодженість: eventual для широких списків, read-your-writes для «моєї позиції».
7) Кеш і Edge
Гарячий кеш: останні позиції і рахунок гравців на шарді; TTL 1-5 сек; Інвалідація за подією.
Edge-шар/CDN: статичні блоки, «холодні» сторінки результатів, але не логіка нарахувань.
Fallback: при деградації - «бронзовий режим»: оновлення UI кожні X секунд + блок важких віджетів.
8) Час, вікна і таймзони
Єдиний «справжній» час: UTC на сервісах; дедлайни в UTC.
Локалізація: перетворення часу на клієнті (часовий пояс користувача).
Межі: «м'яке вікно» закриття 1-3 хв для мережевих лагів (в T&C).
Йдемо ворд-клас: clock-skew моніторинг, NTP-алерти, вимірювання дрейфу.
9) Боротьба з пізніми і дублюючими подіями
Late events: тримаємо «reconciliation window»; перерахунок локально + «спокійне» коригування позицій зі стрічка повідомлень.
Дублі: 'event _ uuid'+ (player, game, bet, ts) у вузькому вікні; журнал «seen».
Ідемпотентність нарахувань: транзакції «подія → зміни» зі статусом applied/rolled_back.
10) Анти-фрод і RG (вбудовано в пайплайн)
Поведінковий скоринг: рівномірні інтервали, надшвидкість, «без шуму» - прапори.
Граф зв'язків: загальні девайси/IP/платежі → кластери; холди нагород, ручна перевірка.
Квоти і капи: N кращих спроб/день, квоти на один слот/провайдера, кап окулярів per spin/day.
Бонусні кошти: коефіцієнти/виключення.
RG: очки нараховуються тільки в межах добровільних лімітів (час/депозити/втрати); нагадування про перерви.
11) Мульти-регіон і відмовостійкість
Актив-актив по регіонах: регіональні шарди + глобальний звід; маршрутизація по близькості.
RTO/RPO: RTO <15 хв (фолбек на снепшоти), RPO = 0 для нарахувань (ідемпотентний реплей лога).
Partition-tolerance: при мережевому розриві - локальний лідерборд, подальша консолідація і м'яка корекція позицій.
FX і валюти: якщо призи в різних валютах - фіксуємо момент конвертації, FX-буфер 1-3%.
12) Безпека і приватність
Дані: мінімізація (псевдоніми, без PII в агрегаторі), шифрування «в польоті» і «на спокої».
Доступ: принцип найменших привілеїв, секрети в KMS, аудит доступу.
Т & С/юрисдикції: логи правил/версій, гео-блоки, вікові обмеження.
13) Спостережуваність і SRE-практики
SLO: UI-лаг ≤ 300 мс p95, Claim-час ≤ 10 хв p95, аптайм ≥ 99. 9%.
Метрики: events/sec, частка дублів/відбракованих, late-rate, heap-зростання топ-K, лаг стріму, помилки нарахувань, claim-rate.
Трейсинг: наскрізний (ingest → scoring → cache → UI).
Алерти: стоп-кнопка (disable важкі експерименти/зменшити N кращих), авто-деградація.
Post-mortem: RCA за 24-48 год, список action items, error-budget policy.
14) Rewards & Claim
Автонаграда: при close-події - розрахунок позицій, видача, квитанції.
Claim-вікно: ≤ 72 години, ретраї доставки, детермінований порядок виплат.
Прозорість: історія нагород у профілі: правило, час, сума, джерело.
Холди: для рідкісних/цінних призів до KYC/AML.
15) A/B-експерименти та еволюція схем
Що тестувати: N кращих (10/20), кап per spin (on/off), бонус за різноманітність (0/50/100), тип агрегації (сума/медіана).
Рандомізація: по регіонах/каналах/кластерах - уникаємо перетікань.
Guardrails: RTP, скарги/10k, RG-сигнали - не погіршуються.
Міграції: сумісність схем зберігання, подвійний запис (dual-write) на час міграції.
16) UX-патерни real-time рейтингів
Центр рейтингу: правило перемоги, таймер, ваш рахунок, спроби, що залишилися, next reward.
Живий фідбек: «+ 40 очок за x3», «залишилося 2 спроби з 20», «ти піднявся на 3 місця».
Вітрини: загальний топ-100, «моя позиція», «топ дня/дивізіону», внесок в команду.
A11y: контраст, великі числа, фокус-стейти, озвучування прогресу.
Локалізація: дедлайни/таймери в локальній TZ, багатомовність.
17) Часті збої і сценарії деградації
18) Чеклист запуску real-time рейтингів
Правила/Економіка
- Формула, N кращих, тай-брейк, дивізіони
- RewardRate, ширина виплат, вейджери, claim ≤ 72 год
Техніка
- Ідемпотентний Ingest, Late-window, шардування
- Stream-Aggregator (топ-K/Top-M), Snapshotter
- Hot Cache/Edge, Health/Status API, стоп-кнопка
Безпека/RG
- Поведінковий скоринг, граф зв'язків, капи/квоти
- RG-ліміти, нагадування, KYC/AML для великих призів
Дані/А/В
- Дашборди: лаг, late-rate, дублі, fairness-метрики
- План експериментів і guardrails, dual-write при міграціях
UX
- Центр рейтингу, мікро-фідбек, A11y, локалізація
- Короткі правила в 1 екран + повні T&C
Надійний рейтинг в реальному часі - це не один сервіс, а дисциплінована екосистема: ідемпотентний прийом, версіонований скоринг, стрім-агрегація топ-K, швидкий кеш, знімки стану і вбудовані анти-фрод/RG-механізми. Додайте строгі SLO/SLA, зрозумілий UX і перевірку змін через A/B - і ви отримаєте лідерборди, яким довіряють гравці, а продукт отримує передбачуване зростання Retention, Stickiness і LTV.