2013-03-31 42 views
7

我目前使用谷歌應用引擎作爲我的移動應用後端。我有一些無法在gae環境中執行的任務(主要是使用opencv進行圖像識別)。我的意圖是保留gae並使用AWS執行這些特定任務。使用亞馬遜網絡服務作爲谷歌應用引擎後端

有沒有簡單的方法將特定的任務從gae傳遞給AWS?例如。一個任務隊列?

回答

1

你有沒有考慮過使用亞馬遜簡單隊列服務? http://aws.amazon.com/sqs/

您應該可以使用標準http clint將項目從gae添加到隊列中。

1

當然。 AppEngine有一個,你可以通過簡單地實現DeferredTask來完成你的任務。在該任務中,您可以將make requests指定給AWS。

2

您既可以將任務從GAE推送到AWS,也可以讓AWS實例從GAE中提取任務。

如果您將任務從GAE推送到AWS,您可以使用URLFetch將數據推送到AWS實例。

如果您希望讓AWS實例從GAE提取任務,則可以讓GAE實例將其任務放入GAE Pull Queue中,然後讓AWS實例使用Task Queue REST API從隊列中租用任務。

無論哪種情況,AWS實例都可以通過簡單的POST請求向GAE servlet報告處理結果,或者通過上面提到的REST API插入任務,這些任務稍後將由您的GAE實例租用。如果您想控制GAE應用程序處理結果的速度,後者可能很有用。

1

聲明:我是AppScale項目的首席開發人員。

您可以使用的一種方式是使用AppScale - 它是運行在Amazon EC2(以及其他雲)上的App Engine API的開源實現。由於它是開源的,你可以改變我們隨附的AppServer來啓用OpenCV。這需要您在AWS中運行您的App Engine應用程序,但您可以獲得創意並擁有與Google一起運行的應用程序的副本,並且只有在需要時纔會向您在AWS中運行的應用程序的版本發送任務隊列請求使用OpenCV庫。

0

您打算在GAE中保留應用程序並使用AWS執行一些無法在GAE中執行的任務似乎對我來說是一個正確的場景。

我想有一些資源共享以及一些想法來回答你的問題的主要部分:

有一個簡單的方法來從GAE具體任務傳遞給AWS?例如。一個任務隊列?

如果您需要GAE和AWS一直執行任務(24/7),那麼您的應用程序肯定會依賴於批處理調度或任務隊列。它們由GAE提供。

但是,如果您可以安排在GAE中完成任務並按間隔(例如每天兩次,每次不到一小時)執行AWG,則只要您可以管理GAE,就可以不必使用它們put the data on Google Cloud Storage (GCS) as public

對於這種情況,你需要設置AWS EC2實例On/Off Schedule,讓實例to run a boot script using cloud-init通過你的域指出,GCS(c.storage.googleapis.com)像這樣來收集數據:

wget -q --read-timeout=0.0 --waitretry=5 --tries=400 \\ 
--background http://your.domain.com/yourfile?q=XXX... 

通過從GCS獲取數據,AWS可以執行這些特定任務。讓它啓動GAE來清理數據並將結果返回給GCS,以準備用作移動應用程序的後端。

以下是一些選項來考慮:

  • 你應該注意到,並非所有的EC2類型都適合開/關計劃。我建議使用EC2-VPC/EBS如果你想建立AWS EC2實例的開/關時間表
  • 您可能沒有必要設置EC2,如果你可以設置AWS Lambda無EC2來執行任務。成本更便宜,每天運行兩次,任務時間通常少於3秒,內存消耗高達128MB,通常成本低於每月$ 0.0004美元
  • 由於在GAE中重新安排您的應用程序並將AWG設置爲執行一些操作任務,它可能會最終提高您的開單率,請嘗試to optimize the instance class in GAE