Внутренний сервер для приложения Play 2 framework

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

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

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

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

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

Буду признателен за любой совет! Спасибо!

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


person stys    schedule 24.02.2013    source источник


Ответы (1)


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

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

Тебе может понравиться:

тоже, но в scala

person Maxime Dantec    schedule 25.02.2013
comment
Эти scala-ссылки великолепны! Это выглядит очень близко к тому, что мне нужно. Можно ли сделать подобное на Java или это эксклюзивно для Scala? - person stys; 25.02.2013
comment
Итерации недоступны в Play Java, но вы сможете создать что-то похожее с Akka. Вы также можете смешивать Java и Scala в своем проекте (способ мягкого обучения). - person Maxime Dantec; 25.02.2013