Я запускаю игру на основе PHP, которая, по прогнозам, насчитывает более 45 миллионов участников на конец этого года (2011). В настоящее время мы находимся на 7,5 миллиона, эта игра запускается на Facebook, и мне отчаянно нужно помочь получить этот игровой сервер в качестве эффективный и максимально мощный.
это выделенный сервер с
Производитель процессора Модель Intel i7 920 Частота 4x 2x 2,66 ГГц Сетевая карта GigaEthernet RAM 12 ГБ Жесткий диск 4 x 1 ТБ
спецификации.
В нем установлен apache, cPanel, phpMyAdmin, несколько модов apache и MySQL.
Игра также выполняет 47 вызовов mysql в секунду на пользователя.
Есть ли альтернативы вышеперечисленному, которые могут быть быстрее, эффективнее и т. Д.?
Я не против перекодировать игру, чтобы она соответствовала ей, если это максимизирует наш верхний предел участников в игре.
Спасибо
Кроме того, есть ли способ узнать, какой у нас максимальный лимит для игроков, вызовов базы данных и т. Д.?
Еще раз спасибо, надеюсь, вы можете помочь :)
Лучший способ нагрузочного тестирования вашего программного обеспечения и среды - это поместить его или идентичную систему под искусственную нагрузку. Если игра может быть написана сценарием, сделайте это, и пусть многие игроки с сценарием входят в систему и играют с соседней машины, медленно увеличивая количество искусственных игроков, пока время отклика не начнет приближаться к уровням, которые неприемлемы. Это даст вам представление о вашем максимальном количестве пользователей, которым вы можете обеспечить хорошую производительность в любой момент.
Когда ваша среда находится в состоянии высокой нагрузки, просмотрите соответствующие системные метрики, чтобы увидеть, где находится узкое место (обычно один компонент страдает раньше остальных) - если есть способ оптимизировать, сделайте это и повторите тест. Первое, что нужно проверить, это то, является ли основным ограничивающим фактором дисковый ввод-вывод, ОЗУ или ЦП, а затем сопоставить происходящее, чтобы увидеть, не является ли виновником то, что вы можете легко оптимизировать (возможно, какая-то часть вашего кода неэффективна и отнимая много времени ЦП (в этом случае профилирование кода может указывать на тесные циклы, которые можно оптимизировать), возможно, у вас закончится ОЗУ и вы начнете подкачку до того, как ввод-вывод или ЦП станут серьезной проблемой сами по себе (поэтому добавление большего количества RAM или уменьшение объема, необходимого для каждого процесса, могут помочь), возможно, активность базы данных насыщает пропускную способность ввода-вывода и так далее.
Возможно, не существует способа оптимизировать основное узкое место на одной машине, которое стоит затраченных усилий - тогда вам нужно подумать об использовании нескольких машин (вы все равно должны планировать это, если ваша популярность будет расти быстрее, чем ожидалось, или цели аварийного переключения (чтобы ваше приложение работало, если на одном физическом сервере возникнет серьезная ошибка).
Без некоторого анализа сложно дать более конкретные ответы, чем этот, поскольку показатели производительности одного приложения могут сильно отличаться от другого.
47 вызовов на пользователя в секунду на этом оборудовании не работают. Точка. Это слишком большое число для начала. Похоже на неэффективное кодирование / неэффективные циклы / слишком гранулярный SQL. Я бы понял это в некоторой степени для игры в реальном времени, но не для браузерной игры. Я предлагаю вам определить, откуда берутся эти операторы SQL, и найти альтернативу.
Во-вторых, если это так, у вас есть и маленький барабан, и жалкие медленные диски, оба будут ограничивающими факторами масштабируемости.