Потоки контента в сети
(Раздел: Экосистема и Сеть)
1) Суть и цели
Потоки контента — это управляемые траектории доставки игровых артефактов (код/ассеты/медиа), метаданных (манифесты, локали, правила), а также телеметрии и событий между участниками экосистемы. Цели:- Низкая латентность и стабильный UX при пиках.
- Предсказуемость через QoS/квоты, SLI/SLO и наблюдаемость.
- Совместимость и версии без даунтайма.
- Безопасность, комплаенс и стоимость на единицу трафика.
2) Таксономия потоков
1. On-Demand (pull) — клиент запрашивает ассеты/манифесты по хеш-URL.
2. Push/Invalidate — апдейты/инвалидаторы кэшей и подписок (webhooks).
3. Streaming — длительные каналы (WebSocket/gRPC) для лобби/джекпотов/лайв-событий.
4. Batch/Scheduled — плановые выгрузки каталогов, локалей, отчетов.
5. Side-band Telemetry — события/метрики/трейсы, не мешающие основному UX.
6. Control-Plane — фичефлаги, правила резидентности, списки санкций/DRM.
Каждый тип получает собственные классы QoS, каналы и политику ретраев.
3) Роли, узлы и траектории
Производитель контента (студия) → агрегатор/реестр → оператор → CDN/edge → клиент.
Сервисные узлы: локализация, DRM/правила, платежные/джекпот-сервисы, анти-фрод, мониторинг.
Хранилища: реестр манифестов, версии SDK, объектное хранилище медиа, TSDB телеметрии.
Типовая траектория: клиент запрашивает манифест → выбирает ассеты по профилю устройства/локали → CDN/edge отдает из кэша; параллельно открывается stream лобби/джекпотов, а телеметрия уходит по side-band.
4) Транспорт и форматы
HTTP/2/3 для ассетов и манифестов (TLS, Brotli/Gzip, range).
gRPC/QUIC / WebSocket — двунаправленные стримы событий/состояний.
Webhooks — подписки партнеров на изменения (инвалидаторы, контент-апдейты).
Манифесты (JSON/YAML) с хеш-адресацией (immutable URL), списком ассетов и матрицей совместимости (язык/браузер/SDK).
Контент-хэши (Merkle/sha256) для целостности и кэшируемости.
5) QoS, квоты и backpressure
Классы:- P0 — критичный UX (манифест, ядро игры, кошелек, правила),
- P1 — основные ассеты/UI и стримы,
- P2 — медиа высокой плотности, диагностика, архив.
- Квоты: RPS/конкурентные, байты/сек, подписки/клиент.
- Backpressure: токены/кредиты, ограничение подписок, «heavy-query guard» (диапазоны/фильтры), очереди с DLQ.
- Приоритизация: отдельные очереди/кластера для P0/P1/P2, выбор маршрута «кэш-только» при авариях.
6) Маршрутизация и кеширование
GeoDNS/Anycast + Latency-Aware LB — всегда в ближайший здоровый хаб.
Кеши: edge (короткий HTML TTL, длинный asset TTL), negative cache, prewarm для канареек.
Варианты ассетов: AVIF/WebP/битрейт-лестницы, device hints (ракурс/плотность пикселей).
Hash-URL: строгая кешируемость, атомарные релизы, откаты «по хэшу».
yaml cdn:
ttl:
html: 60s manifest: 5m assets: 30d immutable_assets: true vary:
- "Accept-Encoding"
- "User-Agent-Class" # mobile/desktop/legacy signed_urls: true
7) Согласованность, порядок и версии
Модель «манифест → ассеты»: клиенты подписываются на манифест `vX.Y.Z`, ассеты — immutable.
Event-ordering: важные события (джекпоты, live-сигналы) — в пределах ключа/канала.
Версионирование SemVer и «две линии» (GA и Canary). Deprecation ≥ 90 дней.
Миграции без даунтайма: blue-green, совместимые поля в манифестах, клиентские фичефлаги.
8) Наблюдаемость: SLI/SLO и сигналы
SLI ядра:- TTI / TTL p95 (страница/игра),
- Asset Fetch Success%, CDN Hit%,
- Stream RTT p95 и Reconnect Rate,
- Manifest Drift (клиенты на устаревших версиях),
- Error Rate (JS/WASM/SDK),
- Geo-Hit Ratio (локально обслуженные запросы),
- Cost per 1k asset fetches (CTS).
- TTI p95 ≤ 2.5s (Wi-Fi) / ≤ 4.0s (mobile),
- Asset success ≥ 99.8%, CDN hit ≥ 90%,
- Stream RTT p95 ≤ 300 ms в регионе,
- Manifest drift ≤ 1% за 24 ч по GA,
- Error rate ≤ 0.4%.
Телеметрия: гистограммы латентности, размеры бандлов, drop/retry webhooks, нагрузка на стримы, crash-free rate.
9) Безопасность и защита
mTLS между сервисами; подписи webhook (HMAC, окно допустимого времени).
DRM/anti-tamper: проверки целостности, CSP/Referrer-Policy, доменные allow-листы.
Анти-бот/анти-скрейпинг: rate-limits, поведенческие сигналы, JA3/FP, puzzle-челленджи, «мягкие» баны.
PII-минимизация: отсутствие персональных данных в лейблах/логах/манифестах.
Резидентность: правила экспорта медиа/локалей по регионам/юрисдикциям.
10) Деградационные режимы
Cache-Only для ассетов и «finalized-only» для стримов.
Lite-манифест (минимальные ассеты, отключенное видео/анимации).
Graceful fallback на предыдущий манифест GA.
Read-only для не-критичных функций, отключение «дорогих» запросов.
11) Релизы и канарейки
Release windows: будни, «чистые» часы региона/кластера.
Canary 5% трафика / ≥ 120 мин; SLO-гейты (TTI/ошибки/RTT).
Rollback атомарный (по хэшу/версии), без разрыва сессий.
Prewarm CDN для горячих регионов и популярных игр.
yaml release:
canary:
share_pct: 5 min_duration_min: 120 gates:
tti_p95_ms: 2500 error_rate_pct: 0. 4 rollback:
auto_on: ["slo_breach","crash_rate>0. 6"]
target: "previous_ga"
12) Данные и каталоги
Каталог манифестов
sql
CREATE TABLE manifests (
game_id TEXT,
version TEXT,
region TEXT,
status TEXT, -- canary ga deprecated asset_root TEXT, -- CDN prefix content_hash TEXT, -- Merkle/sha256 sdk_min TEXT,
created_at TIMESTAMPTZ,
PRIMARY KEY (game_id, version, region)
);
Логи выборок ассетов
sql
CREATE TABLE asset_fetch_log (
ts TIMESTAMPTZ,
region TEXT,
game_id TEXT, version TEXT,
path TEXT, bytes INT,
status SMALLINT,
latency_ms INT,
served_from TEXT -- edge origin cache
);
Метрики стримов
sql
CREATE TABLE stream_metrics (
ts TIMESTAMPTZ, region TEXT, channel TEXT,
rtt_p95_ms INT, reconnect_rate NUMERIC,
subscribers INT, drops INT
);
13) Политики маршрутизации/кеширования
yaml routing:
prefer_local: true fallback_chain: [nearest_healthy, master_hub]
qos:
P0: { rps_per_org: 1500, ack_timeout_ms: 2000, retries: 3 }
P1: { rps_per_org: 800 }
P2: { rps_per_org: 200, best_effort: true }
heavy_query_guard:
deny: ["logs>5000blocks","media_raw>200MB"]
require_token: true cache_policy:
manifest_ttl: "5m"
asset_ttl: "30d"
negative_ttl: "30s"
prewarm:
regions: ["eu","uk","na"]
top_games: 50
14) Дашборды
Content Flow Core: TTI/TTL, Asset success, CDN hit, Drift, Error rate.
Streaming: RTT p95, reconnect, drops, подписчики/канал.
Routing & QoS: per-class latency/RPS, queue-lag, throttle hits.
Economy: CTS/1k fetches, трафик/регион, $/GB, TPS_per_$.
Compliance/Security: CSP нарушения, подписи webhook, экспорт по регионам.
15) Playbook инцидентов
A. Рост TTI/TTL p95
1. Переключить на cache-only и lite-манифест; 2) включить prewarm/компрессию;
2. увеличить реплики edge/API; 4) анализ тяжелых ассетов, временно отключить.
B. Падение CDN hit
1. Проверить TTL/вариативность; 2) включить prewarm и hash-URL;
2. объединить ассеты (bundling), оптимизировать картинки/видео.
C. Пики reconnect в стримах
1. Локализация проблемных регионов; 2) ограничить подписки/каналы;
2. увеличить буферы/пинг; 4) временно снизить частоту обновлений.
D. Массовые ошибки WASM/JS
1. Kill-switch проблемной версии; 2) откат на N–1;
2. сбор трасс/стеков; 4) hotfix, пост-мортем и тест-кейсы.
E. Нарушение резидентности экспорта
1. Блок межрегиональной репликации; 2) redaction;
2. уведомить Compliance; 4) обновить правила/тесты.
16) Чек-лист внедрения
1. Зафиксируйте модель потоков (pull/push/stream/batch) и классы QoS.
2. Введите манифесты и hash-адресацию ассетов, настройте CDN и prewarm.
3. Настройте маршрутизацию (GeoDNS/Anycast), кеши и heavy-query guard.
4. Определите SLI/SLO, включите телеметрию (TTI/asset success/stream RTT).
5. Включите безопасность (mTLS, подписанные webhooks, DRM, CSP).
6. Организуйте релизы (canary, откаты по хэшу), деградационные режимы.
7. Постройте дашборды Core/Streaming/Routing/Cost/Compliance.
8. Регулярно проводите chaos-тесты: CDN-провалы, высокий RTT, loss/jitter.
17) Глоссарий
TTI/TTL — время до интерактивности/полной загрузки.
Geo-Hit Ratio — доля запросов, обслуженных локально.
Immutable URL — хеш-адресация, гарантирующая целостность/кэшируемость.
Backpressure — механизмы контроля входной нагрузки.
DLQ — «мертвая очередь» для проблемных сообщений.
Drift — доля клиентов на неактуальных манифестах.
CTS per 1k fetches — стоимость 1000 выборок ассетов.
Итог: «Потоки контента» — это не просто CDN и файлы, а управляемая система маршрутов, QoS, версий и наблюдаемости. Стандартизированные манифесты, hash-адресация, канареечные релизы и строгие SLO дают предсказуемый UX, а деградационные режимы и анти-абьюз — устойчивость экосистемы под нагрузкой и при сбоях.