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

学习节点后,JavaScript和所有其余的困难的方式,我终于要释放我的第一个Web应用程序。 所以我订阅了amazon web services,并创build了一个微型实例,计划在第一年的免费层 ,让我的应用程序提供给世界。

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

事情是,我开始testing我的应用程序一个EC2实例来检查一切运行正常; 而且我已经有超过10万个I / O请求 。 我基本上是迄今为止唯一使用它的实例实例运行37小时 )。

所以我很担心如果我的应用程序获得一些stream量会发生什么事情,而且我不想在本月底结束一个巨大的意外账单。

我觉得很奇怪,因为我主要服务于静态的东西,而我的服务器端代码包括:

  • 从客户端接收search请求
  • 1个http请求到一个网站
  • 1 https请求的YouTube的API
  • 将数据保存到mongoDB
  • 将结果发送给客户端

你有什么build议,如何大幅度减less我的IO? 我目前还没有使用其他亚马逊服务,也许我错过了什么?

或者,也许亚马逊免费层在我的情况下不够,但那么它可以足够呢? 我的意思是,我的应用程序毕竟是非常简单的。

我很乐意为您提供任何帮助

谢谢!

您没有提及您的应用的总访问次数。 所以我假设你有相当less的访问。

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

高I ​​/ O的可能原因:

  1. 你的应用程序使用大量的RAM。 达到限制后,操作系统会不断从磁盘交换区开始交换内存。
  2. 这很可能是mongoDBsearch的问题。 mongoDBsearch可以是内部冗长的复杂查询。 从这个问题的答案之一,这个人正在使用mySQL,并在24天内,他造成了10亿I / O请求。 所以1数据库search可以是很多的I / O请求。
  3. caching被禁用,或者你写/修改大量的文件。 你提到你正在testing。 免费teir是不适合开发的东西。

你应该阅读这个 ,以防你想知道自由层到期后会发生什么。

我最近遇到类似的情况,logging非常高的I / O请求率的网站几乎没有stream量。 罪魁祸首似乎是@prajwalkman发现在微型实例上testingChef部署的一个变种。

我没有使用厨师,但我一直在使用boto3,Docker和Git在微型实例内自动“构build”testing图像。 每次我通过我的testing脚本时,都会创build一个新的映像,我不小心在boto3 run_instance命令的VolumeType参数上读取有关默认设置的详细信息 。 每个testing图像都是用“标准”卷types构build的,根据目前的EBS定价 ,按照0.05美元/百万个I / O的速率进行计费 。 而'gp2'通用存储器每个月每GB的平均成本为0.10美元,不需要额外的I / O费用。

随着less数精简docker集装箱总共2GB,在1.3GB的亚马逊ecs优化ami之上,我的存储是在免费层使用。 因此,一旦我将脚本的blockdevicemappings设置中的volumetype属性修改为“gp2”,我的服务器就不再有I / O问题。

在此之前,在不到一周的时间里,不断下载Docker镜像和git repos产生了近10万个I / O。

微型实例和免费层是为了testing他们的产品,而不是一个自由的方式来承载您的网站/ Web应用程序。

您可能需要在月底付钱,但是我真的怀疑您是否可以通过使用其他公司进行托pipe而减less支付。 AFAIK AWS真的是价格图表的底部。

至于IO请求本身,很难给出通用的build议。 我曾经处于一个微观实例嘲讽IO请求荒谬的境地。 原来testing在EC2上的厨师部署是一个坏主意。

I / O请求必须与EBS卷的读写块有关。 你可以通过在内存中使用尽可能多的caching来减less这一点。 微型实例只有大约613 MB的可用内存,所以在这里你可能无法做很多事情。

好吧,所以看起来I / O请求与EBS卷相关,并且caching可能会减less它。

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

这可能是I / O的主要原因。 在过去的几天中,服务器的闲置数量一直没有增长。