服务器架构为一个重读网站

该网站是一个自定义编写的PHP应用程序,具有近3NF(高度关系,许多外键)Mysql数据库。 这个网站是大约90%读/写10%。

目前,我们正在使用2Gig内存的VPS,每天有1000个独立访问者,而且我们发现这台主机已经失效。

由于以下几个原因,网站的稳定性只是一个原因(其他原因包括以次充好的客户支持,但这不是在这里或那里),我们正在移动主机。 select服务器选项时,此业务的前三个优先级是:

  1. 稳定性
  2. 价钱
  3. 可扩展性

我正在考虑EC2部署。 一个对我来说非常有吸引力的select是从两个微型EBS实例的MySQL服务器和Apache服务器开始。 虽然这使我的总内存低于我目前的VPS的2G,这似乎是一个很好的方式来分离数据库和Web服务的需求。 我会更好更高的内存单实例吗? 还有什么其他的服务器configuration,我应该在这之前考虑?

在一个侧面说明,有很多可能的优化途径。 有些页面(重击的页面)每页打1000多个数据库查询。 MySQL也没有完全调整。 APC已安装但未在任何代码中使用。

如果您的读取密集型网站失败,则需要查看数据库caching策略。 在对硬件进行任何操作之前,请仔细检查您的MySQLcaching使用情况,看看您是否可以更好地调整它。 同样值得检查的是,你所有的连接都使用索引。 每天1000个唯一身份访问者stream量非常低,而且您确实应该能够从您当前的服务器中处理它。

如果你确实需要更多的硬件,你几乎肯定会发现你需要更多的内存,这样你就可以拥有更大的数据库caching,而使用更多内存的单个服务器而不是更less内存的服务器会更好。 在亚马逊,我会看看一个大的实例,这会使你的内存几乎翻两番 – 虽然它的成本要比两个微型实例要多得多,每小时34美分,而不是每小时2美分2美分。

就我个人而言,我不会在配有2G内存的服务器上部署任何数据库(无论是平台)(更不用说微型实例附带的613M)。 说到数据库,更多的RAM更好。 您希望尽可能多地将数据库存储到内存中,而不是等待磁盘。

每天有1000名独立访问者的加载听起来几乎没有任何负载。 虽然对于性能你可能不想看看唯一的访问者,但页面浏览量。 但是,只有1000个独立访问者每分钟不到1个访问者。 您的服务器几乎没有任何并发​​性,大部分时间都处于闲置状态。

这意味着您可以在任何PC或笔记本电脑上testing您的应用程序,并查看其效果。 如果您在单个用户testing期间没有性能问题,则应该在您的服务器上运行。

一般来说,我会说一个简单的基于Web的CRUD应用程序应该在2 GB的networking服务器上运行。 如果数据库只有100MB,我认为它应该飞。 但是你可能想要检查你是否正确设置my.cnf设置,特别是如果你使用INODB(尽pipe一个小小的100MB的数据库应该很容易适应标准的文件系统caching)。

但我不是共享主机和VPS的粉丝,因为你不知道你得到什么:

  • 并不总是指定的内存,是内存保证(超标)
  • 共享资源意味着您依赖共享服务器上的其他负载
  • 有了VPS,你的主存并不总是用作文件系统caching(再见了!)
  • 一些VPS解决scheme在调度处理能力方面非常落后,共享IO是一个不同的故事(拜拜性能)。
  • 虽然他们称之为SAN,但它可能只是一个NAS(更高的延迟,因此再见)
  • 尽pipeSAN听起来不错,但您不知道总共需要处理的工作量,因此可能会比预期的要慢得多。

因此,如果你想要可靠的性能,你最好去专门的主机国际海事组织。