处理amazon ec2实例中的I / O请求

时间:2013-05-28 07:26:39

标签: javascript node.js amazon-web-services io amazon-ec2

在学习了节点,javascript和其他所有其他方法之后,我终于要发布我的第一个网络应用了。 所以我订阅了Amazon Web Services并创建了一个微实例,计划在第一年免费套餐,以便让我向全世界提供该应用。

我更关心隐藏成本。我知道,免费套餐每月为Amazon EC2 EBS提供100万次I / O请求。

事情是,我开始测试我的应用程序ec2实例,检查一切运行正常;我已经超过10万个I / O请求。到目前为止,我基本上是唯一一个使用它的人( 37小时,实例运行)。

所以我非常害怕如果我的应用程序获得一些流量会发生什么,我不想在月底收到巨大的意外账单。

我觉得这很令人惊讶,因为我主要提供静态内容,而我的服务器端代码包括:

  • 从客户端接收搜索请求
  • 1个网站的http请求
  • 向youtube api发送1 https请求
  • 将数据保存到mongoDB
  • 将结果发送给客户

您对如何大幅减少IO有任何建议吗? 到目前为止我没有使用任何其他亚马逊服务,也许我错过了什么?

或者在我的情况下,亚马逊的免费等级还不够,但那么它能够做到什么呢?我的意思是,我的应用程序毕竟非常简单。

我很高兴能为你提供任何帮助

谢谢!

5 个答案:

答案 0 :(得分:3)

您没有提及对您的应用的总访问次数。所以我假设你的访问量相对较少。

什么是I / O请求? 单个I / O请求是到达EBS卷的读/写指令。谨防!大读/写的执行被分成多个较小的块,即块的块大小。

高I / O的可能原因:

  1. 您的应用使用了大量内存。达到限制后,操作系统开始不断地从磁盘中的交换区域来回交换内存。
  2. 这很可能是问题,mongoDB搜索。 mongoDB搜索可以是内部的长复杂查询。从这个question的答案之一,这个人正在使用mySQL,它在24天内导致他10亿次I / O请求。因此,1个数据库搜索可以是许多I / O请求。
  3. 禁用缓存,或者编写/修改大量文件。你提到你正在测试。 Free-teir不适合开发。
  4. 如果您想知道免费套餐过期后会发生什么,请阅读this

答案 1 :(得分:3)

我最近遇到了类似的情况,记录了一个网站的I / O请求率非常高,几乎没有流量。罪魁祸首似乎是@prajwalkman发现在微实例上测试Chef部署的变体。

我没有使用Chef,但我一直在使用boto3,Docker和Git在微实例中自动“构建”测试图像。每次我浏览测试脚本时,都会构建一个新映像,并且我不小心阅读boto3 run_instance命令上VolumeType参数的默认设置的精细打印。每个测试图像都是使用“标准”卷类型构建的,根据current EBS pricing,它以0.05美元/百万的I / O速率开票。然而,'gp2'通用内存的固定成本为每GB每月0.10美元,I / O不收取额外费用。

在少量精简码头集装箱占用2GB的情况下,除了amazon-ecs-optimized-ami的1.3GB之外,我的存储空间完全在免费层使用范围内。因此,一旦我将脚本中的blockdevicemappings设置中的volumetype属性修改为'gp2',我的服务器上就不再出现I / O问题了。

在此之前,不断下载docker图像和git repos会在不到一周的时间内产生近10万个I / O.

答案 2 :(得分:1)

微实例和免费套餐用于测试他们的产品,而不是免费的方式来托管您的网站/网络应用程序。

你可能不得不在月底付钱,但我真的怀疑你是否可以通过使用其他公司来支付更少的费用。 AFAIK AWS确实是价格图表的最低点。

至于IO请求本身,很难提供通用建议。我曾经处于这样一种情况,即我的微实例遇到了大量的IO请求。结果测试EC2上的Chef部署是一个坏主意。

答案 3 :(得分:1)

I / O请求与读取和写入EBS卷的块有关。您可以通过尽可能多地使用内存缓存来减少这种情况。微实例只有大约613 MB的可用内存,所以你可能无法在这里做很多事情。

答案 4 :(得分:0)

好的,所以看起来I / O请求与EBS卷有关,而缓存可能会减少它。

我没有考虑过的是我为让我的应用程序运行所做的所有操作。 我更新了linux映像,已安装的节点和npm,几个模块,mongodb,....

这可能是I / O的主要原因。 在最近几天,服务器大部分处于空闲状态时,请求的数量并没有增长。