Поиск по сайту:

Как построить серверную архитектуру многопользовательской игры


Одна из самых больших проблем, которую инди-разработчики должны решить при разработке своей игры, — решить, как будет работать мультиплеер. Вам нужно запускать выделенные серверы? Можете ли вы использовать одноранговую сеть для своей игры? Давай поговорим об этом.

Эта статья посвящена общей инфраструктуре вашей игры, а не точным деталям того, как заставить работать многопользовательскую сеть, поскольку это будет зависеть от вашего движка и того, как ваша игра запрограммирована.

Подумайте, нужно ли вам вообще запускать серверы

Некоторые игры могут обходиться без выделенных серверов. Если вы создаете игру, которая в основном представляет собой взаимодействие между игроками, без рейтинговой соревновательной системы, вам могут вообще не понадобиться серверы.

Например, Minecraft делает это особенно хорошо. Вы можете играть самостоятельно, в локальной сети, подключаться к серверам, размещенным другими игроками, или размещать свой собственный сервер. Конечно, для этого требуется поддержка сообщества и игроки, заинтересованные в размещении собственных серверов, в противном случае слишком сложно просить ваших пользователей. Гибридная система сработала для Rust; у разработчиков есть несколько официальных серверов, а сообщество запускает на них свои собственные.

Помимо наличия хост-серверов сообщества, простейшим методом бессерверной архитектуры является модель сервера прослушивания. С помощью онлайн-подсистемы, такой как Steam, люди могут формировать свои собственные лобби, либо присоединяясь к игре своего друга, либо находя и присоединяясь к глобальным открытым сеансам других игроков в Steam.

Обычно тот, кто создал лобби, является лидером. Они выбраны сервером, и все к ним подключаются. Компьютер лидера лобби становится специализированным сервером, на котором размещаются сеансы для всех в лобби. Это полностью избавляет от необходимости запуска серверов.

Если ваша игра более ориентирована на матчи, например, шутер 5 на 5, вам может понадобиться выделенный сервер для подбора игроков, предназначенный исключительно для сортировки игроков по лобби на основе их статистики (а не для обработки реального игрового процесса). Это позволит вам сделать процесс поиска игр автоматическим, а также внедрить собственные правила подбора игроков. Вам в любом случае понадобится такой сервер, даже если вы не используете модель сервера прослушивания для запуска игр.

Недостатки модели прослушивающего сервера

Модель сервера прослушивания фантастична и отлично подходит для инди-игр, которые хотят создавать многопользовательские игры без необходимости платить за выделенные серверы. Но у него есть два основных недостатка — читерство и отставание.

Первое очевидно. Если у вас есть матчи 5 на 5, даже если вы случайно выбираете хост сервера, любой данный игрок имеет 10% шанс быть выбранным в качестве сервера. Если они являются сервером, они имеют полный контроль над всей игрой, что делает модель сервера прослушивания совершенно неприемлемой для соревновательной игры. Представьте себе Counter Strike, но каждые несколько матчей у вас есть кто-то в режиме бога во вражеской команде, нокалипирующий и убивающий всех. Не весело для вас или ваших игроков.

Это действительно невозможно смягчить, но последствия этого зависят от типа игры, в которую вы играете. Возможно, ваша игра представляет собой настольную онлайн-игру, в которую вы играете просто ради удовольствия; в такой игре читерство бесполезно. С приличной системой отчетов вы можете справиться с несколькими всплывающими окнами, особенно если ваша игра не такая большая. Этот тип аномалии будет легко обнаружить, и маловероятно, что кто-то приложит усилия для разработки читов, если ваша игра в любом случае не достаточно велика, чтобы позволить себе выделенные серверы.

Второй недостаток — гораздо большая проблема для небольших игр. Если компьютер, выбранный в качестве сервера прослушивания, не такой мощный или имеет плохое подключение к Интернету, работа может зависать. Это можно смягчить с помощью внешнего сервера для подбора игроков, который выбирает лучший сервер для прослушивания из лобби, основываясь на характеристиках ПК и скорости интернета. Это не может быть реализовано со стандартной подсистемой Steam — человек, который начал вести лобби, в этом случае всегда будет лидером лобби.

В любом случае, в небольших играх нередко используется модель прослушивания-сервера, поскольку она по существу бесплатна для разработчика. И хотя от более крупных игр ожидается наличие выделенных серверов, они не всегда бывают — в For Honor, игре AAA от Ubisoft, при запуске не было выделенных серверов, к большому разочарованию их игроков.

Выделенные серверы на самом деле не так страшны

Хотя ежемесячная плата независимого разработчика за поддержку вашей игры звучит утомительно, это может быть не так плохо, как вы думаете. Скажем, в вашей игре проходят матчи 5 на 5. Сколько матчей вы ожидаете одновременно? Если у вас есть 100 активных игроков, это всего 10 матчей.

Если ваша игра не слишком интенсивна, она, вероятно, может работать в одном потоке. Четырехъядерный сервер с гиперпоточностью теоретически может запускать 8 одновременных игровых сессий. Вы определенно захотите провести тестирование, чтобы проверить, сколько сеансов может поддерживать данный сервер, чтобы вы могли почувствовать, какая мощность вам понадобится.

И если у вас есть 100 активных игроков, вы уже делаете что-то правильно, потому что у вас будет на порядки больше людей, которые купили игру, но не играют в нее 24/7. Например, было продано более 5 миллионов копий Rust, но в любой момент времени активны только около 50 000 человек — в 100 раз больше продаж, чем активных игроков в день.

Итак, при матчах 5 на 5 и 100 активных игроков вам понадобится сервер, способный поддерживать 10 матчей. Может быть, вы обнаружите, что шестиядерный сервер с 64 ГБ ОЗУ может легко запустить все ваши матчи. Вы можете найти выделенный сервер с такими характеристиками примерно за 80 долларов в месяц. Если у вас в среднем 100 активных игроков, вы определенно продали как минимум несколько тысяч копий, поэтому у вас наверняка будут деньги, чтобы дать своим игрокам хороший опыт.

Если у вас не так много игроков, вы, вероятно, можете запустить все на очень маленьком сервере, что значительно снизит ваши затраты. Если ваша игра действительно развивается до такой степени, что вы начинаете видеть, как ваша маржа снижается, вы всегда можете рассмотреть альтернативные варианты монетизации; косметика (например, скины для оружия и игроков) является обычным выбором; они дают преданным игрокам то, на что можно потратить деньги, что дает вам стабильный ежемесячный доход, помогающий компенсировать стоимость серверов.

Самый дешевый вариант — арендовать выделенную коробку или две

С виртуальными серверами память имеет большое значение. Если вы сравните цены на AWS или Google Cloud Platform с ценами на аренду выделенного блока у небольшой компании, вы обнаружите, что вы платите гораздо больше за тот же объем памяти в AWS. Это проблема, особенно для игр, поскольку память часто является ограничивающим фактором для сервера, способного запускать больше сеансов.

«Выделенная коробка» просто означает, что вы арендуете само оборудование. Вы арендуете целую стойку из центра обработки данных, что означает, что вам также не нужно иметь дело с накладными расходами на виртуализацию.

Звучит дороже, но часто на самом деле намного дешевле. Если вам не нужны первоклассные серверы, вы можете арендовать старое оборудование с огромными скидками. В конце концов, старое оборудование всегда было лучшим; когда крупные провайдеры VPS, такие как AWS, переходят на более новые серверы, они часто продают часть своего старого оборудования. (На самом деле вы можете купить их самостоятельно на Ebay, подробнее об этом ниже.) Действительно, старый сервер может быть всего на 10% или около того менее производительным, чем новый сервер, но когда он вдвое дешевле, это отличная сделка.

OVH — хорошее место для поиска довольно дешевых выделенных серверов. Их дочерняя компания SoYouStart продает старое оборудование, которое можно найти по очень низким ценам.

Масштабируемое решение — AWS GameLift

Несмотря на то, что AWS дороже, у него есть некоторые большие преимущества. AWS GameLift — это сервис, который значительно упрощает запуск игровых серверов на вычислительной платформе AWS EC2.

GameLift — это, по сути, причудливая версия автомасштабирования EC2. Он автоматически запускает новые экземпляры, когда спрос становится высоким, или прекращает работу экземпляров, когда они не нужны, например, ночью, когда люди не играют. Это практически идеальный вариант использования автомасштабирования; из консоли GameLift вы можете определить тип экземпляра, который вы хотите использовать для масштабирования, и количество игровых сеансов, которые может обрабатывать этот сервер.

Это помогает значительно компенсировать расходы, когда по сравнению с выделенными серверами и в сочетании со спотовыми инстансами EC2 может сделать запуск на AWS жизнеспособным вариантом для довольно популярной игры. Стоимость часа выше (AWS стоит дорого), но вы тратите гораздо меньше времени на фактическую эксплуатацию серверов, поскольку ваша архитектура будет масштабироваться для точного удовлетворения спроса.

GameLift даже включает в себя базовую систему подбора игроков, которая избавляет от необходимости запускать отдельный сервер подбора игроков. Игроки встают в очередь, и система подбора игроков GameLift сортирует их по сеансам на основе определенных вами правил. Если потребуется новый сервер, он будет запущен.

Для небольших игр, которым не требуется более одного сервера, AWS GameLift немного излишен, но если вы все еще хотите работать на платформе AWS, вы можете зарезервировать инстансы EC2 с годовым контрактом примерно на 40 % дешевле, чем По требованию. Тем не менее, это все еще не приближается к выгоде, которую дешевый выделенный сервер даст вам в других компаниях, поэтому выбирайте зарезервированный экземпляр только в том случае, если вы действительно любите AWS.

Если вам нравится шум — покупайте, а не арендуйте

Есть причина, по которой старые выделенные серверы такие дешевые: центры обработки данных постоянно продают свое старое оборудование на Ebay, часто с большими скидками. В мире серверов стоимость самого оборудования незначительна. Основным поглотителем денег являются огромные счета за электроэнергию, связанные с работой сервера, и охлаждение, необходимое для охлаждения до приемлемой рабочей температуры.

Если бы вы арендовали выделенный сервер у SYS, вы бы платили около 84 долларов в месяц за 6-ядерный Haswell (2014) Xeon с 64 ГБ ОЗУ и несколькими ТБ дискового пространства. Это уже чрезвычайно выгодная сделка для сервера такого размера. По сравнению с AWS r5.2xlarge с 8 ядрами и 64 ГБ ОЗУ (здесь важна именно ОЗУ), вы будете платить более 250 долларов США в месяц даже при годовом контракте, не говоря уже о дополнительных 50–100 доллара США или около того за сопоставимый объем EBS.

Итак, с учетом того, что сервер SYS является такой выгодной сделкой, как вы думаете, сколько будет стоить покупка сопоставимого сервера на Ebay? Сервер SYS стоит более 1000 долларов в год, поэтому около 500-700 долларов или около того могут быть хорошей оценкой, особенно если учесть, что один только процессор Xeon продается в розницу по цене более 600 долларов, не говоря уже о стоимости оперативной памяти, дисков и различных компонентов.

Неа. Вот список на Ebay стойки с такими же характеристиками за 70 долларов с бесплатной доставкой:

Возможно, вы ухватитесь за возможность купить это, но сначала нужно рассмотреть несколько вещей.

Во-первых, не стоит ставить эту вещь в своей спальне. Серверы громкие. Они предназначены для использования в центрах обработки данных, а у компьютеров нет ушей. Возможно, вам сойдет с рук установка его в подвале, но не рассчитывайте оставить его в шкафу в спальне, особенно сервер высотой 1U с крошечными 40-мм вентиляторами, которые должны вращаться миллиард раз в секунду только для того, чтобы охладить компьютер. вещь.

И хотя оборудование дешевое, мощность — нет. Такой сервер будет потреблять 100-200 Вт в режиме ожидания и может достигать пиковой мощности более 500 Вт, при этом некоторые серверы с большим количеством ядер могут потреблять целый киловатт энергии при полной нагрузке. Однако, если вы не испытываете безумной нагрузки, вы, вероятно, не будете платить слишком много за мощность, но ожидайте, что ваш счет вырастет на 10-15 долларов за сервер.

И, наконец, есть вопрос, можете ли вы даже запускать серверы из своего дома. Большинство домашних интернет-планов не очень хорошо оснащены для этого. Мало того, что это обычно противоречит ToS, у вас не будет статического IP-адреса, что очень затруднит работу в сети. Вам нужно будет изучить бизнес-планы, которые предлагает ваш интернет-провайдер, если вы серьезно подумываете о покупке собственного сервера.

Если вы хотите купить свой собственный сервер, вам следует проверить LabGopher, сервис агрегации для поиска бывших в употреблении серверов, который позволит вам более эффективно просматривать списки Ebay.

Обычно вы можете найти действительно отличные серверы менее чем за 500 долларов или около того. Сервер в приведенном выше сравнении является исключительным предложением, но не совсем редким.

Однако вам не нужно принимать их из дома. Есть провайдеры, которые специализируются на размещении оборудования других людей, называемые услугами колокейшн, которые подключат ваш сервер в своем центре обработки данных, в комплекте с питанием и сетью. Это крайний вариант и довольно серьезное обязательство, но в определенных ситуациях оно может иметь смысл.

Размещение одного сервера 2U будет стоить вам чуть более 100 долларов в месяц. Если этот сервер очень мощный, эта стоимость может быть намного ниже, чем стоимость аренды выделенного сервера того же калибра. Имейте в виду, однако, что многие услуги колокации будут взимать плату в зависимости от энергопотребления, поэтому вам нужно сначала провести исследование, прежде чем начать колокейшн.

Параметры серверной службы — Google Firebase, RethinkDB

Этот последний вариант предназначен для особого случая использования. Если вашей игре нужен только простой бэкэнд, вас может заинтересовать база данных в реальном времени. Базы данных в режиме реального времени обновляются мгновенно и отправляют обновления подписавшимся пользователям через веб-сокеты. Они обычно используются для создания приложений, таких как Google Docs, где передача информации в режиме реального времени является ключевой. Этот вариант особенно хорошо работает для мобильных игр, где сверхнизкая задержка, быстрое действие и сложная обработка на самом деле не требуются.

Firebase — это управляемая служба от Google. Он начинался как просто база данных в реальном времени, но с тех пор превратился в целую платформу для серверной части мобильных приложений. Существует бесплатный уровень, уровень 25 долларов, которого должно быть достаточно для большинства небольших приложений, и план с оплатой по мере использования, который взимает плату в зависимости от использования.

RethinkDB — это база данных с открытым исходным кодом, созданная с учетом реального времени. Вам придется запускать его на своем собственном сервере, но вычислительной мощности RethinkDB и дешевого выделенного сервера должно быть более чем достаточно для большинства задач, если только ваше приложение не испытывает большого трафика.