在学习了节点,javascript和其他所有其他方法之后,我终于要发布我的第一个网络应用了。 所以我订阅了Amazon Web Services并创建了一个微实例,计划在第一年免费套餐,以便让我向全世界提供该应用。
我更关心隐藏成本。我知道,免费套餐每月为Amazon EC2 EBS提供100万次I / O请求。
事情是,我开始测试我的应用程序ec2实例,检查一切运行正常;我已经超过10万个I / O请求。到目前为止,我基本上是唯一一个使用它的人( 37小时,实例运行)。
所以我非常害怕如果我的应用程序获得一些流量会发生什么,我不想在月底收到巨大的意外账单。
我觉得这很令人惊讶,因为我主要提供静态内容,而我的服务器端代码包括:
您对如何大幅减少IO有任何建议吗? 到目前为止我没有使用任何其他亚马逊服务,也许我错过了什么?
或者在我的情况下,亚马逊的免费等级还不够,但那么它能够做到什么呢?我的意思是,我的应用程序毕竟非常简单。
我很高兴能为你提供任何帮助
谢谢!
答案 0 :(得分:3)
您没有提及对您的应用的总访问次数。所以我假设你的访问量相对较少。
什么是I / O请求? 单个I / O请求是到达EBS卷的读/写指令。谨防!大读/写的执行被分成多个较小的块,即块的块大小。
高I / O的可能原因:
答案 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的主要原因。 在最近几天,服务器大部分处于空闲状态时,请求的数量并没有增长。