Я планирую веб-приложение, в котором пользователи смогут загружать и обрабатывать свои файлы. Специфика приложения не имеет отношения к моим вопросам, но давайте предположим, что приложение будет работать с аудиофайлами в формате mp3. Я собираюсь разделить свое приложение на две отдельные части: интерфейсную часть и серверную часть.
Интерфейсное приложение будет обычным веб-приложением, обслуживающим html-страницы для пользователей. Обычно пользователь загружает свой файл и заполняет html-форму, чтобы указать, какие операции он хотел бы выполнить с файлом. Файлы сначала будут загружены в хранилище, такое как Amazon S3, а затем обработаны внутренним сервером. Я использую платформу Play 2.0.4 для разработки внешнего интерфейса, и у меня все идет очень хорошо. Мне удалось реализовать авторизацию пользователей, набросать большую часть пользовательского интерфейса, а также реализовать загрузку файлов на S3. В настоящее время приложение развернуто на Heroku без каких-либо проблем.
Для моего внутреннего сервера я подумываю снова использовать платформу Play 2. Внутренний сервер получит уведомление (http-запрос) от внешнего сервера о создании нового задания. Спецификация задания будет включать ссылку на исходный пользовательский файл в хранилище и аргументы, описывающие задание. Задание должно быть добавлено в очередь. Теперь самая важная часть — делегировать фактическую работу по обработке сторонней программе, которая, скорее всего, будет скомпилированной утилитой командной строки, такой как SoX для обработки звука, написанный хорошими людьми с использованием языка программирования по их выбору. Насколько я знаю, из java можно вызывать внешнюю программу, передавать аргументы командной строки и собирать результат. После завершения обработки внутренний сервер загрузит обработанный файл обратно в хранилище и отправит уведомление (http-запрос) внешнему приложению, которое сохранит ссылку на обработанный файл и через некоторое время отобразит его пользователю. время. Чтобы иметь возможность использовать утилиту командной строки, я собираюсь развернуть внутреннее приложение на инстансе Amazon EC2 с установкой стека Typesafe.
Вот несколько вопросов об этом базовом плане:
- Является ли Play 2 разумным выбором для серверной части, или мне стоит поискать альтернативы? Одним из них, по-видимому, является CGI, который, согласно Википедии, «является стандартным методом программного обеспечения веб-сервера для делегирования генерации веб-контента исполняемым файлам». К сожалению, у меня нет никакого опыта в этом.
- Не должно быть проблем с реализацией очереди заданий в Play?
- Можно ли установить утилиту командной строки на EC2 и вызвать ее из Play?
- Стоит ли ожидать каких-либо проблем при установке стека Typesafe на EC2? Этот пост кратко описывает, что я планирую сделать https://www.assembla.com/spaces/bufferine/wiki/Typesafe_stack_on_Amazon_EC2
- Предполагая, что в будущем приложение будет расти, как мне распределить задания между несколькими экземплярами на EC2? Должен ли я создать отдельное приложение для балансировки работы между моим интерфейсом и сервером?
Буду признателен за любой совет! Спасибо!
Примечание. Я использую Java API для фреймворка Play 2, так как не знаком с языком Scala.