2012-02-19 132 views
11

我想为iPhone应用程序构建Web服务。至于文件上传,我想知道标准程序和最具成本效益的解决方案。据我所看到的,有两种可能性:直接上传到S3或通过EC2?

  1. 客户端> S3:我从iPhone到S3直接上传文件(与AWS SDK
  2. 客户端> EC2> S3:我上传文件到我的服务器(运行Django的EC2),然后服务器将文件上传到S3(详见post

我不打算以任何方式修改文件。我只需要告诉数据库添加一个条目。所以如果我要上传一个文件Client> S3,我需要连接到服务器来完成数据库输入。

It seems就好像EC2> S3只要两者在相同的区域中一样不花费任何东西。

在开始实施文件上传之前,我很想听听优点和缺点。

回答

15

我肯定会通过S3来实现可扩展性。诚然,S3和EC2之间的数据是快速和便宜的,但上传很长时间,不像普通的Web请求。因此,您可能会使EC2实例上的NIC饱和。

相反,将GUID返回给客户端,使用设置为GUID的密钥和适当的Content-Type集将密钥上载到S3。然后在上载完成后调用Web服务/ Ajax端点以使用GUID键创建数据库记录。

+0

非常感谢。所以如果我正确地理解了你,通过EC2做这件事没有任何真正的优势。你会不会说这感觉有点复杂:(1)有一个GUID返回给客户端,(2)上传客户端> S3,(3)连接到EC2进行数据库输入。另外,如果图像可以真正上传,我需要在第一步之前检查,因此第0步将连接到EC2并检查文件是否已经存在。 – 2012-02-19 14:53:19

+1

是的,它增加了一些复杂性,但我认为从未来验证您的应用程序和确保可伸缩性至关重要的角度来看。否则,您将使用EC2作为S3的代理。 S3是一款无限扩展的存储服务 - 为什么要在其前面设置瓶颈? – reach4thelasers 2012-02-19 15:04:29

+0

谢谢!所以只是为了澄清:如果我直接上传到S3,我不会有上传块的问题,并且不需要担心我的EC2实例的内存,对吧?这有点像S3是另一个例子,只是它是一个大硬盘,除了存储东西和接受上传以外没有别的东西,对吧?所以我通过一个EC2实例并浪费我的EC2资源上传东西,而它可以做其他事情(例如数据库管理等)确实是不明智的。 – 2012-02-20 16:18:56