从S3和EC2存储下载速度,从节点js和浏览器请求

时间:2013-06-18 15:42:01

标签: performance node.js amazon-web-services amazon-s3 amazon-ec2

我和我的团队正在创建一个可以使用地图的手机游戏。我们将json信息存储在多个文件中 - 每个文件代表地图上的一个图块。为了渲染地图,我们下载文件并处理它们以创建街道,建筑物等。 我想选择将磁贴文件下载到移动设备的最佳方式,但我没有可能在移动设备上进行此测试,因此我使用了浏览器和节点js脚本。

我使用了100KB的json文件。将其上载到S3存储桶和EC2存储上。我写了一些节点脚本来连接S3或EC2:

  • 从Node js本地脚本获取请求到S3存储桶(bucket.zone.amazonaws.com/file) - ~650ms
  • 从Node js本地脚本到Node js服务器的GET请求在EC2实例上运行,该实例连接到S3 - ~1032ms
  • 从Node js本地脚本到Node js服务器的GET请求在EC2实例上运行,该实例从本地存储加载文件 - 〜833ms

最后两个值之间的差异实际上是EC2实例从存储桶访问文件所添加的时间。从EC2向S3发出请求的原因是我知道AWS服务之间的连接非常快。

我做的另一项测试来自浏览器(Firefox):

  • 直接访问S3存储桶(bucket.zone.amazonaws.com/file) - 〜624ms,值介于400ms和1000ms之间
  • 通过EC2上的Apache服务器(域/文件) - 〜875ms,值介于649ms和1090ms之间
  • 通过节点js服务器连接到S3存储桶(在EC2上运行)(域:端口) - ~1014ms,值为680ms到1700ms
  • 通过Node js服务器从本地存储加载文件(在EC2上运行)(域:端口) - 〜965ms,值为600ms到1700ms

我的问题是为什么从浏览器访问文件和通过Node脚本访问文件之间存在如此大的差异?

为了记录时间,我提出了10次请求,我做了平均次数。 在爱尔兰,EC2实例是微观的。水桶也位于爱尔兰。

2 个答案:

答案 0 :(得分:0)

我提出了一些可能有助于你描述的线索。

  1. 缓存,当您使用脚本获取json数据时。缓存机制不起作用。在浏览器中,它将遵循缓存标头并可以从缓存中获取,从而降低速度。

  2. GZip标头,我认为你不会启用gzip来压缩nodejs服务器中的数据。我不确定你是否在Apache上配置了这样的功能。想象一下100k的json文件,如果它被压缩,传输时间肯定会减少。

  3. 由于

答案 1 :(得分:0)

所以我认为这个问题没有多大意义,因为在刷新页面之后,时间更加平稳。