2013-02-24 47 views
1

我正在計劃一個Web應用程序,用戶可以在其中上載和處理其文件。該應用程序的細節與我的問題無關,但讓我們假設該應用程序將處理MP3音頻文件。我將分成兩個不同的部分:前端和後端。Play 2框架應用程序的後端服務器

前端應用程序將是一個常用的web應用程序,爲用戶提供html頁面。通常,用戶將上傳他的文件並填寫一個html表單,以指定他希望對文件執行哪些操作。這些文件將首先上傳到Amazon S3等存儲設施,然後由後端服務器處理。我正在使用Play 2.0.4框架開發前端應用程序,這對我來說非常順利。我設法實現了用戶授權,起草了大部分用戶界面,並實現了將文件上傳到S3。該應用程序目前部署在Heroku上,沒有任何問題。

對於我的後端服務器,我正在考慮再次使用Play 2框架。後端服務器將接收來自前端服務器的有關創建新作業的通知(http請求)。作業規範將包括指向存儲器中原始用戶文件的鏈接和描述作業的參數。該作業應添加到隊列中。現在最重要的部分是將實際的處理任務委派給第三方程序,這當然是一個編譯的命令行實用程序,例如用於音頻處理的SoX,由好人使用他們選擇的編程語言編寫。據我所知,可以從java調用外部程序,傳遞命令行參數並收集結果。處理完成後,後端服務器會將處理後的文件上傳回存儲器,並向前端應用程序發送通知(http請求),後者將存儲指向已處理文件的鏈接,並在稍後顯示給用戶時間。爲了能夠使用命令行實用程序,我將使用Typesafe堆棧安裝將後端應用程序部署到Amazon EC2實例。

以下是有關這個基本計劃的一些問題:

  1. 是玩2,合理選擇爲後端,或者我應該考慮的選擇嗎?其中一個似乎是CGI,根據維基百科的說法,「CGI是一種用於將網頁內容的生成委託給可執行文件的網絡服務器軟件的標準方法。」不幸的是,我對此沒有任何經驗。
  2. 使用Play實現作業隊列應該沒有問題嗎?
  3. 是否可以在EC2上安裝命令行工具並從Play中調用它?
  4. 我是否應該在EC2上安裝Typesafe堆棧時遇到任何問題?這篇文章簡要介紹了我打算做的事情https://www.assembla.com/spaces/bufferine/wiki/Typesafe_stack_on_Amazon_EC2
  5. 假設未來應用會增長,我將如何在EC2上的多個實例之間拆分作業?我應該在前端和後端之間創建單獨的作業平衡應用程序嗎?

我將不勝感激任何建議!謝謝!

注:我使用Java API for Play 2框架,因爲我不熟悉Scala語言。

回答

3

您可以考慮Akka進行處理,並且它是在Play2中構建的。它可以幫助您輕鬆管理任務,甚至可以在使用高級功能時節省硬件資源。有一個Java API可以滿足您的所有需求。而且在後端應用程序中不需要,如果您需要更多的功能,您可以使用兩個相同的實例進行更好的擴展。 Play和Akka是無狀態的,你可以添加新的實例來擴展。要使其在EC2上運行,只需使用play dist命令。

是的,你可以安裝任何你想要的EC2,並從你的應用程序調用它。

你可能會喜歡:

還可以,但在斯卡拉

+0

那些斯卡拉鍊接都是偉大的!它看起來非常接近我所需要的。是否有可能在Java中做類似的事情,或者是Scala專有的? – stys 2013-02-25 04:34:59

+0

Play Java中不存在迭代器,但您應該能夠生成與Akka非常接近的內容。你也可以在你的項目中混合使用Java和Scala(一種輕鬆學習的方式)。 – 2013-02-25 11:28:56

相關問題