Я хочу создать веб-приложение со следующей архитектурой:
Существует некоторая функциональность, которая инкапсулирована в модуле «Бизнес-логика» (1).Он использует MongoDB в качестве хранилища данных (5) и внешнего приложения (из командной строки) (4).
Функциональность приложения предоставляется конечным пользователям по двум каналам:
- Само веб-приложение (2) и
- открытый API (3), который позволяет сторонним приложениям и мобильным устройствам получать доступ к функциям бизнес-логики.
Веб-приложениенаписан на Java и основан на платформе Vaadin.В настоящее время он работает на веб-сервере Jetty.
Одно важное требование: веб-приложение должно быть масштабируемым, т. Е. Должно быть возможным увеличение количества пользователей / транзакций, которые оно может обслуживать, путем добавления нового оборудования.
У меня есть следующие вопросы относительно технической реализации этой архитектуры:
Какую технологию можно использовать для реализации части бизнес-логики?Каковы разумные варианты создания сервера приложений SCALABLE?
Какой веб-сервер я могу выбрать для части веб-интерфейса (2), чтобы сделать его масштабируемым?Какие есть варианты?
Расчеты, выполняемые во внешней системе (4), потенциально нагружают процессор.Поэтому я хочу сделать их асинхронным способом, то есть
a) пользователь отправляет запрос на эту операцию (через веб-интерфейс или общедоступный API, 2 и 3 на изображении выше), что
b) запрос помещается в очередь, затем
c) выполняются интенсивные вычисления и
d) в какой-то момент времени ответотправлено пользователю.
Какие существуют технологические возможности для реализации этой очереди (кроме JMS)?
Заранее спасибо
Дмитрий