2013-02-24 59 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

相关问题