Ben*_*Day 11 activemq-classic cluster-computing apache-camel
我正在尝试确定用于集群化ServiceMix 3.3.1/Camel 2.1/AMQ 5.3应用程序的选项.我正在执行高容量消息处理,我需要集群以实现高可用性和水平可伸缩性.
这基本上就是我的应用程序所做的... HTTP-> QUEUE-> PROCESS-> DATABASE-> TOPIC
从( "码头:http://0.0.0.0/inbound ").要(" ActiveMQ的:inboundQueue");
from("activemq:inboundQueue?maxConcurrentConsumers = 50").process(decode()).process(transform()).process(validate()).process(saveToDatabase()).to("activemq:topic:ouboundTopic" );
所以,我已经阅读了所有ServiceMix和AcitveMQ集群页面,但我仍然不确定要走哪条路.
我知道我可以使用HA的主/从设置,但这对可伸缩性没有帮助.
我读过有关经纪人的网络,但我不确定这是如何适用的.例如,如果我在群集中的多个节点上部署相同的Camel路由,它们将如何"完全"交互?如果我将HTTP生成器指向一个节点(NodeA),哪些消息将被发送到NodeB?是否在节点A/B之间共享队列/主题...如果是,如何分割或复制消息?另外,外部客户端如何准确地订阅我的"outboundTopic"(并获取所有消息等)?
或者,我一直在想我应该在多个ServiceMix实例之间共享代理.那将是更清洁的,因为只需要管理一组队列/主题,我可以通过添加更多实例来扩展.但是,现在我受限于单个经纪人的可扩展性,我又回到了单点故障......
如果有人能为我澄清权衡......我会很感激.
当您使用ServiceMix/Camel/ActiveMQ时,有多种策略可以扩展.由于每个软件都提供了很多选项,因此您可以采用多种途径,具体取决于应用程序需要扩展的部分.以下是一些策略的高级列表:
增加入站Jetty实例的数量 - 这需要启动更多Web服务器实例,并在多个实例之间加载平衡请求或公开多个URL并将所有请求发送到ActiveMQ中的同一入站队列.
增加ActiveMQ实例的数量 - 通过启动其他ActiveMQ实例并将它们联网,您将创建一个代理网络.在某些圈子中,这称为分布式队列,因为可以在网络中的所有代理中使用给定队列.但是如果你要启动多个ActiveMQ实例,你应该考虑启动ServiceMix的其他实例.
增加ServiceMix实例的数量 - 每个ServiceMix实例都嵌入一个ActiveMQ实例.通过增加ServiceMix的实例数量,您不仅可以增加ActiveMQ实例的数量(可以将它们联网以形成代理网络),而且您可以跨这些ServiceMix实例部署更多应用程序副本.如果需要增加ActiveMQ或ServiceMix实例的数量,则可以为每个实例部署具有适当数量的并发使用者的使用应用程序.根据消费者的需求,消息不会被分割或重复,它们以循环方式分发给队列中的所有消费者,无论他们位于何处.即,如果网络中的一个ActiveMQ实例没有消费者,则它将不会在其消耗的队列实例上有任何消息.这导致了我的最后一个建议,即增加了轮询入站队列的消费者数量.
增加入站队列中JMS使用者的数量 - 这可能是增加吞吐量的最简单,最强大和最易管理的方法.这是最简单的,因为您正在部署消费应用程序的其他实例,以便它们竞争来自入站队列的消息(无论它们是竞争本地队列还是通过代理网络分发的队列).这可能就像增加并发消费者数量一样简单,或者通过拆分包含消费者的应用程序部分并将其部署到许多ServiceMix实例来实现更多.它是最强大的,因为它通常并不困难,并且扩展事件驱动的应用程序总是通过增加消费者的数量来完成.它是最易于管理的,因为您可以更改应用程序的打包方式,以便消费应用程序完全独立,从而使其能够进行分发.
最后一个建议是扩展应用程序的最有效方法.只要传入的HTTP端点可以处理大量流量,您可能只需要增加入站队列中的使用者.这样做的最大原因是消费者或他们交出的豆子正在进行所有繁重的工作,大量的处理和验证.通常,这个过程最终需要最多的资源.
希望这可以提供您开始向一个方向或可能的方向发展所需的信息,具体取决于您实际需要扩展的应用程序部分.如果您有任何疑问,请告诉我.
布鲁斯