5

在艰难地学习了 node、javascript 和其他所有东西之后,我终于要发布我的第一个 web 应用程序了。因此,我订阅了Amazon Web Services并创建了一个微型实例,计划在第一年免费提供该应用程序,以便让全世界都可以使用该应用程序。

我更关心的是隐性成本。我知道免费套餐每月有 100 万次 Amazon EC2 EBS 的 I/O 请求。

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

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

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

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

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

或者,在我的情况下,亚马逊的免费套餐可能还不够,但它又能做什么呢?我的意思是,毕竟我的应用程序真的很简单。

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

谢谢!

4

5 回答 5

3

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

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

高I/O的可能原因:

  1. 您的应用程序使用大量 RAM。达到限制后,操作系统开始不断地从磁盘中的交换区域来回交换内存。
  2. 这很可能是问题,mongoDB 搜索。mongoDB 搜索可以是内部复杂的长查询。从这个问题的一个答案来看,这个人正在使用 mySQL,它在 24 天内给他带来了 10 亿个 I/O 请求。所以 1 个数据库搜索可以是许多 I/O 请求。
  3. 缓存被禁用,或者你写/修改了很多文件。你提到你正在测试。Free-teir 只是不适合开发东西。

如果您想知道免费套餐到期后会发生什么,您应该阅读此内容。

于 2013-05-28T18:56:05.813 回答
3

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

我没有使用 Chef,但我一直在使用 boto3、Docker 和 Git 在微实例中自动“构建”测试图像。每次我通过我的测试脚本时,都会构建一个新图像,并且我没有仔细阅读有关 boto3 run_instance命令的 VolumeType 参数的默认设置的细则。每个测试映像都是使用“标准”卷类型构建的,根据当前的 EBS 定价,以 0.05 美元/百万 I/O 的费率计费。而“gp2”通用内存的固定成本为每月每 GB 0.10 美元,且不收取额外的 I/O 费用。

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

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

于 2015-08-12T21:10:06.950 回答
1

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

于 2013-05-28T13:29:06.310 回答
1

微型实例和免费层旨在测试他们的产品,而不是您托管网站/Web 应用程序的免费方式。

您可能需要在月底付款,但我真的怀疑您是否可以通过使用其他公司进行托管来减少支付费用。AFAIK AWS 确实是价格图表的最低点。

至于 IO 请求本身,很难给出笼统的建议。我曾经遇到过我的微实例收到大量 IO 请求的情况。结果证明在 EC2 上测试 Chef 部署是个坏主意。

于 2013-05-28T09:19:38.153 回答
0

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

我没有考虑过的事情是我为使我的应用程序运行而进行的所有操作。我更新了 linux 镜像,安装了 node 和 npm,几个模块,mongodb,....

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

于 2013-05-29T07:22:47.337 回答