Ubisoft в Google Cloud: автомасштабирование игрового кластера Архитектуры, масштабируемость
Масштабирование кластера — это добавление и удаление серверов по необходимости. Оно позволяет адаптироваться к реальной нагрузке и не тратить ресурсы (= деньги) на чрезмерное резервирование.
Особенно это актуально для облачного кластера, когда нет личных физических серверов. Изменение размера кластера становится тривиальным — несколько кликов или запросов к API облака дают результат за считанные секунды.
Ubisoft — компания разработчик игр — для хостинга сетевых игр обычно использовала свои физические машины. Но с эволюцией возможностей публичных облаков компания решила двигаться в сторону облачных кластеров.
Серверы одной из новых игр Ubisoft будут работать полностью в Google Cloud.
Google Cloud имеет встроенное автомасштабирование, которое работает приемлемо для простых серверов без состояния (stateless). Например, прокси-серверы или машины с бизнес-логикой без локального хранилища. Удаление нескольких из них пользователи даже не замечают. Google масштабирует кластер, смотря на среднюю нагрузку по CPU или по памяти на машинах.
Но такая схема абсолютно нерабочая для игровых серверов, так как:
- на серверах есть игроки. Внезапное отключение сервера потеряет их прогресс;
- сервер перед выключением должен выгрузить сохранения;
- запуск нового сервера — долгий процесс из-за его размера и сложности. Надо запускать еще до роста нагрузки.
В Ubisoft создан собственный сервис масштабирования. Он работает на одной машине в облаке и автоматически управляет игровым кластером из тысяч машин.
Для добавления и удаления серверов он использует Google Cloud API и имеет много дополнительных наворотов:
- он быстрый. Кластер с нуля до тысяч машин запускается за несколько минут;
- отслеживает популяцию кластера игроками, а не CPU и память;
- предсказывает рост популяции и запускает новые машины заранее;
- выводит лишние машины аккуратно, не влияя на игровой процесс;
- позволяет выкатывать пробные версии игры на часть кластера (canary deployment);
- быстро и аккуратно выводит из кластера устаревшие версии игры (rolling update);
- поддерживает баланс серверов по географическим зонам облака.
Доклад поведает о технологиях и алгоритмах, использованных в этом сервисе.
Работает в Ubisoft над сетевым взаимодействием и в Tarantool над разработкой сервера.