该网站是一个定制的 PHP 应用程序,带有接近 3NF(高度关系,许多外键)的 Mysql 数据库。该网站大约 90% 为读取/10% 为写入。
目前,我们使用的 VPS 内存为 2G,每天有大约 1000 个独立访客,我们发现这个主机出现故障。
由于多种原因,网站稳定性只是其中一个原因(其他原因包括糟糕的客户支持,但这并不重要),我们正在转移主机。选择服务器选项时,此业务的三大优先事项是:
- 稳定
- 价格
- 可扩展性
我正在考虑 EC2 部署。对我来说,一个非常有吸引力的选择是从 MySQL 服务器和 Apache 服务器的两个微型 EBS 实例开始。虽然这会让我的总内存低于我当前 VPS 的 2G,但这似乎是分离数据库和 Web 服务需求的一种非常好的方法。使用更高内存的单个实例会更好吗?在此之前,我还应该考虑哪些其他服务器配置?
顺便提一下,有很多可能的优化途径。有些页面(访问量很大的页面)每页的数据库查询次数超过 1000 次。MySQL 的调优程度也不够。APC 已安装但未在任何代码中使用。
答案1
如果您的读取密集型网站出现故障,则需要查看数据库缓存策略。在对硬件进行任何操作之前,请详细检查 MySQL 缓存使用情况,看看是否可以对其进行更好的调整。还值得检查的是,所有连接是否都使用索引。每天 1000 个唯一访问者的流量非常低,您确实应该能够从当前服务器处理它。
如果您确实需要更多硬件,您几乎肯定会发现您需要更多 RAM,以便拥有更大的数据库缓存,并且使用具有更多 RAM 的单个服务器比使用具有较少 RAM 的两台服务器效果更好。在 Amazon 上,我会考虑使用单个大型实例,这将使您的内存增加近四倍 - 虽然它的成本比两个微型实例高得多,每小时 34 美分,而不是每小时 2 x 2 美分。
答案2
就我个人而言,我永远不会在具有 2 GB RAM 的服务器上部署任何数据库(无论平台如何)(更不用说微型实例附带的 613 MB)。对于数据库来说,RAM 越多越好。您希望将尽可能多的数据库放入内存中,这样您就不必等待磁盘。
答案3
大量1000 名独立访客一天听起来几乎没有负载。虽然出于性能考虑,您可能不想查看唯一访问者,而是查看页面浏览量。但只有 1000 个唯一访问者,相当于每分钟不到 1 个访问者。您的服务器几乎没有任何并发性,并且大多数时间都处于空闲状态。
这意味着您可以在任何 PC 或笔记本电脑上测试您的应用程序并查看其性能。如果您在此单用户测试期间没有遇到性能问题,则它应该可以在您的服务器上运行。
一般而言,我认为一个简单的基于 Web 的 CRUD 应用程序应该在具有 2 GB 的 Web 服务器上运行。如果数据库只有 100MB,我认为它应该可以运行。但您可能需要检查是否正确设置了 my.cnf 设置,特别是如果您使用 INODB(尽管较小的 100MB 数据库应该很容易放入标准文件系统缓存中)。
但我不喜欢共享主机和 VPS,因为你永远不知道你会得到什么:
- 并非总是指定的内存,而是保证的内存(超卖)
- 共享资源意味着你依赖共享服务器上的其他负载
- 使用 VPS 时,您的主内存并不总是用作文件系统缓存(再见性能!)
- 一些 VPS 解决方案在调度处理能力方面非常出色,但共享 IO 则是另一回事(再见性能)。
- 尽管他们称之为 SAN,但它可能只是 NAS(延迟更高,因此性能更差)
- 虽然 SAN 听起来不错,但您不知道它总共要处理什么样的工作负载,因此它可能比预期的要慢得多。
因此,如果您想要可靠的性能,您最好选择专用主机 IMO。