1

我正在计划一个 Web 应用程序,用户可以在其中上传和处理他们的文件。该应用程序的细节与我的问题无关,但我们假设该应用程序将处理 mp3 音频文件。我将把我的应用程序分成两个不同的部分:前端和后端。

前端应用程序将是一个为用户提供 html 页面的常用 Web 应用程序。通常,用户将上传他的文件并填写一个 html 表单以指定他想对文件执行哪些操作。这些文件最初将上传到存储设施,例如 Amazon S3,然后由后端服务器处理。我正在使用 Play 2.0.4 框架来开发前端应用程序,这对我来说非常顺利。我设法实现了用户授权,起草了大部分 UI,还实现了文件上传到 S3。该应用程序目前部署在 Heroku 上,没有任何问题。

对于我的后端服务器,我正在考虑再次使用 Play 2 框架。后端服务器将从前端服务器接收有关创建新作业的通知(http 请求)。作业规范将包括存储中原始用户文件的链接和描述作业的参数。该作业应添加到队列中。现在最重要的部分是将实际的处理工作委托给第三方程序,这肯定是一个已编译的命令行实用程序,例如SoX对于音频处理,由好人使用他们选择的编程语言编写。据我所知,可以从 java 调用外部程序,传递命令行参数并收集结果。处理完成后,后端服务器会将处理后的文件上传回存储,并向前端应用程序发送通知(http请求),前端应用程序将存储处理后文件的链接并稍后显示给用户时间。为了能够使用命令行实用程序,我将使用 Typesafe 堆栈安装将后端应用程序部署到 Amazon EC2 实例。

以下是有关此基本计划的一些问题:

  1. Play 2 是后端的合理选择,还是我应该寻找替代方案?其中一个似乎是 CGI,根据 Wikipedia 的说法,它“是一种标准方法,用于 Web 服务器软件将 Web 内容的生成委托给可执行文件。” 不幸的是,我对此没有任何经验。
  2. 使用 Play 实现作业队列应该没有任何问题吗?
  3. 是否可以在 EC2 上安装命令行实用程序并从 Play 调用它?
  4. 我应该期待在 EC2 上安装 Typesafe 堆栈会出现任何问题吗?这篇文章简要描述了我打算做什么https://www.assembla.com/spaces/bufferine/wiki/Typesafe_stack_on_Amazon_EC2
  5. 假设将来应用程序会增长,我将如何在 EC2 上的多个实例之间分配作业?我应该在我的前端和后端之间创建一个单独的工作平衡应用程序吗?

我将不胜感激任何建议!谢谢!

注意:我在 Play 2 框架中使用 Java api,因为我不熟悉 Scala 语言。

4

1 回答 1

3

您可以考虑使用 Akka 进行处理,它内置在 Play2 中。它将帮助您轻松管理任务,如果与高级功能一起使用,甚至可以节省硬件资源。有一个 Java API 可以满足您的所有需求。并且在后端应用程序中没有必要,如果您需要更多功能,您可以使用两个相同的实例更好地扩展。Play 和 Akka 是无状态的,您只需添加新实例即可扩展。要使其在 EC2 上运行,只需使用play dist命令。

是的,你可以在 EC2 中安装任何你想要的东西,然后从你的应用程序中调用它。

你可能喜欢:

也,但在斯卡拉

于 2013-02-25T03:07:33.273 回答