如何对AWS性能有适当的期望?

我正在将Web应用程序从本地服务器迁移到其他地方,以便最终部署。 我目前正在评估AWS和Rackspace,并且正在尝试使用AWS的网站。 我试图保持两个尽可能相似的环境。 两者都在Fedora 17之上运行一个非常简单的LAMP堆栈,具有相同版本的Apache,PHP等。 我的开发机器是基于具有32GB内存的i7 860芯片的自制软件包; 在AWS上,我通常使用一个m1.small实例,这个实例是用标准的fedora 17实例构build的,它通过一些基准testing被描述为“Intel Xeon E5-2650 0 @ 1.80GHz(1 Core),内存:2048MB”我一直在使用的软件。 我的AWS实例的根设备被设置为EBS卷。

该网站已经在两个盒子上运行,我很高兴地看到,网站性能大致相当,AWS速度稍慢。 不过,我也通过我在这两个网站上从源代码构build的ffmpeg版本,在网站的工作中做了一些video编码。 在这里,我得到了巨大的性能差异,我的开发服务器比AWS快10倍。 我已经运行了一些基准testing,他们也显示出了类似的区别:Phoronix“apache”基准testing显示我的服务器运行的是AWS实例的12倍。

所以,我感到困惑。 我明白AWS实例的“E5-2650”描述仅仅是为了描述,而且我并没有真正拥有E5-2650的机器。 但是,想想这个的正确方法是什么? E5-2650似乎是一个疯狂的快速8核心芯片,通过一些措施是我的i7的两倍, 也许我应该认为我实际上有这样一台机器的1/8(8个中有1个)? 这仍然不能让我达到10倍,但也许这是由于我的开发机器的(更)大量的内存? 或者是我用我的AWS安装搞砸了一些东西 – 我比完整的AWS新手差不多一步,但没有更多,所以搞砸了很有可能。 有任何意见呢?

我有几个选项供您考虑:

选项1:IO争用

video编码性能的差距可能与CPU无关。 相反,看看IO争夺。 在编码时,运行top ,然后在标题中查看%wa的值。 这是服务器不得不等待IO请求的时间百分比。 你想这个数字尽可能低。 在我的系统上,如果我看到这个数字高于5%,那么我就开始进行修改,平均每5分钟一次。

如果你确实看到很高的IO争用,你可以做一些事情。 首先,也许是最简单的,就是转向预定的IOP(PIOP)EBS卷。 有了这些,你可以指定你需要多lessIOP。 你会付出额外的代价,但这是提高IO性能的最简单的方法。

如果由于某种原因您不想这样做,则可以将一堆EBS卷关联到您的服务器,并将它们一起条带化成更大的RAID0卷。 在这种情况下,聚合IO将会大大增加,但是它的风险也更大,因为任何单个EBS卷的失败都会破坏该卷上的数据。

我build议尝试一下PIOPs音量。

选项2:CPU节stream

另一件要考虑的事情是:你正在运行一个m1.small。 在这些较小的实例中,AWS对CPU限制相当积极,因此您可能会考虑将其移到较大的实例,可能是高CPU模型,如c1.medium。 如果AWS节stream您的CPU,您会在top输出中的%st (steal)列中看到较高的值。

选项3:外包

这可能是一个延伸,但为什么不试用AWS的Elastic Transcoder服务? 这将完全消除您的服务器的所有编码负担。