有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中,将web服务与其他后端繁重的计算服务分离

web应用程序的背景:

我正在使用java/spring mvc/tomcat来提供我的web服务,并向移动客户端公开我的restful API。我现在对网络上的一切都很满意。问题是,我的应用程序的核心是一个非常繁重的计算过程,它调用一个单独的Java程序来处理图像,并将计算出的数据返回给web服务。 它有时会占用大量EC2实例内存,或导致异常关闭Tomcat7服务器

问题:

现在所有的东西都在同一个tomcat7容器下运行,我正在寻找一个解决方案,将这两个容器解耦,这样我就可以在不同的服务器上安装它们,也许可以单独为计算程序找到一个高内存服务器

有哪些选项可以让我将它们解耦并提高可伸缩性和稳定性

更新:

我可以通过编程或从命令行调用计算引擎

更新2:

我根据答案做了一些研究。当我读到另一篇关于What exactly is Apache Camel?的帖子时,我觉得我应该对EIP模式有更多的了解。希望这不是矫枉过正

基于建议的解决方案

在阅读了EIP概念、camel in action、activemq之后,我终于想出了一个解决方案。它可能不优雅,但它起作用了。建议和意见将不胜感激! 我基于apache camel编写了一个队列路由器,连接到activemq代理,并在一台服务器上作为独立程序运行。计算引擎在独立容器中运行,路由器负责处理web服务器中spring容器中的jms请求程序。稍后,如果需要进一步的密集计算,我只需要从camel为计算引擎配置负载平衡


共 (1) 个答案

  1. # 1 楼答案

    如果我理解正确的话,您似乎需要一个负载平衡器

    1. 使用负载平衡器路由到webservice/compute引擎的多个实例之一。您可以使用esb、路由引擎、集群、主从、分布式缓存等来实现这一点,其中大多数都是相互关联的。 您还可以根据负载在EC2上实时启动其他节点

    2. 否则,如果任务可能会中断,则将其委托给多个节点/服务。你需要一些协调机制

    有一些开源解决方案可以解决上述问题