Предыстория веб-приложения:
Я использую java/spring-mvc/tomcat для предоставления своего веб-сервиса, а также для предоставления моего спокойного API мобильным клиентам. Я доволен всем на веб-поверхности прямо сейчас. Проблема в том, что в основе моего приложения лежит очень тяжелый вычислительный процесс, который вызывает отдельную программу на Java для обработки изображений и возврата вычисленных данных обратно в веб-службу. Иногда он занимает много памяти моего экземпляра EC2 или вызывает исключение, которое отключает мой сервер Tomcat7.
Вопрос:
Прямо сейчас все работает в одном и том же контейнере tomcat7, и я ищу решение, чтобы разделить эти два, чтобы я мог установить их на другом сервере, возможно, найти сервер с большим объемом памяти только для вычислительной программы.
Какие существуют варианты, которые позволяют мне разделить их и улучшить масштабируемость и стабильность?
Обновлять:
Я могу вызывать вычислительный движок программно или из командной строки.
Обновление2:
Я провел некоторые исследования, основанные на ответе. Когда я прочитал в другом сообщении о Что такое Apache Camel?, я почувствовал, что должен вероятно, узнать немного больше о шаблонах EIP. Надеюсь, это не перебор.
Решение на основе предложения
Прочитав концепцию EIP, верблюд в действии, activemq, я, наконец, нашел решение. Это может быть не элегантно, но это работает. Предложения и комментарии будут оценены! Я написал маршрутизатор очереди на основе apache-camel, подключившись к брокеру activemq и работая как отдельная программа на одном сервере. Вычислительный движок работает в автономном контейнере, а маршрутизатор отвечает за обработку запросчика jms из моего контейнера spring на веб-сервере. Позже мне просто нужно настроить баланс нагрузки для вычислительного движка от верблюда, если потребуются дальнейшие интенсивные вычисления.