Потоки контенту в мережі
(Розділ: Екосистема та Мережа)
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, а деградаційні режими і анти-аб'юз - стійкість екосистеми під навантаженням і при збоях.