Apache Camel和负载均衡

3
我们计划使用Camel来实现一些外部系统(FTP、SOAP-WS、REST-WS、Topics、Queues等)之间的集成。我们可能会使用Spring配置(Camel context XML),由于信息量很大,我们计划将其部署到Tomcat集群中。
我没有找到任何文档说明它是否是可能的配置,以及两个应用程序(假设最初有两个Tomcat)是否会干扰。
更新:
使用Camel三年后,发现在某些情况下它非常适合管理“JMS”和Web服务,负载均衡在这些情况下工作得很好,但在“JMS”的情况下,如果不使用头文件“JMSXGroupID”,我们会丢失消息的顺序。
然而,对于从文件(或FTP、sFTP、FTPS)中消耗的服务,问题仍然存在。目前,我们只激活一个腿来从此源消耗,如果该腿停止运行,不幸的是,第二个腿没有自动启动路由以消耗FTP文件。
1个回答

1
只要您不写入HTTP会话,就不必担心任何事情 - 只需在负载均衡器后面放置一些Tomcat节点。如果您写入HTTP会话,那仍然很简单,但是您可能需要(取决于所选配置)配置会话复制。
我曾在两个类似的系统集成项目上工作,承受着大量请求负载。作为部署环境,我们选择了集群Tomcat实例,这些实例位于Apache服务器后面(通过AJP连接器进行通信),并且BigIP负载均衡器(过了一段时间后,我们切换到了Nginx)。
这两个应用程序都接受HTTP请求。其中一个完全无状态(类似代理),而另一个必须保留一些特定于会话的信息。对于后者,我们必须确保放入会话中的所有对象都可序列化,并配置会话复制。
我们做了很多测试,最终采用了经过实战检验的DeltaManager,没有粘性会话和同步复制模式。这是您需要根据系统架构非常谨慎考虑的事情,但有一个非常好的文档可以帮助。
我们没有使用粘性会话,因为每个请求都需要进行大量处理。根据我们所做的测试和请求的性质,对于我们来说,轮询处理比针对特定客户端会话反复命中同一台服务器更好。此外,由于未启用粘性会话,我们正在使用同步复制以确保在向客户端提供响应之前所有节点都接收到完整的会话(它仅阻塞单个请求,因此不必担心)。我们没有在会话中存储大型对象(只有一些基本信息),因此默认情况下会话被复制到所有节点时我们没有问题。但是,如果您发现它成为瓶颈,可以通过将某些节点子集放入群集中来优化配置。

我认为即使没有传入请求(http),两个节点也必须被建立,以便如果它们“消耗”相同的资源(文件系统、数据库),我们必须实现一些锁定机制,否则两个节点消耗相同的“事件”的风险很大。我想知道Camel内部是否有一个内置机制来考虑这一点。 - рüффп
抱歉 - 我没有在你的问题中注意到ftp选项。对于基于HTTP协议的通信(REST,SOAP),如已经提到的那样,没有问题(使用负载均衡器)。对于挑选文件的作业,我不知道有任何现成的解决方案。这不仅适用于Camel,还适用于Spring Integration或Spring Batch。我认为您需要自己创建生产者,并使用集群实例作为消费者,通过JMS队列将消息传递给它们。 - omnomnom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接