尝试扩展我的专用服务器以适应高流量

尝试扩展我的专用服务器以适应高流量

我现在有一台四核至强处理器、8GB 内存和 2 个 1TB SATA 硬盘。我正在尝试弄清楚如何扩展我的应用程序以处理每天尽可能多的负载和流量。我有一个行业网络站点,目前每天大约有 30,000 个注册用户、60k UV 和 600-1,000,000 次页面浏览量。它运行得太慢了,我不得不关闭服务器,现在我正在损失金钱和流量。

我非常确定部分原因是 PHP 代码和 MySQL 查询(从印度聘请的)。我可以做些什么来优化并确保服务器能够处理尽可能多的流量而不会出现瓶颈。因为我预计每天都会有更多的注册用户。这是一个数据库密集型网站,因为它是某个特定领域的“网络”网站,您必须登录,所以一切都围绕 MySQL 展开。

PS. CentOS 5 64 位,PHP5,MySQL5。我知道数据库是 MyISAM,而且我非常确定他们也没有很好地索引表。

感谢您的建议!

答案1

您可以执行和检查以下几件事,以获取有关该问题的更多信息,从而更好地处理该问题:

  • 您必须确切地找出导致服务器“变慢”的原因。是 CPU 超负荷、内存不足并占用交换空间、IO 受限等……?每个问题都有不同的解决方案,因此您需要在尝试解决问题之前了解问题所在。如果真正的问题只是 Apache 配置不当,而花时间修复数据库,那将是时间和资源的巨大浪费。
  • 某种形式的监控会很有用。这可以是简单的监控,sar也可以是更完整的监控包,例如 Nagios/Zabbix。这将有助于您缩小原因范围,并在以后查看您的解决方案是否有效。理想情况下,您希望在实际需要之前主动扩展。
  • 确保您正在运行 PHP 操作码缓存(APC、eAccelerator 等)。
  • 尝试打开或关闭 MySQL 查询缓存。对于读取量大的应用程序来说,打开查询缓存可能会受益,而对于写入量大的应用程序来说,关闭查询缓存可能会受益。监控查询缓存统计数据可以让您知道查询缓存是有帮助还是有害。
  • 尝试减少MaxClientsApache 中的用户数量,以限制用户数量,并有望减少服务器负载。这可能会使您的网站至少部分可用且可用。
  • 您对 MySQL 配置做过任何修改吗?它通常采用的默认配置不适用于“数据库密集型”站点,通过调整一些值,您可能会看到显著的收益。在此处和网络上搜索有关编辑配置的各种资源。
  • 检查 MySQL 使用了多少内存top。如果您的应用程序确实需要大量写入,我预计/希望它至少使用 1GB,甚至更多,具体取决于您的数据库大小。如果它只使用几百MB,或者使用 6-7GB,则可能存在配置问题。
  • 在 MySQL 表上创建索引很容易……困难的部分是弄清楚您需要什么索引以及它们将带来什么好处(如果有的话)。这时经验丰富的专业人士就有可能迅速获得回报(假设问题确实出在数据库层)。
  • 如果您需要快速让网站恢复运行,扩展到多台机器可能是一个不错的选择。将数据库放在一台机器上,将 Apache 放在另一台机器上。如果其中一台机器的负载很高,这也会很快告诉您瓶颈在哪里。Apache 服务器可能可以扩展到负载平衡器后面的多台机器,并且数据库可以集群化或扩展到更大的机器(如果需要)。从长远来看,正确分析和优化您的应用程序和硬件可能更便宜,但有时您只需要让它昨天运行。这也是专业人士可以为您节省大量时间和麻烦的地方,让您快速启动和运行。
  • 当(或者如果)您确实恢复在线时,最好进行某种形式的监控和基准测试。了解您的限制和当前/平均参数将允许您在服务器崩溃之前进行扩展。

希望这对一些人有帮助并且祝你好运!

答案2

抱歉,但我的诚实回答是:如果你甚至不知道如何检查你的数据库是否被索引,那么你就远远超出了你的能力范围,你的仅有的考虑到项目的范围,选择是聘请专业人士。不是一群廉价的代码奴隶,而是对像您这样的网站有丰富经验的人。

我们可以为您提供大量的建议,但正确调整这样的网站是一项需要经验的工作,并且不能仅靠 ServerFault 上的几个问题来完成。

答案3

您需要使用“MySQL 工作台”登录 MySQL 服务器。一旦您以“root”身份登录(从 localhost 登录,除非您编辑了允许远程登录的权限),您就应该能够看到索引。然后,如果您没有它们,只需创建它们即可,我认为这应该会对您的应用程序产生相当大的速度差异。为了帮助创建索引,您需要查看解释命令。

答案4

根据您的现金流,一个非常快速(且粗糙)的解决方法可能是要求您的托管公司将您升级到 SAS/SCSI 服务器,这也会让您进入企业服务器类别。大型 SATA 驱动器速度很慢,您的服务器可能 CPU 性能很好,但 IO 性能很差。

顺便说一句,恭喜你注册了这么多人。你的问题是个好问题。

相关内容