我和我的团队正在创建一个可以使用地图的手机游戏。我们将 json 信息存储在多个文件中——每个文件代表地图上的一个图块。为了渲染地图,我们下载文件并处理它们以创建街道、建筑物等。我想选择将图块文件下载到移动设备的最佳方式,但我无法在移动设备上进行此测试所以我使用了浏览器和节点 js 脚本。
我使用了一个 100KB 的 json 文件。将其上传到 S3 存储桶和 EC2 存储上。我编写了一些节点脚本来连接到 S3 或 EC2:
- 从 Node js 本地脚本到 S3 存储桶 (bucket.zone.amazonaws.com/file) 的 GET 请求 - ~650ms
- 从节点 js 本地脚本到节点 js 服务器的 GET 请求在连接到 S3 的 EC2 实例上运行 - ~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 之间
- 通过连接到 S3 存储桶(在 EC2 上运行)(域:端口)的 Node js 服务器 - ~1014ms,值在 680ms 和 1700ms 之间
- 通过从本地存储(在 EC2 上运行)(域:端口)加载文件的 Node js 服务器 - ~ 965ms,值在 600ms 和 1700ms 之间
我的问题是为什么从浏览器访问文件和通过 Node 脚本访问文件有这么大的区别?
为了记录时间,我提出每个请求 10 次,我做了平均时间。EC2 实例是微型的,在爱尔兰。桶也位于爱尔兰。