我正在运行一款基于 PHP 的游戏,预计到今年年底(2011 年)该游戏的会员数量将超过 4500 万,目前会员数量已达 750 万,该游戏在 Facebook 上运行,我迫切需要帮助让该游戏服务器尽可能高效和强大。
这是一个专用服务器
处理器制造商 Intel 型号 i7 920 频率 4x 2x 2.66 GHz NIC 千兆以太网 RAM 12 GB 硬盘 4 x 1 TB
眼镜。
它安装了 apache、cPanel、phpMyAdmin、几个 apache mods 和 MySQL。
该游戏还为每个用户每秒运行 47 个 mysql 调用。
有没有比上述方法更快、更高效的替代方案?
我不介意重新编码游戏以适应它,只要它能最大限度地提高游戏成员的上限。
谢谢
另外,有没有办法知道我们对玩家、数据库调用等的最大限制是多少?
再次感谢,希望你们能帮忙:)
答案1
对软件和环境进行负载测试的最佳方法是将其或相同的系统置于人工负载下。如果游戏可以编写脚本,请这样做,并让许多脚本玩家从相邻的机器登录并玩游戏,慢慢增加人工玩家的数量,直到响应时间开始走向不可接受的水平。这将为您提供一个指示,表明您可以同时为多少用户提供良好的性能。
一旦环境处于高负载状态,请观察相关的系统指标以查看瓶颈在哪里(通常一个组件比其他组件先受到影响)——如果有办法优化,请这样做并重复测试。首先要检查的是主要限制因素是磁盘 I/O、RAM 还是 CPU,然后将正在发生的事情配对起来,看看罪魁祸首是否是你可以轻松优化的东西(也许你的某些代码效率低下并且占用了大量的 CPU 时间(在这种情况下,对代码进行性能分析可能会指出可以优化的紧密循环),也许你用完了 RAM 并在 IO 或 CPU 本身成为一个主要问题之前开始交换(因此添加更多 RAM 或减少每个进程所需的量可能会有所帮助),也许数据库活动正在饱和 IO 带宽,等等。
可能没有办法在单台机器上优化主要的瓶颈,这是值得的 - 那么您就需要开始考虑使用多台机器(无论如何您都应该为此做好计划,以防您的受欢迎程度增长速度快于预期或为了故障转移(如果一台物理服务器出现重大故障,让您的应用程序保持活动状态)。
如果不进行一些分析,很难给出更具体的答案,因为一个应用程序的性能指标可能与下一个应用程序有很大差异。
答案2
在该硬件上,每用户每秒 47 次调用是行不通的。重点。这个数字一开始就太高了。看起来像是低效的编码/低效的循环/太细粒度的 SQL。对于实时游戏,我能在一定程度上理解它,但对于浏览器游戏,我却不能。我建议您确定这些 SQL 语句的来源并找到替代方案。
其次,如果情况确实如此,那么您既拥有较少的内存,又拥有速度极慢的光盘,这两者都将成为可扩展性的限制因素。