Amazon AWS 微型实例性能 - Apache2 和 PHP

Amazon AWS 微型实例性能 - Apache2 和 PHP

我已经开始为一个朋友做一些工作,在 Ubuntu 上运行 Apache2 和 PHP,CPU 已经达到极限。我真正想要的是,对于面向生产/公众的网站,使用微型实例是否是个好主意。我的直觉告诉我,不是,使用标准或高级实例会更好,但由于我才刚刚开始在 AWS 上试用,我只是想看看其他人做了什么。

现在他确实运行了许多这样的负载均衡器,但他不得不终止一些实例,我将考虑设置 Cloudwatch 来自动为他执行这些操作,直到我能更好地了解他的应用程序背后发生的情况。

我知道这是一个相当模糊的问题,我也没有提供有关设置的许多细节,但我仍在努力了解他的网站。

答案1

简短回答:不要低估 t1.micro - 它是一个功能强大的实例,绝对可以运行 PHP 站点 - 但如果您无法使用一个 t1.micro 使其工作,那么请获取更大的实例(而不是多个 t1.micro)。

长答案:t1.micro 实例能够生成动态内容 - 并且可以相当流畅地运行,为多个小型网站提供服务。对于一个经过良好优化的设置(比如说具有缓存功能的 Wordpress),我认为 t1.micro 每月至少应处理 50k 次点击,甚至更多。不过,关键思想之一是,一切都经过了良好的优化 - 默认的 Apache 安装将相当快地关闭 t1.micro - 因为每个请求都会产生一个新进程 - 并产生所有相关开销。

此外,t1.micro 默认没有交换空间(设置 1GB EBS 卷作为交换空间可能会有所帮助 - 更多的是作为一种安全措施而不是实际使用它。如果你发现它被大量使用,那么就需要进行一些改变。

如果您要运行多个实例,我建议不要使用多个 t1.micro 实例。大型实例(内存、输入/输出和 CPU)的性价比要高得多。关于 t1.micro 的另一个要点是,虽然您可以“爆发”额外的 CPU,但周期也可能被“窃取”。如果您要使用 t1.micro 路线,一定要使用 32 位实例 - 64 位寄存器的额外开销只会导致实例更容易耗尽内存,而不会带来任何明显的性能提升。

如果可能的话,我建议使用 php-fpm 而不是 mod_php - 虽然速度稍慢,但它能够承受更大的流量,同时实例负载较小。此外,如果可能的话,请卸载静态内容的服务。对于后者,您可以使用 CDN,例如 Cloudfront(甚至使用 S3)- 这样做的理念是这些请求不会消耗实例的带宽、磁盘 i/o 或处理能力(或内存)。或者,您可以使用轻量级前端服务器(例如 nginx)来处理静态内容,然后将动态请求代理回 apache(如果您不能完全切换到使用该前端服务器)- 这确实增加了设置的复杂性 - 但特别是如果您的页面被缓存(即每当页面更改时都会生成静态版本),性能提升会非常可观。使用前端服务器缓存动态内容也是明智的(持续时间取决于网站的受欢迎程度)- 以避免不必要地处理动态请求。

最后一条建议——可能不可行——考虑使用亚马逊的 Linux 作为操作系统,而不是 Ubuntu。我发现它在 t1.micro 上非常轻量且高效——它附带最少的安装包,占用空间非常小。

在 t1.micro 上运行动态网站当然是可行的 - 我已经在单个 t1.micro 上运行了几个小型网站(Wordpress/Drupal/Joomla) - 都使用 nginx/apache/php-fcgi 和 varnish/nginx/php-fpm - 包括邮件服务器(postfix)、imap(dovecot)、数据库(mysql)和 ftp 服务器(pure-ftp/vsftp) - 性能不错(Wordpress 网站加载时间为 1-2 秒),平均负载低(通常低于 0.1,每 15 秒请求一次),使用内存约 150-200MB)。这不是我的性能选择,但对于只需要可靠在线且不期望太多流量的网站来说,这是成本最低的解决方案。

我想说 t1.micro 是一个锻炼您优化技能的非常好的平台 - 它可以让您看到您可以从最低限度中获得多少收益,以及哪些优化的成本超过其价值。但是,如果您的站点对于单个 t1.micro 来说太大,请使用更大的实例而不是额外的 t1.micro 实例(除非您的特定目的是故障转移 - 但很有可能在那个阶段您将使用更大的实例。)。不要对 t1.micro 实例进行负载平衡 - 这种方法几乎没有什么好处 - 更大的实例会为您提供更好的服务。但是,您肯定想找出这些实例死机的原因 - 我敢打赌这是一个内存问题,而不是 CPU 问题。您肯定想尝试启动您站点的副本并在其上运行ab(或seige等),看看服务器可以承受什么 - 以及它是否是应用程序的设计(您可能无法更改)或服务器的设置。

(除非您使用现货实例,否则您可以相当轻松地升级实例类型 - 只需停止(而不是终止),然后在重新启动之前使用 ec2-modify-instance-attribute 更改类型)。

答案2

t1.micro 实例适用于面向公众的网站,只要您的流量不超过 t1.micro 实例可以处理的流量即可。(前面那句话并没有多说什么。)

听起来您获得的流量超过了 t1.micro 以应用程序当前编写方式可以处理的流量,因此您应该升级到更大的实例类型。

我认为负载平衡 t1.micro 毫无意义。我认为负载平衡的最小值应该是 m1.small,即便如此,您最好只运行 c1.medium,因为它比获得等效 CPU 所需的 m1.smalls 数量更便宜。

相关内容