2013-02-24 2 views
1

Я планирую веб-приложение, где пользователи смогут загружать и обрабатывать свои файлы. Специфика приложения не имеет отношения к моим вопросам, но позволяет предположить, что приложение будет обрабатывать mp3-файлы. Я собираюсь разделить мое приложение на две отдельные части: front-end и back-end.Back-end сервер для приложения для платформы Play 2

Внешнее приложение будет обычным веб-приложением, обслуживающим html-страницы для пользователей. Обычно пользователь загружает свой файл и заполняет html-форму, чтобы указать, какие операции он будет выполнять в файле. Файлы будут сначала загружены в хранилище, например Amazon S3, а затем обработаны внутренним сервером. Я использую платформу Play 2.0.4 для разработки интерфейсного приложения, и это очень хорошо для меня. Мне удалось реализовать авторизацию пользователя, разработал большую часть пользовательского интерфейса, а также осуществил загрузку файлов на S3. Приложение в настоящее время развернуто на Heroku без проблем.

Для моего внутреннего сервера я рассмотрю возможность использования рамки Play 2 еще раз. Внутренний сервер получит уведомление (http-запрос) от внешнего сервера о создании нового задания. Спецификация задания будет включать ссылку на исходный файл пользователя в хранилище и аргументы, описывающие работу. Задание должно быть добавлено в очередь. Теперь самая важная часть - делегировать фактическое задание на обработку сторонней программе, которая, безусловно, будет скомпилированной утилитой командной строки, например SoX для случая обработки звука, написанной хорошими людьми, используя язык программирования по своему выбору , Насколько я знаю, можно вызвать внешнюю программу из java, передать аргументы командной строки и собрать результат. После завершения обработки серверный сервер загрузит обработанный файл обратно в хранилище и отправит уведомление (http-запрос) в внешнее приложение, которое будет хранить ссылку на обработанный файл и отобразить ее пользователю позже время. Чтобы использовать утилиту командной строки, я собираюсь развернуть back-end приложение на экземпляр Amazon EC2 с установкой стека классов.

Вот некоторые вопросы об этом принципиальном плане:

  1. это играть 2 разумный выбор для заднего конца, или я должен смотреть на альтернативы? Один из них, похоже, является CGI, который согласно Wikipedia «является стандартным методом для программного обеспечения веб-сервера для делегирования генерации веб-контента в исполняемые файлы». К сожалению, у меня нет опыта в этом.
  2. Не должно быть проблем с реализацией очереди заданий с Play?
  3. Возможно ли установить служебную программу командной строки на EC2 и вызвать ее из Play?
  4. Должен ли я ожидать каких-либо проблем с установкой стека Safeafe на EC2? Этот пост кратко описывает, что я планирую делать https://www.assembla.com/spaces/bufferine/wiki/Typesafe_stack_on_Amazon_EC2
  5. Предполагая, что в будущем приложение будет расти, как бы я разделил задания среди нескольких экземпляров на EC2? Должен ли я создать отдельное приложение для балансировки задания между моим интерфейсом и внутренним концом?

Я был бы признателен за любые советы! Благодаря!

Примечание: Я использую Java api для платформы Play 2, так как я не знаком с языком Scala.

ответ

3

Вы можете рассмотреть Akka для обработки, и он построен в Play2. Это поможет вам легко управлять задачами и даже экономить аппаратные ресурсы при использовании с расширенными функциями. Существует Java API, который должен охватывать все ваши потребности. И это не обязательно в базовом APP, если вам нужно больше энергии, вы можете масштабироваться еще лучше с двумя одинаковыми обстоятельствами. Play и Akka являются апатридами, вы можете просто добавить новые экземпляры для масштабирования. Чтобы запустить его на EC2, просто используйте команду play dist.

И да, вы можете установить все, что хотите, в EC2 и вызвать его из своего приложения.

Вы можете:

также, но в Скале

+0

Эти ссылки scala великолепны! Он очень близок к тому, что мне нужно. Возможно ли подобное делать на Java или это эксклюзивно для Scala? – stys

+0

Iteratees недоступны в Play Java, но вы должны иметь возможность создавать что-то совсем близко с Akka. Вы также можете смешивать Java и Scala в своем проекте (способ учиться мягко). –