2012-02-19 138 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