我正在计划一个 Web 应用程序,用户可以在其中上传和处理他们的文件。该应用程序的细节与我的问题无关,但我们假设该应用程序将处理 mp3 音频文件。我将把我的应用程序分成两个不同的部分:前端和后端。
前端应用程序将是一个为用户提供 html 页面的常用 Web 应用程序。通常,用户将上传他的文件并填写一个 html 表单以指定他想对文件执行哪些操作。这些文件最初将上传到存储设施,例如 Amazon S3,然后由后端服务器处理。我正在使用 Play 2.0.4 框架来开发前端应用程序,这对我来说非常顺利。我设法实现了用户授权,起草了大部分 UI,还实现了文件上传到 S3。该应用程序目前部署在 Heroku 上,没有任何问题。
对于我的后端服务器,我正在考虑再次使用 Play 2 框架。后端服务器将从前端服务器接收有关创建新作业的通知(http 请求)。作业规范将包括存储中原始用户文件的链接和描述作业的参数。该作业应添加到队列中。现在最重要的部分是将实际的处理工作委托给第三方程序,这肯定是一个已编译的命令行实用程序,例如SoX对于音频处理,由好人使用他们选择的编程语言编写。据我所知,可以从 java 调用外部程序,传递命令行参数并收集结果。处理完成后,后端服务器会将处理后的文件上传回存储,并向前端应用程序发送通知(http请求),前端应用程序将存储处理后文件的链接并稍后显示给用户时间。为了能够使用命令行实用程序,我将使用 Typesafe 堆栈安装将后端应用程序部署到 Amazon EC2 实例。
以下是有关此基本计划的一些问题:
- Play 2 是后端的合理选择,还是我应该寻找替代方案?其中一个似乎是 CGI,根据 Wikipedia 的说法,它“是一种标准方法,用于 Web 服务器软件将 Web 内容的生成委托给可执行文件。” 不幸的是,我对此没有任何经验。
- 使用 Play 实现作业队列应该没有任何问题吗?
- 是否可以在 EC2 上安装命令行实用程序并从 Play 调用它?
- 我应该期待在 EC2 上安装 Typesafe 堆栈会出现任何问题吗?这篇文章简要描述了我打算做什么https://www.assembla.com/spaces/bufferine/wiki/Typesafe_stack_on_Amazon_EC2
- 假设将来应用程序会增长,我将如何在 EC2 上的多个实例之间分配作业?我应该在我的前端和后端之间创建一个单独的工作平衡应用程序吗?
我将不胜感激任何建议!谢谢!
注意:我在 Play 2 框架中使用 Java api,因为我不熟悉 Scala 语言。