// кейс · Playnetica
Kubernetes-платформа для покерного игрового продукта: с нуля и в проде
Строим и поддерживаем инфраструктуру покерной игровой платформы на Unity WebGL и Android — с нуля, включая доставку игры внутри стороннего iframe и все production-сервисы вокруг неё.
Обсудить похожую задачу// контекст
Playnetica — игровая студия, чья покерная платформа на Unity доступна как WebGL-версия и как Android-приложение. WebGL-версия дополнительно встраивается в сторонние игровые площадки через iframe — это добавляет к обычным задачам инфраструктуры отдельный пласт проблем с доставкой веб-контента внутри чужого окружения. До нашего подключения у продукта не было ни инфраструктуры, ни процессов вокруг неё — мы строили всё с нуля.
// что построили
Стек и инфраструктура
Kubernetes
- Отдельные production и staging окружения
- Ingress и роутинг трафика на сервисы
- Health checks и репликация для каждого сервиса
GitOps и CI/CD
- GitOps-деплой через ArgoCD
- GitLab CI/CD и собственный GitLab Runner
- Container registry для образов сервисов
Observability
- Grafana для дашбордов и алертинга
- Loki и Promtail для логов
- node-exporter для метрик узлов кластера
Данные
- PostgreSQL
- MongoDB
- Redis
// масштаб
Масштаб платформы
- 10+ backend-сервисов: identity, gateway, user management, remote config, economy, progression, matchmaker, inventory, lootbox, shop, интеграция с внешней игровой площадкой
- Отдельные Java-сервисы: balance, lootbox, statistic, quest
- Health checks и репликация на каждом сервисе
- Раздельные production и staging окружения для всей платформы
// самое сложное
Доставка Unity WebGL внутри стороннего iframe
Абсолютные URL для WebGL-ассетов
Unity WebGL по умолчанию ожидает относительные пути к своим ресурсам. Как только билд открывается не с корня собственного домена, а встроенным в стороннюю страницу, относительные пути ломаются. Настроили генерацию и раздачу ассетов с абсолютными URL, чтобы билд одинаково работал и напрямую, и внутри чужой страницы.
Запуск внутри стороннего iframe
WebGL-версия встраивается в сторонние игровые площадки через iframe — это отдельная среда выполнения со своими ограничениями по хранилищу, кукам и коммуникации с родительским окном. Настроили CORS так, чтобы ассеты и API загружались из iframe без ошибок браузера, оставаясь безопасными для остального трафика.
Доставка ассетов через CDN/S3-совместимое хранилище
Игровые ассеты (сцены, текстуры, аудио) отдаются через статику и CDN на S3-совместимом хранилище — так игра грузится быстро независимо от того, где физически находится игрок.
Unity Addressables и CRC mismatch
Часть ассетов загружается через систему Unity Addressables по требованию, а не единым билдом. При проблемах с кешированием на CDN или в браузере возникает CRC mismatch — Unity считает загруженный bundle повреждённым и отказывается его использовать. Разобрали механику кеширования Addressables и настроили доставку так, чтобы это переставало происходить в проде.
// цифры
Что это дало на практике
- Кластер
- Production-кластер Kubernetes на 4 нодах в облаке
- Релизы
- 2 релиза в неделю
- Простои
- 2 инцидента с февраля 2026, оба — из-за проблем на стороне внешнего CDN
- Подключение к базе данных
- Когда часть запросов к базе стала выполняться заметно медленнее, разобрались, что дело не в самой базе, а в накладных расходах на установление соединений. Ввели PgBouncer как пул соединений — это снизило разброс задержки и сделало время ответа предсказуемым, вместо разбора отдельных медленных случаев постфактум.
// production-задачи
Что решали в проде
- Диагностировали проблему на уровне ноды — диск и I/O — на production-кластере
- Настроили доставку Unity WebGL внутри стороннего iframe: абсолютные URL, CORS, кеширование
- Разобрали цепочку CORS/кеш/Addressables, приводившую к CRC mismatch при загрузке bundle-файлов
- Поддерживаем CI/CD pipeline для WebGL- и Android-билдов
- Нашли и исправили баг с потерей реального IP клиента на балансировщике: облачный контроллер не подхватывал PROXY protocol из-за особенностей аннотации, из-за чего в логах и метриках все запросы выглядели так, будто идут с одного адреса
- Разобрали 404 на видео при раздаче через CDN: origin отдавал редирект с HTTP на HTTPS, который CDN не проходил, — видео теряло Content-Type и переставало отдаваться. Настроили раздачу с корректными заголовками и без лишних редиректов
- Построили систему параллельного тестового восстановления бэкапов баз данных с защитой от повреждённых архивов и отчётом в Telegram — тот же принцип, что лёг в основу нашего собственного инструмента проверки бэкапов
// контакты
Обсудим вашу задачу
Напишите напрямую в Telegram или оставьте заявку — ответим в ближайшее время.