Проектирование Steam
Проектирование Steam (Game Distribution)
Steam — это цифровая платформа для распространения, управления и запуска игр, разработанная компанией Valve Corporation. Запущенная в 2003 году как простой инструмент для доставки патчей к играм самой Valve, Steam превратилась в крупнейший магазин компьютерных игр в мире. Сегодня Steam — это не просто витрина: это CDN планетарного масштаба, система защиты цифровых прав, социальная сеть, торговая площадка и инфраструктура для разработчиков.
Масштаб Steam (2025–2026)
| Метрика | Значение |
|---|---|
| Пиковое число одновременных пользователей | 42,04 млн (январь 2026) |
| Ежемесячно активных (MAU) | ~147 млн |
| Ежедневно активных (DAU) | ~69 млн |
| Игр в библиотеке | 120 000+ |
| Новых игр в 2025 году | ~19 600 |
| Скачано данных в 2025 году | 100 эксабайт |
| Среднее скачивание в день | 274 петабайта |
| Выручка платформы в 2025 году | ~$16,2 млрд |
| Доля рынка PC-дистрибуции | ~75% |
Для понимания масштаба: 1 эксабайт = 1 000 петабайт = 1 млн терабайт = 1 млрд гигабайт. 274 петабайта в день — это примерно 190 000 ГБ каждую минуту. По данным Valve, озвученным на GDC 2026, в 2025 году рост платформы составил порядка 3,4 млн новых пиковых одновременных пользователей — и этот темп стабилен уже пять лет подряд.
Чем Steam отличается от других систем?
| Аспект | Netflix | Discord | Spotify | Steam |
|---|---|---|---|---|
| Тип контента | Видеостриминг | Общение | Аудиостриминг | Дистрибуция ПО (игры) |
| Размер единицы контента | ~4–8 ГБ на фильм | Мегабайты | Мегабайты | 10–150 ГБ на игру |
| Модель доставки | Стриминг (не хранится) | Real-time push | Стриминг | Полная загрузка + хранение |
| Паттерн нагрузки | Равномерный | Пики в вечернее время | Равномерный | Резкие пики при релизах |
| Ключевая инфраструктура | Open Connect CDN | WebSocket + SFU | P2P + CDN | Собственный CDN + патчинг |
| Монетизация | Подписка | Freemium | Подписка + реклама | Комиссия с продажи (30%) |
Главное архитектурное отличие Steam: дистрибуция очень больших файлов с экстремальными пиками нагрузки. В Netflix пользователь смотрит фильм через стриминг — файл не сохраняется. В Steam пользователь загружает полную копию игры, которая занимает 10–150 ГБ и хранится на его диске. Это принципиально другая задача: не стриминг, а надёжная массовая доставка огромных файлов, причём нагрузка концентрируется в момент глобальных релизов — когда десятки миллионов пользователей одновременно начинают скачивать одну и ту же игру.
Основные функции Steam
- Магазин (Store) — витрина игр с поиском, рекомендациями, отзывами и системой скидок (Steam Sale).
- Библиотека (Library) — управление купленными играми, установка, запуск.
- SteamPipe — система дистрибуции контента (загрузка игр, обновления, патчинг).
- Steam Guard — двухфакторная аутентификация и защита аккаунта.
- Steamworks SDK — инструменты для разработчиков: достижения, облачные сохранения, матчмейкинг, DRM.
- Steam Workshop — платформа для пользовательских модов.
- Steam Community — форумы, профили, скриншоты, друзья, группы.
- Steam Market — торговая площадка для внутриигровых предметов.
- Steam Deck / SteamOS — собственная игровая консоль и операционная система на Linux.
Оценка нагрузки (Capacity Estimation)
Скачивание контента
- 274 петабайта/день = ~3,2 гигабайта/секунду в среднем.
- В пике (крупный релиз, Steam Summer Sale): нагрузка возрастает в 5–10 раз относительно среднего.
- Пиковый трафик — ~1,5–3 Тбит/с исходящего трафика на уровне CDN.
- Исследование 2023 года показало, что в обычные дни Steam генерирует 15 Тбит/с трафика, а при крупных релизах пики достигают 146 Тбит/с.
Хранилище
- 120 000 игр × ~30 ГБ средний размер = ~3,6 петабайта только для текущих версий.
- С историческими версиями, DLC, бета-ветками — объём исходного хранилища на порядок выше.
- Каждый день на платформу выходит ~50 новых игр + сотни обновлений существующих.
Пиковые релизы
Релиз крупной AAA-игры — особый инженерный вызов:
- Одновременно скачивают миллионы пользователей.
- Размер игры — 50–150 ГБ.
- Ожидаемое время скачивания у пользователя — часы, не дни.
- Пример: Black Myth: Wukong (август 2024) в первые часы после релиза — 2,4 млн одновременных игроков, при этом почти все они уже скачали игру заранее через механизм preload.
Транзакции
- Steam обрабатывает миллионы транзакций в день (покупки, gifting, возвраты).
- Steam Summer Sale 2024 сгенерировал оборот ~$876 млн за период распродажи.
- Во время распродаж нагрузка на платёжную систему и витрину магазина возрастает в 3–5 раз.
Высокоуровневая архитектура
┌──────────────────────────────────────────────────────────────────┐
│ Клиенты (Windows / macOS / Linux / Steam Deck) │
│ │
│ ┌──────────────────────┐ ┌──────────────────────────────┐ │
│ │ Steam Client (UI, │ │ HTTP(S) — скачивание игр │ │
│ │ auth, library mgmt) │ │ (SteamPipe / chunk-download) │ │
│ └──────────┬───────────┘ └─────────────┬────────────────┘ │
└─────────────┼────────────────────────────┼───────────────────────┘
│ │
│ CM Protocol (TCP) │ HTTP(S) / CDN
▼ ▼
┌────────────────────┐ ┌──────────────────────┐
│ CM Servers │ │ Content Servers │
│ (Connection │ │ (CDN Edge Nodes) │
│ Managers) │ │ Valve CDN + │
│ Аутентификация, │ │ Akamai, Level3, │
│ лицензии, друзья, │ │ EdgeCast, StackPath │
│ уведомления │ └──────────────────────┘
└────────────────────┘
│
┌──────────┼──────────────┬────────────────────┐
│ │ │ │
▼ ▼ ▼ ▼
┌───────┐ ┌────────┐ ┌───────────────┐ ┌──────────────────────┐
│ Auth │ │Library │ │ Store / │ │ Steamworks Backend │
│Service│ │Service │ │ Catalog Svc │ │ (achievements, │
│ │ │ │ │ │ │ cloud saves, │
└───┬───┘ └───┬────┘ └───────┬───────┘ │ matchmaking) │
│ │ │ └──────────────────────┘
│ │ │
▼ ▼ ▼
┌────────┐┌────────┐ ┌────────────────┐
│ User ││Package │ │ Game Catalog │
│ DB ││ DB │ │ (metadata, │
│(MySQL) ││ │ │ assets, tags)│
└────────┘└────────┘ └────────────────┘
┌─────────────────────────────┐
│ Origin Storage │
│ (мастер-копии игр, │
│ депо, манифесты) │
└─────────────────────────────┘
SteamPipe: система дистрибуции контента
SteamPipe — сердце Steam с точки зрения доставки игр. Это система, которая отвечает за то, чтобы каждый пользователь мог быстро и надёжно скачать или обновить любую игру из 120 000 в библиотеке.
Концепция: Depot, Manifest, Chunk
SteamPipe организован вокруг трёх ключевых понятий:
App (Игра, например, CS2)
│
├── Depot 1 (Windows-контент)
│ ├── Manifest (список файлов, хэши, размеры)
│ └── Chunks (сжатые зашифрованные блоки файлов)
│
├── Depot 2 (macOS-контент)
│ └── ...
│
└── Depot 3 (Общие ресурсы)
└── ...
Depot (депо) — логический контейнер, содержащий набор файлов для конкретной платформы или языка. Каждая игра может иметь несколько депо: отдельно для Windows, macOS, Linux, отдельно для каждого языка озвучки.
Manifest (манифест) — файл-каталог, содержащий список всех файлов в депо с их размерами, путями и SHA-1-хэшами чанков. Клиент всегда сначала скачивает манифест, а затем определяет, какие чанки нужно загрузить.
Chunk (чанк) — блок данных размером ~1 МБ. SteamPipe делит каждый файл игры на чанки, которые затем сжимаются и шифруются перед отправкой на CDN. Клиент скачивает чанки параллельно с нескольких серверов и «собирает» файл на диске.
Дельта-патчинг
Самая важная оптимизация SteamPipe — алгоритм бинарных дельт (binary delta patching). Когда разработчик выпускает обновление, SteamPipe не загружает заново всю игру. Вместо этого:
- Система сравнивает новую и старую версии файлов на уровне чанков.
- Идентифицирует только изменившиеся чанки.
- Клиент скачивает только их — часто это 1–5% от полного размера игры.
Обновление игры (100 ГБ):
Полный размер обновления: 100 ГБ
Изменившихся файлов: 12 ГБ
Изменившихся чанков: ~800 МБ ← только это скачивает пользователь
Экономия: 99,2% трафика
Это критически важно: без дельта-патчинга 274 петабайта ежедневного трафика Steam превратились бы в несколько эксабайт.
Как клиент скачивает игру
Steam Client CDN Auth/License
│ │ │
│── 1. Проверить лицензию ──────────────────────────► │
│◄─────────────── 2. OK, депо-ключ шифрования ─────── │
│ │ │
│── 3. GET manifest ────────►│ │
│◄─────────────── 4. Manifest (список чанков) ─────── │
│ │ │
│ 5. Определить какие │ │
│ чанки нужны │ │
│ │ │
│── 6. GET chunk_abc... ────►│ │
│── 6. GET chunk_def... ────►│ (6 параллельных │
│── 6. GET chunk_ghi... ────►│ TCP-соединений) │
│── 6. GET chunk_jkl... ────►│ │
│◄── 7. chunk_data (сжат+зашифрован) ──────────────── │
│ │ │
│ 8. Расшифровать, │ │
│ распаковать, │ │
│ записать на диск │ │
Клиент открывает 6 параллельных TCP-соединений к нескольким серверам из своей географической «ячейки» (cell). Это позволяет максимально задействовать пропускную способность канала пользователя и защищает от деградации при проблемах с одним из CDN-серверов.
Preload — загрузка до релиза
Для крупных AAA-релизов Steam поддерживает preload: пользователь может скачать зашифрованную игру за несколько дней до выхода. Ключ дешифрования становится доступен в момент официального релиза. Это позволяет «размазать» пиковый трафик во времени и гарантировать, что пользователи смогут запустить игру сразу после полуночи.
CDN-инфраструктура
Гибридная модель: собственный CDN + партнёры
Steam использует гибридную CDN-архитектуру, которая сочетает собственную инфраструктуру с коммерческими провайдерами:
┌─────────────────────────────────────────────────────────┐
│ Мастер-хранилище (Origin) │
│ (Valve Data Centers) │
└───────────────────────────┬─────────────────────────────┘
Репликация │
┌────────────┬──────▼──────┬──────────────┐
│ │ │ │
▼ ▼ ▼ ▼
┌─────────────┐ ┌─────────┐ ┌──────────┐ ┌──────────────┐
│ Valve CDN │ │ Akamai │ │ Level3 │ │ EdgeCast / │
│ (~220+ узлов│ │ │ │ (Lumen) │ │ StackPath │
│ по миру) │ │ │ │ │ │ │
└─────────────┘ └─────────┘ └──────────┘ └──────────────┘
│ │ │ │
└───────────┴──────────────┴──────────────┘
│
┌─────────▼──────────┐
│ Пользователь │
│ (Steam Client) │
└────────────────────┘
Стратегия Valve: использовать собственный CDN как основной, а коммерческие CDN — как overflow при превышении ёмкости. В обычные дни большая часть трафика идёт через собственные серверы Valve. При релизах крупных игр или во время Steam Sale нагрузка перераспределяется на Akamai, Level3 и других партнёров.
Исследователи подсчитали, что в 2022–2023 годах Steam генерировал в среднем 15 Тбит/с трафика, а пики при крупных релизах достигали 146 Тбит/с — для сравнения, это сопоставимо с нагрузкой одного из крупнейших интернет-обменных узлов мира.
Географические ячейки (Cells)
Steam делит мировую аудиторию на географические ячейки (cells). Каждой ячейке назначен список примерно 20 серверов — как правило, это ближайшие к пользователю узлы Valve CDN и резервные узлы партнёров.
Cell (ячейка) — географический регион, для которого определён приоритетный список CDN-серверов. Например, Великобритания разделена на ячейки London и Manchester, каждой из которых назначены основные серверы Valve CDN и резервные серверы StackPath (Амстердам) и EdgeCast (Лондон). Крупные интернет-провайдеры (Verizon, Telus, Shaw) имеют кастомные ячейки, направляющие их пользователей на специфические CDN-узлы.
Когда клиент начинает скачивание, он запрашивает у сервера список доступных серверов для своей ячейки и равномерно распределяет 6 параллельных соединений между ними.
Аутентификация и система лицензий
Connection Manager (CM)
Когда пользователь запускает Steam, клиент устанавливает TCP-соединение с одним из CM-серверов (Connection Manager) — это точка входа для всего нон-контентного трафика: аутентификации, управления библиотекой, уведомлений, чата.
Процесс входа:
Steam Client
│
│── 1. Зашифрованный запрос логина ──────────────► CM Server
│◄──────────────── 2. Challenge (случайные байты) ──
│── 3. HMAC-SHA1(challenge + password_hash) ──────►
│◄──── 4. Session token + список лицензий ─────────
│
│ Теперь клиент знает:
│ - Он авторизован
│ - Какие игры куплены (список depot ID)
│ - Ключи шифрования для каждого депо
CM-серверы реализуют протокол CM (проприетарный бинарный протокол поверх TCP), а не обычный HTTP. Это позволяет поддерживать постоянное соединение и получать push-уведомления (новое сообщение от друга, обновление игры) в реальном времени — аналогично WebSocket в Discord, но на собственном протоколе.
Steam Guard: двухфакторная аутентификация
Steam Guard — это реализация TOTP (Time-based One-Time Password) с некоторыми проприетарными деталями.
TOTP — алгоритм генерации одноразовых паролей на основе текущего времени. И клиент, и сервер знают общий секретный ключ. Оба независимо вычисляют
HMAC-SHA1(секрет, текущее_время / 30)и получают одинаковое число — одноразовый код, действительный 30 секунд.
Как работает Steam Guard Mobile Authenticator:
При настройке:
┌────────────────┐ ┌───────────────────┐
│ Steam Server │ │ Mobile App │
│ │ │ │
│ 1. Генерирует │──secret──► 2. Сохраняет │
│ secret key │ │ secret key │
└────────────────┘ └───────────────────┘
При каждом входе:
┌────────────────┐ ┌───────────────────┐
│ Steam Server │ │ Mobile App │
│ │ │ │
│ code = HMAC( │ │ code = HMAC( │
│ secret, │ │ secret, │
│ time/30 │ │ time/30 │
│ ) │ │ ) │
│ │ │ │
│ Ожидает код ◄──│──────────│──► Показывает код │
│ сравнивает │ │ пользователю │
└────────────────┘ └───────────────────┘
Ключевое свойство: интернет не нужен для генерации кода. Приложение вычисляет его локально по секрету и системному времени. Интернет нужен только для передачи кода серверу при входе.
Система лицензий и DRM
Steam использует аккаунт-ориентированный DRM: права на игры привязаны не к конкретному устройству, а к аккаунту пользователя. Игру можно установить на любое количество машин, но одновременно запускать только на одной.
Технически это реализовано через депо-ключи шифрования: каждый чанк в CDN зашифрован ключом, который Valve выдаёт только клиентам с валидной лицензией на данный App ID. Без аутентификации на CM-сервере клиент не получит ключ — и не сможет расшифровать загруженные чанки.
Проверка лицензии при скачивании:
Клиент ──[App ID: 730]──► CM Server
│
Есть ли у аккаунта лицензия на App 730?
│
┌─────┴─────┐
Да │ │ Нет
▼ ▼
Выдать depot Отказать,
decryption key вернуть ошибку
Steam DRM Wrapper — опциональная защита, которую разработчик может применить к исполняемому файлу игры. При запуске обёртка проверяет, что Steam запущен и авторизован. Это «лёгкая» защита, которую Valve честно описывает как защиту от казуального пиратства (копирования файлов), но не от мотивированного взломщика. Многие разработчики сочетают Steam DRM с более серьёзными решениями, такими как Denuvo.
Хранение и организация игровой библиотеки
Модель данных: что знает Steam о каждой игре
App
├── app_id (уникальный числовой идентификатор, например 730 для CS2)
├── app_name ("Counter-Strike 2")
├── app_type (game / dlc / demo / tool / music)
├── depots[] (список депо)
│ ├── depot_id
│ ├── platform (windows / macos / linux)
│ ├── language (english / russian / ...)
│ └── manifest_id (ссылка на конкретную версию депо)
├── branches (default / beta / staging / ...)
│ └── manifest_id для каждой ветки
└── metadata (теги, описание, изображения, цена, системные требования)
Каждый branch (ветка) указывает на конкретный manifest_id — ID снапшота состояния депо. Это позволяет разработчикам одновременно держать публичный релиз, закрытую бета-ветку и внутреннюю staging-ветку. Пользователь, подписавшийся на бету, получает другой manifest_id и, соответственно, другой набор чанков.
Steam Workshop и пользовательский контент
Steam Workshop хранит пользовательские моды, карты, предметы, сценарии — более 6,5 миллиона объектов по состоянию на 2025 год. В отличие от игрового контента, Workshop-объекты хранятся отдельно и не включаются в основной депо. Клиент подписывается на Workshop-объект, и Steam скачивает его независимо от основной игры.
Магазин и система рекомендаций
Задача рекомендаций в Steam
Steam — это проблема discovery (обнаружения): при 120 000 играх пользователь не может просматривать всё. 69% пользователей Steam говорят на языке, отличном от английского, и ожидают релевантных рекомендаций на родном языке. При этом Valve декларирует принцип: «поставить правильную игру перед правильным пользователем» — а не продвигать платно.
Сигналы для рекомендаций
У Steam есть уникальное преимущество перед Netflix или Spotify: неявные сигналы высочайшего качества — данные о реальном игровом поведении:
Явные сигналы (explicit feedback):
- Пользователь оставил отзыв (рекомендую / не рекомендую)
- Пользователь добавил игру в Wishlist
- Пользователь купил игру
Неявные сигналы (implicit feedback):
- Время, проведённое в игре (playtime)
- Количество достижений разблокировано
- Игра запущена, но быстро закрыта (сигнал разочарования)
- Запрос на возврат средств
- Добавление в «не интересно»
Playtime — особенно ценный сигнал. Если пользователь провёл в игре 200 часов, это сильнейший индикатор удовлетворённости — надёжнее, чем большинство явных оценок.
Коллаборативная фильтрация (Collaborative Filtering)
Основа алгоритма рекомендаций Steam — коллаборативная фильтрация на основе паттернов потребления:
Коллаборативная фильтрация — метод рекомендаций, основанный на предположении: если два пользователя имели похожее поведение в прошлом (играли в одни и те же игры), им, вероятно, понравятся одни и те же новые игры. Алгоритм не анализирует содержимое игр — только поведение пользователей.
Матрица «пользователь × игра» (фрагмент):
CS2 Dota2 Witcher3 Skyrim Hollow Knight
User_A: ✓ ✓ ✓ ✓ ?
User_B: ✓ ✓ ✓ ✓ ✓
User_C: ✓ ✓ ✓ - ✓
User_A похож на User_B (4 общих игры).
User_B играл в Hollow Knight.
→ Рекомендовать Hollow Knight для User_A.
На практике Steam использует ALS (Alternating Least Squares) — алгоритм матричной факторизации, оптимизированный для работы с имплицитными данными (playtime) и разреженными матрицами.
Матричная факторизация — метод, при котором большая разреженная матрица «пользователи × игры» раскладывается на две меньшие матрицы: «пользователи × латентные факторы» и «игры × латентные факторы». Латентные факторы — это скрытые измерения, которые алгоритм обнаруживает самостоятельно (например, «любит игры с открытым миром» или «любит сложные механики»). Произведение этих матриц позволяет предсказать, насколько пользователю понравится игра, которую он ещё не видел.
Архитектура рекомендательной системы Steam
Steam строит не одну рекомендательную систему, а несколько специализированных:
┌────────────────────────────────────────────────────────┐
│ Steam Store (главная страница) │
│ │
│ ┌───────────────┐ ┌──────────────┐ ┌─────────────┐ │
│ │ Discovery │ │ Play Next │ │ Community │ │
│ │ Queue │ │ Shelf │ │ Recommends │ │
│ │ (персон. │ │ (следующая │ │ (что │ │
│ │ очередь) │ │ игра) │ │ советуют │ │
│ └───────────────┘ └──────────────┘ │ друзья) │ │
│ └─────────────┘ │
│ ┌───────────────┐ ┌──────────────┐ │
│ │ Interactive │ │ Sale │ │
│ │ Recommender │ │ Explorer │ │
│ └───────────────┘ └──────────────┘ │
└────────────────────────────────────────────────────────┘
│ │
▼ ▼
┌────────────────┐ ┌─────────────────────┐
│ Collaborative │ │ Content-based │
│ Filtering │ │ Filtering │
│ (ALS, playtime │ │ (теги, жанры, │
│ implicit data)│ │ описания) │
└────────────────┘ └─────────────────────┘
│ │
└──────────┬─────────┘
▼
┌────────────────────┐
│ Personalization │
│ Service │
│ (ранжирование, │
│ фильтрация │
│ уже купленного) │
└────────────────────┘
Discovery Queue — сердце персонализации: каждый день Steam формирует для пользователя очередь из ~10 новых игр, которые алгоритм считает ему релевантными. Пользователь просматривает их, нажимая «Следующее» или «Не интересно» — и тем самым дообучает модель.
Cold Start Problem — серьёзный вызов: у нового пользователя нет истории. Steam решает это через тэги интересов при регистрации и через поведение в магазине (какие страницы просматривает, что добавляет в Wishlist).
Масштабирование при пиковых нагрузках: Steam Sale
Steam Summer Sale — одно из самых нагруженных событий в мире интернет-торговли. Открытие распродажи — это почти мгновенный многократный скачок трафика:
Нагрузка на сайт Steam при открытии распродажи:
Обычный день: Базовая нагрузка ────────────────
Старт Sale: Пик ████████████████████████
▲
x3 – x5 за минуты
Стратегии масштабирования
1. Агрессивное кэширование
Страницы магазина, изображения, описания игр — всё это статический или квазистатический контент, который кэшируется на уровне CDN и в application cache. Витрина магазина отдаётся из кэша; персонализированные данные (цены со скидкой для конкретного пользователя) — из быстрого кэша приложения.
2. Preloading на уровне CDN
Перед началом распродажи Valve заранее прогревает CDN-кэши: загружает изображения и метаданные рекламируемых игр на все edge-узлы. Когда миллионы пользователей откроют страницы распродажи, большинство контента уже будет на ближайшем к ним сервере.
3. P2P-доставка внутри LAN
Steam поддерживает опциональный режим P2P Local Network Transfer: клиенты в одной локальной сети могут обмениваться чанками между собой, снижая нагрузку на внешний CDN. Это особенно полезно в компаниях, общежитиях и интернет-кафе, где многие пользователи скачивают одни и те же игры.
4. CDN Overflow
Когда собственные серверы Valve достигают максимальной ёмкости, трафик автоматически маршрутизируется на CDN-партнёров (Akamai, Level3, EdgeCast). Valve явно следует принципу «использовать собственную инфраструктуру на ~95% нагрузки, CDN-партнёры — для пиков». Это экономически оправдано: держать инфраструктуру под максимальный пик пришлось бы вдвое дороже, чем использовать hybrid-CDN.
5. Throttling и приоритизация
Во время экстремальных пиков Steam применяет rate limiting на уровне скорости скачивания: снижает максимальную скорость загрузки для каждого клиента, чтобы обслужить большее число пользователей равномерно. Пользователи могут также задать лимит скачивания вручную в настройках клиента.
Steam Market и Item Economy
Steam Community Market — торговая площадка, где пользователи продают и покупают внутриигровые предметы (скины, карточки, лут-боксы). В 2024 году объём транзакций на Market превысил $500 млн; Valve берёт комиссию 15% (5% платформе + 10% разработчику игры).
Особенности архитектуры Market
Проблема атомарности: транзакция продажи предмета должна быть атомарной — одновременно списать предмет у продавца и деньги у покупателя. Частичный успех (деньги списаны, предмет не передан) недопустим. Это классическая задача распределённых транзакций.
Задержка перед продажей: после получения предмета из игры пользователь должен подождать 7 дней перед его продажей на Market. Эта задержка введена как антифрод-мера: она делает экономически нецелесообразным компрометацию аккаунта ради быстрой перепродажи предметов.
Escrow (временное хранение): при переводе предмета между пользователями Steam использует escrow — предмет временно удерживается системой, пока обе стороны не подтвердят сделку через Steam Guard. Это защищает от фишинга и scam-атак.
Технологический стек
Valve исторически не раскрывает детали своего стека, но из публичных данных (вакансии, патенты, исследования трафика) известно следующее:
| Компонент | Технология | Обоснование |
|---|---|---|
| Игровые серверы (CS2, Dota2) | C++ / Proprietary | Минимальная задержка, прямой контроль памяти |
| Backend-сервисы | C++ / Python / PHP | Legacy-стек + быстрая разработка |
| CM-серверы | C++ | Высокая нагрузка, низкая задержка |
| База данных | MySQL | Транзакционные данные (лицензии, аккаунты) |
| Кэш | Memcached / Redis | Сессии, популярные данные |
| CDN | Собственный + Akamai, Level3, EdgeCast | Гибрид для масштабируемости |
| Веб-фронтенд | PHP + JavaScript | Legacy-стек Steam Store |
| SteamOS / Steam Deck | Linux (Arch-based) | Портирование на открытую платформу |
Polyglot-подход у Valve: в отличие от Discord, Valve исторически тяготеет к единому языку C++ для критической инфраструктуры. Это даёт предсказуемую производительность без GC, но замедляет разработку. Python и PHP используются для менее критичных сервисов (магазин, профили).
Сравнение с конкурентами
| Аспект | Steam | Epic Games Store | GOG | Xbox Game Pass |
|---|---|---|---|---|
| Библиотека | 120 000+ игр | ~4 000 игр | ~6 000 игр | ~500 игр |
| Комиссия | 30% (снижается до 20%) | 12% | ~30% | Подписка |
| DRM | Опциональный | Обязательный | DRM-free | Обязательный |
| CDN | Гибрид (собственный + партнёры) | AWS | Партнёры | Azure |
| Рекомендации | Сложные (8+ систем) | Базовые | Базовые | Базовые |
| Мастер-хранилище | Собственные серверы | AWS S3 | Собственные | Azure Blob |
| Доля рынка | 75% | 8–10% | 2–3% | н/д (подписка) |
Epic Games Store привлекает разработчиков щедрой долей выручки (88/12 против стандарта Steam 70/30), но не смог значительно подвинуть Steam в доле рынка — слишком велик сетевой эффект: пользователи идут туда, где больше игр и друзей.
Итоговая архитектура
┌──────────────────────────────────────────────────────────────────┐
│ Клиенты (Win / macOS / Linux / Steam Deck) │
│ ┌──────────────────────────┐ ┌───────────────────────────────┐ │
│ │ TCP (CM Protocol) │ │ HTTP(S) — SteamPipe │ │
│ │ Аутентификация, лицензии,│ │ Depot chunks (6x параллельно) │ │
│ │ друзья, уведомления │ │ │ │
│ └─────────────┬────────────┘ └───────────┬───────────────────┘ │
└────────────────┼───────────────────────────┼─────────────────────┘
│ │
┌──────────▼──────────┐ ┌─────────▼───────────────────────┐
│ CM Servers │ │ Content Delivery │
│ (Connection │ │ ┌──────────────────┐ │
│ Managers) │ │ │ Valve CDN │ │
│ Auth, Sessions, │ │ │ ~220+ узлов │ │
│ License Keys, │ │ └──────────────────┘ │
│ Friend Presence │ │ ┌──────────────────┐ │
└──────────┬──────────┘ │ │ Akamai / Level3 │ │
│ │ │ / EdgeCast │ │
┌──────────▼──────────┐ │ │ (overflow CDN) │ │
│ Backend Services │ │ └──────────────────┘ │
│ │ └─────────────┬───────────────────┘
│ ┌────────────────┐ │ │
│ │ Store Service │ │ ┌────────▼──────────┐
│ │ (catalog, tags,│ │ │ Origin Storage │
│ │ reviews) │ │ │ (мастер-копии, │
│ └────────────────┘ │ │ депо, манифесты,│
│ ┌────────────────┐ │ │ чанки) │
│ │ Recommend. Svc │ │ └───────────────────┘
│ │ (ALS collab. │ │
│ │ filtering) │ │ ┌──────────────────────────────────┐
│ └────────────────┘ │ │ Steamworks Backend │
│ ┌────────────────┐ │ │ Achievements, Cloud Saves, │
│ │ Market Service │ │ │ Matchmaking, Workshop, │
│ │ (escrow, trade,│ │ │ Stats, Leaderboards │
│ │ transactions) │ │ └──────────────────────────────────┘
│ └────────────────┘ │
└─────────────────────┘
│
┌───────────┴────────────┐
│ │ │
▼ ▼ ▼
┌─────────┐ ┌────────┐ ┌──────────┐
│ MySQL │ │ Redis │ │ Search │
│(accounts│ │(cache, │ │(Elastic- │
│licenses)│ │sessions│ │search) │
└─────────┘ └────────┘ └──────────┘
Ключевые уроки и принципы
1. Гибридный CDN — оптимальный баланс стоимости и надёжности
Строить инфраструктуру под пиковую нагрузку (146 Тбит/с) в 10 раз дороже, чем держать её под среднюю (15 Тбит/с). Valve использует собственный CDN как основной и коммерческих провайдеров как резерв на пики. Это позволяет снизить CAPEX, сохранив надёжность.
2. Дельта-патчинг критичен при больших файлах
Без бинарных дельт каждое обновление игры означало бы повторную загрузку 30–150 ГБ. SteamPipe сокращает это до мегабайт. При 120 000 игр, каждая из которых обновляется регулярно, без дельт инфраструктура CDN выросла бы на порядок.
3. Preload — решение проблемы синхронного пика
Глобальный релиз AAA-игры в полночь по местному времени — это физически невозможно обслужить без preload. Распределив загрузку на 3–5 дней до релиза, Valve снижает пиковую нагрузку в момент «старта» в 10–20 раз.
4. Implicit feedback надёжнее explicit
Playtime — более честный сигнал, чем рейтинг. Пользователь редко оставляет отзыв, но данные о времени в игре Steam собирает автоматически. Это фундамент рекомендательной системы, более богатый, чем у большинства конкурентов.
5. Аккаунт-ориентированный DRM выгоднее для пользователя
Привязка прав к аккаунту, а не к устройству — это user-friendly DRM. Пользователь может переустановить Windows, сменить PC, переехать в другую страну — и сохранить доступ ко всей библиотеке. Именно это лояльность, а не технический запрет, делает Steam доминирующей платформой.
6. Сетевой эффект сильнее любой скидки по комиссии
Epic Games Store предлагает разработчикам 88/12 против 70/30 у Steam — на 18% выгоднее. Несмотря на это, Steam занимает 75% рынка. Причина: Steam — это не просто магазин, а социальная инфраструктура с библиотекой друзей, отзывами, Workshop, торговым рынком. Переход на другую платформу означает разрыв со всей этой экосистемой.
7. Географические ячейки — простое и мощное решение
Вместо сложного динамического роутинга Steam использует статические ячейки с предварительно назначенными серверами. Это упрощает логику клиента, делает поведение предсказуемым и позволяет легко добавлять новые серверы в ячейку без изменения клиентского кода.
Вопросы для самопроверки
- Объясните разницу между Depot, Manifest и Chunk в SteamPipe. Как они взаимодействуют при скачивании игры?
- Что такое дельта-патчинг и почему он критически важен для Steam? Как алгоритм определяет, какие чанки изменились?
- Опишите гибридную CDN-архитектуру Steam. Когда трафик идёт через собственный CDN Valve, а когда — через партнёров?
- Как работает Steam Guard Mobile Authenticator? Почему для генерации кода не нужен интернет?
- Как Steam реализует систему лицензий? Что произойдёт, если пользователь попытается расшифровать скачанные чанки без авторизованного аккаунта?
- Объясните понятие географической ячейки (cell) в Steam. Как она влияет на то, с каких серверов клиент скачивает игру?
- Что такое коллаборативная фильтрация и почему playtime является более ценным сигналом, чем явные оценки?
- Как Valve решает проблему пиковой нагрузки при глобальных релизах? Перечислите все механизмы (preload, CDN overflow, P2P, throttling).
- Чем аккаунт-ориентированный DRM Steam отличается от машинно-ориентированного DRM (например, GFWL)? В чём преимущества и недостатки каждого подхода?
- Почему сетевой эффект Steam труднее преодолеть, чем ценовую конкуренцию? Какие компоненты экосистемы формируют этот эффект?
Источники
- Steam Year in Review 2025 — Valve / GDC 2026
- Inside the Engine Room: Investigating Steam's Content Delivery Platform — PAM 2024
- Beyond Speed Tests: Steam Performance — ThousandEyes
- Steam Statistics 2026 — Icon Era
- Steam Statistics 2025 — SQMagazine
- Steam Concurrent Player Records — Icon Era
- Uploading to Steam (SteamPipe) — Steamworks Documentation
- Steam DRM — Steamworks Documentation
- How does Steam games distribution work? — Quora
- What technologies does Valve use to power Steam? — Quora
- Valve says Steam users downloaded 100 exabytes in 2025 — PC Gamer
- Steam CDN — Netify
- Collaborative Filtering for Steam Games Recommendation — ResearchGate
- Steam Recommendation System — ArXiv
- How Steam Guard works without Internet — Quora
- Steam Game Statistics 2025 — Co-op Board Games
- Valve says 5,863 titles earned over $100,000 on Steam in 2025 — Game Developer