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

Javascript 在amazon ec2实例中处理I/O请求,javascript,node.js,amazon-web-services,io,amazon-ec2,Javascript,Node.js,Amazon Web Services,Io,Amazon Ec2,在艰难地学习了node、javascript和其他所有东西之后,我终于要发布我的第一个web应用程序了。 因此,我订阅并创建了一个微实例,计划在第一年推出免费的应用程序 我更关心的是隐性成本。我知道,在免费层中,AmazonEC2EBS每月会有100万个I/O请求 问题是,我开始在ec2实例上测试我的应用程序,以检查一切运行是否正常;我已经收到了超过100000个I/O请求。到目前为止,我基本上是唯一一个使用它的人(实例运行37小时) 因此,我非常担心如果我的应用程序获得一些流量会发生什么,我不

在艰难地学习了node、javascript和其他所有东西之后,我终于要发布我的第一个web应用程序了。 因此,我订阅并创建了一个微实例,计划在第一年推出免费的应用程序

我更关心的是隐性成本。我知道,在免费层中,AmazonEC2EBS每月会有100万个I/O请求

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

因此,我非常担心如果我的应用程序获得一些流量会发生什么,我不想在月底收到一笔意外的巨额账单

我发现这非常令人惊讶,因为我主要提供静态内容,我的服务器端代码包括:

  • 正在从客户端接收搜索请求
  • 1对网站的http请求
  • 1对youtube api的https请求
  • 将数据保存到mongoDB
  • 将结果发送到客户端
你对如何大幅降低我的IO有什么建议吗? 到目前为止,我没有使用任何其他亚马逊服务,也许我遗漏了什么

或者也许亚马逊免费层在我的情况下还不够,但那又能有什么用呢?我的意思是,我的应用程序毕竟很简单

如果你能为我提供任何帮助,我真的很高兴


谢谢

微实例和免费层是为了测试他们的产品,而不是让您免费托管站点/web应用程序

你可能要在月底付钱,但我真的怀疑你是否能通过使用其他公司来托管而不花那么多钱。AFAIK AWS确实是价格图表中的最低点


至于IO请求本身,很难给出一般性的建议。我曾经遇到过这样一种情况:我的微实例收到了数量荒谬的IO请求。事实证明,在EC2上测试Chef部署不是一个好主意。

I/O请求必须与读取和写入EBS卷的块有关。您可以通过使用尽可能多的内存缓存来减少这种情况。Micro实例只有大约613 MB的可用内存,因此您可能无法在这里做太多工作。

您没有提到应用程序的总访问量。所以我假设你们的访问量相当少

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

I/O高的可能原因:

  • 你的应用程序使用了大量内存。当你达到极限后,操作系统开始不断地在你的磁盘交换区来回交换内存
  • 这很可能就是问题所在,mongoDB搜索。mongoDB搜索在内部可以是很长很复杂的查询。从其中一个答案来看,此人使用的是mySQL,它在24天内为他带来了10亿个I/O请求。因此,1个数据库搜索可以是多个I/O请求
  • 缓存已禁用,或者您写入/修改了大量文件。你提到你在测试。免费teir不适合开发东西

  • 如果您想知道空闲层过期后会发生什么,您应该阅读。

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

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

    这可能是I/O的主要原因。
    在过去的几天里,请求的数量没有增加多少,因为服务器大部分处于空闲状态

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

    我没有使用Chef,但我一直在使用boto3、Docker和Git在微实例中自动“构建”测试图像。每次检查测试脚本时,都会生成一个新的图像,我没有仔细阅读boto3命令上VolumeType参数的默认设置。每个测试映像都是使用“标准”卷类型构建的,据统计,该卷类型以0.05美元/百万I/O的速率计费。然而,“gp2”通用内存的固定成本为每月每GB 0.10美元,不需要额外的I/O费用

    除了amazon ecs优化的ami的1.3GB外,还有一些精益docker容器总共占用2GB,因此我的存储在免费层使用范围内。因此,一旦我将脚本中blockdevicemappings设置中的volumetype属性修复为“gp2”,我的服务器上就不再存在I/O问题


    在此之前,docker镜像和git回购的不断下载在不到一周的时间内产生了近1000万次I/O。

    我知道有一天我会为此付出代价,但我希望尽可能降低成本,但我不知道我目前在做什么:)谢谢你的回答。问题是,我不搜索数据库!我基本上只是把钱存起来:s。而且我不知道我是如何通过只执行一个http请求来冷使用大量ram的。我开始认真思考的是,我对node和其他工具的第一次更新/安装是否没有在请求中产生启动固定成本。目前的总访问量非常低(只有我和朋友在尝试该应用)。但我希望能尽快处理更多的问题。我想我可以在负载平衡器后面放置几个micro来处理流量,如果我得到的话。你怎么知道你的mysql数据库在你的ec2实例上发出了多少请求?嘿,谢谢你的回答。您是否了解好的资源以了解有关缓存的更多信息?我找过了,