如何优化网站的性能WordPress的,亚马逊EC2的Apache和RDS的MySQL

我有6个WordPress网站运行在单个EC2实例上。 所有的网站都连接到同一RDS实例中的数据库。

今天早些时候,最大的网站stream量达到峰值,RDS实例进入瓶颈 – 一小时内CPU利用率为100%。 它影响了我所有的网站,因为它们都是永久加载的。

为了防止这个问题再次发生,下面哪一个最重要,以便我首先投入时间和精力?
(以后我会努力,现在只需要优先考虑)

  • 改善所有网站的caching
  • 微调数据库服务器
  • 微调我的Apache服务器

我的网站会对用户体验产生什么影响? 一些快速search显示,我应该限制并发连接数到我的networking服务器,但不会阻止用户访问我的网站?

更多背景:

  • 我最大的网站每月访问量为14万,页面浏览量为66万。 其他5个网站加起来应该比这less得多。
  • 我正在使用一个大的EC2实例作为Web服务器
  • 我正在使用一个中等RDS实例作为数据库服务器

我已经做了什么:

  • 使用W3总caching插件为大多数网站caching,尤其是最大的(我几乎可以做任何其他的caching方面,我可以做的最大的网站)

我是在浪费资源,还是根本没有足够的资源用于我的网站 – 或者说,我怎样才能自己回答这个问题呢?

在单个EC2实例上运行所有内容都会影响到基于云的部署的整个过程:自动调整和自我修复的能力。 正如我以前写的,自动缩放是AWS的核心和灵魂,如果你不使用它,你最好使用传统的协同服务器或VPS。 这将更便宜,更持久。

我刚刚完成了与您的需求非常相似的AWS部署。 客户端运行三个相当高容量的WordPress站点(比你的stream量多得多)。 configuration看起来像这样:

  • VPC中的所有内容都有助于提高安全性。 VPC包含跨两个可用区(AZ)的六个子网
  • 跨越两个子网/ AZ的弹性负载均衡器
  • 自动缩放(AS)组的m1.small实例充当应用程序层。 有两个应用服务器的最小数量,最多10个,这取决于stream量负载。 在正常运行时,它只运行两个,平均CPU利用率始终低于15%。 AS组一次一个地扩大和缩小两个实例,每个AZ实现一个实例。
  • 每个应用程序实例运行Nginx + PHP-FPM + APC。 在这个堆栈的前面,我安装了Varnish来提供额外的caching。
  • 两个私有子网中的小型多可用RDS实例。 即使在极高的stream量负载下,由于大量的应用程序caching,也几乎没有触及。
  • 静态资产由Cloudfront提供,以进一步降低应用程序服务器上的负载。
  • 文件存储在一对镜像Gluster节点,每个在一个单独的AZ为HA目的。 浮动的弹性IP地址被分配给其中一个节点,这使您可以通过SSH或SFTP访问实际的Wordpress文件。 节点是它自己的AS组的一部分,所以如果文件服务器死了,它将被自动杀死并重新创build。 在启动时,它会重新连接包含Wordpress文件的卷。 自动备份通过一系列每小时的卷快照进行。
  • t1.micro实例充当专用子网中的实例的NAT网关。

这种devise没有任何单一的故障点*,如果一个实例死亡,将自动自愈,并且足够聪明,可根据资源需求进行放大或缩小。 总费用:约$ 200 /月。 如果您select购买1年保留实例。

我正在把这个configuration放到一个CloudFormation模板和cloud-init / Python脚本的组合中,这些脚本在启动时自动从Github提取。 基本上它会允许任何人按下一个button,等待大约一个小时,然后回来,整个环境将等待。 我希望在今年年底前完成。 如果您有兴趣获得该模板的副本,请在我的个人资料中列出的网站上发送电子邮件给“jamie”。

* NAT实例是一个SPoF,但这主要是VPC的devise限制。 这是一个非关键的组件,可能会失败,不会影响应用程序。