Подключение игр с прогрессивными джекпотами

Введение

Прогрессивные джекпоты накапливают часть ставок всех игроков в едином пуле, который растёт до тех пор, пока не будет сорван удачливым участником. Интеграция таких игр требует отдельного модуля учёта ставок, атомарного расчёта очередного значения пула, синхронизации между провайдерами и чёткой логики выплат.

1. Архитектура пула прогрессивного джекпота

1. Джекпот-сервис (Jackpot Service)

Отдельный микросервис с REST/gRPC API:
  • `GET /jackpot/{id}` → текущий размер пула и метаданные.
  • `POST /jackpot/{id}/contribute` → приём доли ставки.
  • `POST /jackpot/{id}/award` → выплатить джекпот победителю.
  • Хранит коллекцию джекпотов в базе (PostgreSQL) и кеш в Redis для быстрого чтения.
  • 2. Пул ставок

Структура таблицы `jackpot_contributions`:
  • ```sql
  • [id, jackpot_id, game_id, amount, timestamp]
  • ```
  • Агрегирует «feed» вкладов в реальном времени через Kafka topic `jackpot.events`.
  • 3. Параметры распределения

Фиксированная ставка-процент (например, 0.5 %) от каждой ставки идёт в пул.
Поддержка нескольких уровней (local, shared, mega) с разными процентами и условиями срабатывания.

2. Интеграция с игровыми движками

1. API-вызов на спин

При каждом спине GameService делает:
  • ```http
  • POST /jackpot/{jackpotId}/contribute
  • { "gameId": "...", "amount": 2.50 }
  • ```
  • Джекпот-сервис подтверждает приём и возвращает новый размер пула.
  • 2. Событие выигрыша

Провайдер генерирует событие `jackpotHit` с данными: `{ playerId, jackpotId, sessionId }`.
TournamentService или BetService вызывает `POST /jackpot/{id}/award` и проводит payout транзакцию.
3. Atomic payout

Внутри Jackpot Service award-операция и транзакция по выплате в Transaction Service выполняются в ACID-транзакции для исключения двойных выплат.

3. Расчёты и контроль целостности

Ежечасной сверки через batch-job: сравнение суммы вкладов и начислений джекпота в таблицах `contributions` и `awards`.
Lock-in snapshot: на момент выигрыша пул фиксируется в отдельном поле `awardedAmount`, чтобы рост джекпота не мешал расчётам.
Коррекция ошибок: ручной rollback award-транзакции через admin UI, но только в режиме audit.

4. Мониторинг и алёрты

Метрики Prometheus:
  • `jackpot_contribute_total`, `jackpot_award_total`, `jackpot_current_value`.
  • `jackpot_processing_latency` (p95).
  • Дашборд Grafana: график роста пулов, частота срабатываний, топ-5 игр по вкладам.
  • Alerting: оповещение при

задержке обработки >500 ms,
расхождении batch-сверки >0.1 %,
резком росте или падении вкладов.

5. Безопасность и соответствие

HMAC-подпись всех запросов к Jackpot Service, nonce и timestamp для защиты от подделки.
RBAC: только GameService и Admin UI имеют права на contribute/award, остальные роли — readonly `GET /jackpot`.
Audit Trail: каждая операция write логируется в WORM-хранилище S3, хранение минимум 5 лет по регуляциям.

6. Масштабирование и отказоустойчивость

Stateless сервис: горизонтальное масштабирование Jackpot Service по CPU/latency с Kubernetes HPA.
Redis Cluster Sentinel: кеш пулов и блокировок на award, автоматическое переключение на резерв при сбое.
Kafka Consumer Groups: параллельная обработка событий вкладов с гарантией «ровно-один» (exactly-once) через idempotency-ключи.

7. UI-компоненты и уведомления

Frontend: динамическая метка текущего джекпота на лобби и странице игры, обновляется через WebSocket канал `/ws/jackpot/{id}`.
Push-уведомления: при достижении порога (например, 80 % от текущего MaxValue), Telegram-бот или WebApp шлёт игрокам сообщение.
Animation FX: прогресс-бар на странице игры и лобби, визуальные эффекты при срабатывании.

Заключение

Интеграция прогрессивных джекпотов в онлайн-казино — комплексная задача, включающая отдельный микросервис накопления ставок, атомарные payout-транзакции, real-time обновление UI, надёжный мониторинг и масштабируемую архитектуру. Правильная реализация обеспечивает честность, прозрачность и устойчивость джекпот-механики при пиковых нагрузках.