Game session and player activity tracking¶
Тип материала — референсная архитектура. 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.