Привет, Geektimes! Это первый пост от Playkey — первого и самого крупного российского сервиса облачного гейминга. Для игры на облачном игровом сервисе нужно высокоскоростное подключение к Интернету и практически любое “железо”, как на Mac OS, так и на Windows.
![](https://habrastorage.org/files/b1f/4ea/15b/b1f4ea15b9aa460ba4993aedfd365247.png)
Снаружи смотрится сказкой: ПК десятилетней давности, а GTA V летает онлайн без тормозов. Но, если заглянуть внутрь, то запустить в “облаке” топовую игрушку и передать её в реальном времени пользователю, мгновенно реагировать на его действия — это чертовски непросто.
Для нашей интро-публикации, мы решили пообщаться с техническим директором Playkey Алексеем Лыковым о том, как в принципе работает технология Playkey, как мы решаем проблему "последней мили" и боремся с высоким пингом. Поехали!
![](https://habrastorage.org/files/e73/0e3/d7b/e730e3d7b4ab406083c3ce35f147976b.jpg)
(да ладно, кого мы обманываем, Алексей тут просто смотрит в монитор для кадра! В общем, познакомьтесь — Алексей Лыков)
Как это работает
Для пользователя работа Playkey выглядит просто: выбираешь игру в каталоге, нажимаешь играть — и получаешь в окне клиента живую картинку.
С нашей стороны это все чуть-чуть сложнее. Это как “ездить на велосипеде, который горит, и ты горишь, и все горит, и ты в аду”.
В основе сервиса Playkey — игровой сервер. Это виртуальная единица, которая обслуживает одного пользователя. На одном физическом сервере может запускаться десятки виртуальных, которые обслуживают уже отдельных пользователей.
Сервис задуман приносить геймерам радость, а не боль и лагающую картинку. Поэтому наша задача — подстроиться под пользователей, оценив скорость и качество интернет соединения с их стороны, “железо”, собственные ресурсы, свободные слоты на сервере, доступность самой игры и мгновенно подстроиться под все эти условия.
![](https://habrastorage.org/files/c7c/90c/4a4/c7c90c4a4df6409f9f5586c690fece6e.png)
На этапе загрузки игры через Playkey в первую очередь проверяется пинг к ближайшим серверам и наличие выбранной игры на конкретном сервере. Понятное дело, никто не вспоминает, что эту игры мы уже скачали сами и установили на серверный SSD. Пункт проверки актуален не для всех игр, потому как самые популярные тайтлы вроде GTA 5 разлиты на все сервера разом.
Что происходит, если загрузка сервиса близка к критической и остаются только дальние сервера с высоким пингом? Игрок встает в очередь на запуск. Ждать приходится недолго, минуты 3-4, но, к счастью, в последнее время такие эпизоды возникают совсем редко и только в самые пиковые моменты. Мы понимаем, что лагающая картинка — это ситуация куда хуже, чем необходимость подождать пару минут, поэтому выбрали именно такой сценарий.
Это всё вы виноваты: разбираем сложности на стороне пользователя
Главный и первый вопрос, который задают о Playkey — пинг. Сегодня мы можем однозначно сказать, что для крупных российских городов мы добились отличного значения: при игре по кабелю можно рассчитывать на единицы миллисекунд. Этого достаточно даже для игры в шутеры.
Почему пинг в Playkey может оказаться выше играбельного уровня? По нашей статистике, главная проблема — качество сети непосредственно дома у пользователя. Частая проблема “последней мили” — подключение через Wi-Fi. С Playkey мы передаем realtime-video, поэтому должны мгновенно реагировать на “обратную связь” от игрока. С технологической стороны для Playkey гораздо больше сложностей, чем при стандартной передаче видеопотока. Мы не можем допустить задержки в пару минут перед началом просмотра или дозагрузить просевшие части “в процессе”. Буфер видео в Playkey минимальный и исчисляется миллисекундами — как только он переваливает за 20-30 миллисекунд, играть становится некомфортно.
Wi-Fi роутер же — это ужасная головная боль там, где недопустима потеря пакетов. Поставить возле роутера чайник — вайфай практически не будет работать. Перемести роутер за стенку — сигнал начнет терять вдвое больше пакетов. Для игрока это означает, что картинка начнет лагать, а пинг — расти. При подключении по кабелю всех этих проблем нет, но, что поделаешь, мы научились работать и с игроками по Wi-Fi. Как?
Для устранения лагов при игре через Wi-Fi, мы сделали триггеры адаптивного битрейта, которые собираем постоянно. На основе полученных данных выставляем пользователю максимально возможное качество и битрейт в зависимости от его условий. Ситуация у пользователя может меняться: начиная от того, что кто-то начал использовать сеть параллельно с игрой, или игрок переместиться в соседнюю комнату, и Wi-Fi сигнал улучшился (или наоборот ухудшился?). На каждый шаг нами принимаются ответные действия.
Поэтому мы настоятельно рекомендуем пользователям подключаться по проводу, это позволяет нам выставлять лучше качество.
Дополнительно, еще перед запуском игры, система собирает статистику по железу пользователя: память, операционная система, процессор. Эти данные позволяют понять, какого качества видеопоток сможет декодировать пользовательский компьютер. Для декодирования потокового видео нужны ресурсы: если мы говорим про Core i7, то он может в realtime и 4K декодировать. А какое-нибудь старое нечто или ноутбуки на Intel Atom практически не способны делать это “на лету”. Приходится ослаблять битрейт, оставлять меньше фишек энкодера — иначе софтверный декодер просто не успевает обрабатывать кадр. Даже тут мы стараемся найти баланс в качестве картинки, которое доступно пользователю в его реалиях.
Наша гиперцель — запустить Playkey на 3G/4G сетях, хоть они и заточены под принципиально другие задачи. Сейчас при передаче данных внутри мобильной сети игрок получает высокий пинг, и хоть играть в целом можно, тут нам предстоит еще много работы.
![](https://habrastorage.org/files/876/4cc/a4f/8764cca4f5c8410a8d2fff105ff05c8c.jpg)
Встречаются и проблемы серьезнее — по пути от компьютера до дата центра. Бывает, что трафик идет от Москвы до Санкт Петербурга через Амстердам. Просто потому что оператор на магистральном уровне, либо в конкретном дата центре посчитал, что так будет дешевле.
Бороться с этим явлением практически невозможно, кроме как подключившись к площадкам обмена трафика. Чаще всего проблема возникает при работе с разными операторами. Если пермский пользователь подключен например через “ХХ-телеком”, а сервера подключены через “YY-телеком”, то случалось, что трафик шел крюком через Москву т.к. между провайдерами может не оказаться прямого пиринга, благо на текущий момент эта проблема по большей части устранена.
Как портируются игры
Появление игры на Playkey — это не просто “скачал-поставил”. Это целый путь адаптации каждого проекта под облако. Раньше это занимало месяцы, сегодня мы достигли определенного прогресса: многие движки поддерживаются “сразу”, и игру можно запускать уже в день релиза.
В иных случаях приходится подключать техническую команду и начинать настройку. “Ребята, работаем дальше”:
![](https://habrastorage.org/files/de8/f8e/3ba/de8f8e3ba3ee49ac8a5cc1fb4494002a.jpg)
Fun Fact #1: одна из главных сложностей при портировании игр — античит защита. Поведение облачного игрового сервиса выглядит как эмулятор, и условный Tom Clancy’s: Rainbow Six Siege, например, не дает нам доступа к онлайн режиму.
Все игры используют WinAPI функции, этих функций очень много, некоторые разработчики используют малый функционал, некоторые — расширенный. В своей технологии мы обрабатываем эти вызовы, но их очень много и ведут они себя по-разному. Большинство сценариев мы уже отлично отрабатываем, но бывают какие-то новые штуки. Да, запись файла — это не проблема, но как игра работает с ним дальше? Какие маркеры она на этот файл выставляет? Только для чтения? Закрывает ли она его? Оставила ли она на него ссылку, чтобы потом использовать? Основные сценарии, как то работа с файловой системой, работа с реестром, работа со звуком и видео — мы уже, конечно, отработали. Поэтому часто для запуска новой игры достаточно указать версию Direct X, выбрать аудиобиблиотеку — и все готово. Но бывают и сюрпризы, из-за которых настройка игры в итоге может занять от пары часов до пары месяцев.
Как отбираются игры в каталог?
Отталкиваемся от цели по-максимуму отбирать горячие новинки, свежие, получившие высокий рейтинг и, безусловно, с высокими техническими требованиями. Высокий приоритет получают и новые игры, которые мы технически знаем, что, вероятно, сможем выпустить в день релиза. Выбор делают и сами пользователи — часто в соцсетях мы открываем голосования, в работу берем победителей по массовому решению. То есть юзеры тут напрямую влияют на библиотеку игр Playkey.
Выглядит это примерно так:
![](https://habrastorage.org/files/e72/d02/ccc/e72d02ccc3144336b881d5d19f11e9c3.png)
(а вот, кстати, и наша группа ВК: https://vk.com/playkey_net)
Два важных “но”: мы не берем в работу игры в бете и мы не работаем с тайтлами, которые заточены исключительно на онлайн и имеют сложную античит систему.
Какие сервера используются?
Огромная сложность Playkey в том, что нам нужны не обычные сервера, а сервера с GPU. Их и в мире немного, а в России так вообще практически нет.
Вот как выглядят эти эксклюзивные ребята:
![](https://habrastorage.org/files/827/db0/a44/827db0a44077422284b3575d26981f52.jpg)
Проблема в том, что они редко доступны для аренды. Сервис-провайдеры часто хвалятся, что у них в наличии такие решения есть, но, как правило, их ставят в каталог “чтобы было”. И если будет запрос — там они уже организуют поставку и ценовое предложение. Сформированного спроса на сервера с GPU просто нет.
Фактически мы уже сейчас перекрыли тот объем серверных ресурсов с GPU, который был доступен для аренды в России.
Fun Fact #2: Основной use case для таких серверов — военная промышленность и сложные математические вычисления, где GPU справляется лучше процессора. Это тоже беда: военным не подходит облачная архитектура — они хотят купить сервера себе. По любой цене! И этим взвинчивают стоимость еще выше. Нам же, наоборот, нужны “облака” и в аренду. И да, лучше дешевле.
Да, есть несколько больших компаний, которые предоставляют нужные нам сервера, но тут возникает проблема цены. Они делают универсальное решение для всех отраслей — и в первую очередь для тех, кто работает с профессиональной графикой. Строят замороченную и сложную инфраструктуру, а нам нужна такая архитектура, которая позволила бы попросту сэкономить деньги на хранении игр и уменьшить чек для игроков.
Сейчас просто нет массовых задач для серверов с GPU. И это принципиально влияет на вопрос цены. Мы хотим арендной модели, но сервис-провайдеры на текущем этапе вынуждены все финансовые риски закладывать только на нас. Из-за этого нам проще взять сервера в лизинг.
И это всё?
![](https://habrastorage.org/files/286/27e/ee2/28627eee227a46e38a0938e250f80bcf.jpg)
Конечно, нет! Это только наш первый пост в серии публикаций про облачный гейминг. Теперь, после того как мы разобрали базовую архитектуру сервиса Playkey, мы планируем рассказать в деталях статистику про геймеров в России, про производительность "железа" Playkey (и стоимость сборки аналогичного ПК дома) и многое-многое другое. Так что смело подписывайтесь на наш канал, комментируйте и признавайтесь, — что еще вам интересно было бы о нас узнать?
С наступающим Новым годом, Geektimes! Играйте только в лучшие игры.