Перейти к содержанию

Game session and player activity tracking

Раздел 06

Тип материала — референсная архитектура. HYPOTHETICAL — проектные схемы и контракты. INFERENCE — рекомендации и trade-offs.

Бизнес-задача

Объединить активность устройств и завершать сессии при потере disconnect.

Функциональные требования

Сохранять login/logout, heartbeat и round references. Различать session continuity и права на денежную операцию.

NFR и критический путь

Сессия должна обслуживаться быстро. Late telemetry корректирует историю без изменения исходного round.

Компоненты и поток

flowchart LR
 A["Client and provider"] --> B["Authenticated ingress"] --> C["Session event log"] --> D["Session projection"] --> E["Activity review"]

Контракты и владельцы состояния

Identity store подтверждает player и auth session. Activity record несёт device/session ID, source event ID и event time.

Транзакционные границы

Запись audit события durable. Expiry вычисляется по versioned last_seen. Access gate отдельно проверяет revoked identity.

Ordering, deduplication и idempotency

Event key scoped producer. Out-of-order heartbeat не уменьшает last_seen. Несколько устройств могут иметь независимые sessions.

Отказ и восстановление

После disconnect timeout закрыть derived session по policy. Позднее событие создаёт новую версию интервала. Не возобновлять revoked token.

Сверка

Сверить интервалы и round references, считать unmatched heartbeat и overlap по device.

Мониторинг и алерты

Open sessions without heartbeat, late rate, revoke propagation и clock skew. Для каждого сигнала определить scope, cut и действие оператора. Порог подбирается по согласованному бюджету и наблюдаемой нагрузке.

Технологии и trade-offs

Server-defined sessions проще для security. Event-time session windows дают аналитическую реконструкцию с пересчётом.

Вопросы на собеседовании

Почему inactivity timeout не доказывает logout? Потеря связи тоже прекращает heartbeat.

Первичные источники