Можно ли использовать LAMP в качестве серверного компонента для моей игры? - PullRequest
0 голосов
/ 27 января 2020

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

Чтобы предотвратить мошенничество, все важные функции запускаются на моем сервере через PHP , Например, если игрок хочет построить дом, серверу говорят: игрок хочет построить BUILDING_A по сетке {x, y}, а скрипт PHP проверяет из базы данных, свободна ли область, если игрок имеет технология, деньги и др. c. для этого.

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


Итак, по сути, моя игра всегда будет следовать одному и тому же процессу:

1) Устройство игрока делает запрос,

2) Сервер аутентифицирует игрока и разрешает или отклоняет запрос,

3) Сервер отправляет устройству игрока ответ, и устройство следует за ним.


Но я не уверен, насколько жизнеспособен или масштабируем мой подход. Я только что тестировал его в одиночку, и он хорошо работает, но, скажем, в первую неделю я получаю 100 или 1000 игроков. В пике может быть несколько сотен запросов к серверу в секунду, когда вызываются PHP скрипты, а база данных доступна и обновлена. Что, если это станет хитом и тысячи людей одновременно получат доступ к моим PHP скриптам и базе данных?

Является ли такой подход вообще жизнеспособным с самого начала? Если бы мои серверы были достаточно мощными, может ли один и тот же сценарий PHP быть доступным для стольких людей одновременно, и может ли сервер записывать в мою базу данных сотни раз в секунду? Будет ли он ставить в очередь операции, будет ли он игнорировать некоторые, перекрывающиеся операции просто не получатся?

Например, если я заплатил за AWS EC2 и настроил там свою ЛАМПУ, мог бы этот тип системы работать или я бы запустил в какое-то ограничение или проблемы, о которых я не знаю?

Ответы [ 5 ]

1 голос
/ 31 января 2020
Сценарий

PHP доступен многим людям одновременно, и может ли сервер записывать в мою базу данных сотни раз в секунду? Будет ли он ставить в очередь операции, будет ли он игнорировать некоторые, перекрывающиеся операции просто не получатся?

  • Сотни в секунду - ОК. Тысячи - это зависит.
  • Очередь операций - Да, но это довольно быстро; операции в основном будут выполняться параллельно.
  • Игнорировать некоторые - Нет. Хорошо, если они остаются в очереди так долго, что это превышает lock_wait_timeout, который по умолчанию равен 50 секундам. (Скорее всего, не произойдет.)
  • 'просто не получится' - Нет.

Вероятно, вы должны планировать иметь достаточно ОЗУ для обработки всех задействованных данных. (Похоже, с этим проблем не возникнет.) Если запросы слишком часто попадают на диск, , что становится ограничением при масштабировании игры. AWS EC2 использует SSD, правильно? (Жесткие диски будут слишком медленными.)

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

Похоже, что типичный "сеанс" это

  • Запуск PHP
  • Подключение к MySQL
  • SELECT информация о пользователе
  • выполнить PHP обработку
  • `ОБНОВЛЕНИЕ user info

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

Это предполагает, что это игра для одного человека. Если вместо этого это многопользовательская игра, не нужно ли будет транслировать «новый дом» всем остальным пользователям?

1 голос
/ 31 января 2020

Да, более 10 000 запросов в секунду может легко управляться средой LAMP.

Здесь только одно предложение вместо Apache2 сервер использует Nginx сервер, который работает лучше, чем Apache2 сервер. Поскольку Nginx по-прежнему является лучшим выбором для производительности в большинстве ситуаций.

См .: https://theorganicagency.com/blog/apache-vs-nginx-performance-comparison/

В случае, если вы хотите провести сравнительный анализ самостоятельно, чем вы можете использовать : https://www.litespeedtech.com/benchmarks/php-hello-world

Поскольку вы планируете развернуть его в EC2 для первоначального использования, вы можете использовать m5a.large, а затем по популярности создать (клонировать) еще один сервер Ubuntu m5a.large и поставить оба под ELB.

Удачи!

0 голосов
/ 31 января 2020

Нет простого ответа на этот вопрос, но для хорошо написанного приложения, работающего на хорошо сконфигурированном сервере, выполнение logi c займет лишь небольшую часть времени, необходимого для обработки запроса - время ответа обычно преобладает по сети в оба конца и по времени разговора с СУБД. В тех случаях, когда многопользовательские системы часто не масштабируются, они используют параллелизм; Вещи, которые, по мнению программиста, будут работать параллельно, должны выполняться последовательно и могут использовать блокировку для обеспечения этого. Следовательно, выбор языка программирования (если речь идет не о CGI, где программа предназначена для обработки каждого запроса) на самом деле не так уж и важен.

Вы должны иметь возможность тестировать каждый из эти операции - сбор данных о сквозных временах отклика на клиенте и сбор их обратно в центральном местоположении (не обязательно в режиме реального времени) и сбор метрик о времени ожидания базы данных в вашем приложении.

PHP сеансы могут быть основным узким местом - также попытайтесь свести к минимуму количество вызовов, которые каждый запрос делает к базе данных.

Я видел раздутые установки Wordpress, пытающиеся обернуть запрос менее чем за 3 секунды с 256 МБ ОЗУ и не поддерживающими более 20 одновременных подключений к разумно определенному хосту - и я также видел системы управления контентом, способные обрабатывать запрос в течение 10 миллисекунд с ограничением в 4 МБ ОЗУ. Примерно разница в мощности более тысячи раз.

0 голосов
/ 31 января 2020

допустим, что за первую неделю я получу 100 или 1000 игроков

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

проверка для mysql max_connections limit

проверка для apache2 MaxRequestWorkers limit для получения дополнительной информации просмотреть этот вопрос

проверить для max number of open files at system level для получения дополнительной информации просмотреть это

Если количество игроков увеличивается, вы можете использовать ELB с несколькими экземплярами и MySql Master Slave

0 голосов
/ 31 января 2020

Прежде всего, вы, вероятно, захотите найти пакет "AJAX server" или "сервер удаленного вызова процедур (RP C)", написанный на выбранном вами языке. Вам на самом деле не нужен «веб-сервер» для выполнения этой конкретной работы. Вы можете найти более специализированные и легкие инструменты, специально предназначенные для этой цели. (И для «контейнерных развертываний», которые обычно используются для подобных задач.)

Поставщики, такие как Rackspace, очень подробно пишут на своем веб-сайте о различных способах развертывания «динамически масштабируемых серверов». Я считаю, что у них все еще есть отзыв от компании, которая продает мобильное приложение, используемое «футбольными мамами». Когда никто не использует приложение, соответствующие «контейнеры» не работают. Когда наступают выходные, и каждая мама смотрит по экрану, наблюдая за тем, как их маленькие любимцы бегают по полю, динамически подключается регулируемое количество контейнеров, чтобы справиться с нагрузкой ... а затем, в конце концов, снова отключается.

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

...