Я пытаюсь определить свои варианты кластеризации моего приложения ServiceMix 3.3.1/Camel 2.1/AMQ 5.3. Я выполняю обработку больших объемов сообщений, и мне нужно кластер для высокой доступности и масштабирования по горизонтали.
Вот в основном то, что делает мое приложение... HTTP- > QUEUE- > PROCESS- > DATABASE- > ТЕМА
from ( "jetty: http://0.0.0.0/inbound" ) .to( "ActiveMQ: inboundQueue" );
из ( "ActiveMQ: inboundQueue maxConcurrentConsumers = 50" ) .process(декодирования()) .process(преобразование()) .process(проверить()) .process(saveToDatabase()) .то ( "ActiveMQ: тема: ouboundTopic" );
Итак, я прочитал все страницы кластеризации ServiceMix и AcitveMQ, но до сих пор не знаю, куда идти.
Я знаю, что могу использовать настройку Master/Slave для HA, но это не помогает масштабируемости.
Я читал о сети брокеров, но не знаю, как это относится. Например, если я развертываю одинаковые маршруты верблюдов на нескольких узлах в кластере, как они будут "взаимодействовать" точно? Если я укажу свой HTTP-производитель на один node (NodeA), какие сообщения будут отправляться в NodeB? Будут ли разделяться очереди/темы между node A/B... если да, то как, сообщения расщепляются или дублируются? Кроме того, как бы внешний клиент подписался на мой "outboundTopic" точно (и получить все сообщения и т.д.)?
В качестве альтернативы, я думал, что мне нужно просто разделить брокера между несколькими экземплярами ServiceMix. Это было бы чище в том, что для управления будет только один набор очередей/тем, и я мог бы масштабировать, добавляя больше экземпляров. Но теперь я ограничен масштабируемостью одного брокера, и я возвращаюсь к единственной точке отказа...
Если кто-то может прояснить компромиссы для меня... Я был бы признателен.