Нефункциональные требования
Производительность
| ID | Категория | Требование | Метрика |
|---|---|---|---|
| NFR-001 | Latency | Apply хода на сервере | p95 < 300 ms |
| NFR-002 | Real-time | Доставка state update на веб и TG | p95 < 1 s |
| NFR-003 | Throughput | Одновременные активные сессии (MVP) | 500 |
| NFR-004 | Throughput | Действий в секунду на game-runtime | 100 RPS (MVP) |
| NFR-005 | Media | Рендер изображения поля | p95 < 500 ms |
Доступность и надёжность
| ID | Категория | Требование | Метрика |
|---|---|---|---|
| NFR-006 | Availability | Uptime платформы MVP | 99.5% / месяц |
| NFR-007 | Recovery | RTO при падении realtime | < 5 min |
| NFR-008 | Recovery | RPO audit log / PostgreSQL | < 1 min |
| NFR-009 | Resilience | WebSocket reconnect без потери состояния | Автоматический |
Безопасность
| ID | Категория | Требование |
|---|---|---|
| NFR-010 | Security | Соответствие OWASP API Security Top 10 |
| NFR-011 | Auth | JWT TTL access 15 min, refresh 7 дней |
| NFR-012 | Rate limit | Join: 10 попыток / 5 min / IP |
| NFR-013 | Transport | TLS 1.2+ на всех внешних endpoint |
| NFR-014 | Secrets | Секреты только через env / vault, не в репо |
| NFR-015 | Input | Валидация Pydantic на всех API boundary |
Масштабируемость
| ID | Категория | Требование |
|---|---|---|
| NFR-016 | Horizontal | realtime-service и bot — горизонтальное масштабирование |
| NFR-017 | Stateful | Game hot state в Redis для multi-instance game-runtime |
| NFR-018 | Events | NATS JetStream для at-least-once доставки событий |
UX и локализация
| ID | Категория | Требование |
|---|---|---|
| NFR-019 | i18n | UI ru-RU в v1; строки вынесены для en |
| NFR-020 | Accessibility | Веб: контраст WCAG AA для игрового поля |
| NFR-021 | TG limits | Caption ≤ 1024 символов; fallback на текст без фото |
Медиа
| ID | Категория | Требование |
|---|---|---|
| NFR-022 | Format | PNG/WebP для поля; max 1 MB на кадр |
| NFR-023 | CDN | Публичные URL медиа с cache-control 60 s |
Наблюдаемость
| ID | Категория | Требование |
|---|---|---|
| NFR-024 | Logging | Structured JSON logs с trace_id |
| NFR-025 | Metrics | Prometheus: latency, WS connections, active sessions |
| NFR-026 | Tracing | OpenTelemetry между сервисами |
| NFR-027 | Audit | Immutable audit log ходов 90 дней |
Сопровождаемость
| ID | Категория | Требование |
|---|---|---|
| NFR-028 | API | OpenAPI 3.1 для всех публичных REST |
| NFR-029 | Docs | MkDocs актуален с каждым релизом Phase |
| NFR-030 | Deploy | Docker Compose для dev за < 15 min |
| NFR-031 | Testing | Плагин игры: unit + Gherkin acceptance |
Совместимость
| ID | Категория | Требование |
|---|---|---|
| NFR-032 | Browser | Chrome, Firefox, Safari последние 2 версии |
| NFR-033 | Telegram | aiogram 3.x; Bot API актуальная |
| NFR-034 | Python | 3.11+ для backend и bot |