Web应用程序的背景:
我正在使用 java/spring-mvc/tomcat 来提供我的 Web 服务,并将我的 restful API 暴露给移动客户端。我现在对网络表面上的一切都很满意。问题是我的应用程序的核心有一个非常繁重的计算过程,它调用一个单独的 Java 程序来处理图像并将计算数据返回给 Web 服务。它有时会占用我的大量 EC2 实例内存,或者导致关闭我的 Tomcat7 服务器的异常。
问题:
现在一切都在同一个tomcat7容器下运行,我正在寻找一种解耦这两个的解决方案,以便我可以将它们安装在不同的服务器上,也许可以单独为计算程序找到一个高内存服务器。
有哪些选项可以让我将它们解耦并提高可扩展性和稳定性?
更新:
我可以以编程方式或从命令行调用计算引擎。
更新2:
我根据答案做了一些研究。当我在另一篇文章中阅读有关Apache Camel 到底是什么?,我觉得我可能应该多学习一些关于 EIP 模式的知识。希望这不是矫枉过正。
基于建议的解决方案
通读了EIP概念、camel in action、activemq,终于想出了一个解决方案。它可能不优雅,但它正在工作。建议和意见将不胜感激!我编写了一个基于 apache-camel 的队列路由器,连接到 activemq 代理并在一台服务器上作为独立程序运行。在独立容器中运行的计算引擎和路由器负责处理来自 web 服务器中我的 spring 容器的 jms 请求者。稍后,如果需要进一步的密集计算,我只需要从骆驼配置计算引擎的负载平衡。