2010-02-08 5 views
10

ServiceMix 3.3.1/Camel 2.1/AMQ 5.3 응용 프로그램을 클러스터링하기위한 옵션을 결정하려고합니다. 대량 메시지 처리를 수행하고 있으며 고 가용성 및 수평 확장 성을 위해 클러스터해야합니다. 여기ActiveMQ 클러스터링을 사용하는 Apache Camel

은 기본적으로 내 응용 프로그램이 무엇을 ... HTTP-> QUEUE-> 프로세스 -> 데이터베이스 -> ("부두 : http://0.0.0.0/inbound")에서 TOPIC

.TO ("ActiveMQ를 : inboundQueue"); ("?의 ActiveMQ : inboundQueue maxConcurrentConsumers = 50")로부터

.process (디코드()) .process (변환()) .process (검증()) .process (saveToDatabase()) . to ("activemq : topic : ouboundTopic");

그래서 모든 ServiceMix 및 AcitveMQ 클러스터링 페이지를 읽었지만 여전히 갈 방법이 확실하지 않습니다.

HA 용 마스터/슬레이브 설정을 사용할 수 있다는 것을 알고 있지만 확장성에 도움이되지 않습니다.

브로커 네트워크에 대해 읽었지만 적용 방법을 잘 모릅니다. 예를 들어, 클러스터의 여러 노드에 동일한 Camel 라우트를 배치하면 정확히 상호 작용할 수 있습니까? 한 노드 (NodeA)에서 HTTP 생성자를 가리키면 어떤 메시지가 NodeB로 전송됩니까? 노드 A/B간에 대기열/주제를 공유합니까? 그렇다면 메시지는 어떻게 분할되거나 복제됩니까? 또한, 어떻게 외부 클라이언트가 내 "outboundTopic"을 정확히 구독 할 것인가? (그리고 모든 메시지 등을 얻을 수 있습니까?)

또는 여러 ServiceMix 인스턴스간에 브로커를 공유해야한다고 생각했습니다. 관리 할 큐/토픽 집합이 하나 뿐이므로 더 많은 인스턴스를 추가하여 확장 할 수 있다는 점에서 더 깨끗합니다. 하지만 이제는 단일 브로커의 확장성에 국한되어 있으며 단일 실패 지점으로 돌아 왔습니다 ...

누구나 나를위한 절충점을 명확히 할 수 있다면 ... 고맙겠습니다. .

답변

9

ServiceMix/Camel/ActiveMQ를 사용할 때 확장 할 여러 전략이 있습니다. 각 소프트웨어는 많은 옵션을 제공하기 때문에 확장해야하는 응용 프로그램의 부분에 따라 다양한 경로를 사용할 수 있습니다. - 이것은 여러 인스턴스에서 더 많은 웹 서버의 인스턴스와 하나로드 밸런싱 요청을 시작하거나 여러 URL을 노출하고 전송해야합니다

  • 인바운드 부두 인스턴스의 수를 증가 : 다음은 몇 가지 전략의 높은 수준의 목록입니다 ActiveMQ의 동일한 인바운드 대기열에 대한 모든 요청.

  • ActiveMQ 인스턴스의 수를 늘리십시오 - 추가 ActiveMQ 인스턴스를 시작하고 이들을 함께 네트워킹하면 브로커 네트워크가 생성됩니다. 일부 서클에서는 네트워크의 모든 브로커에서 특정 대기열을 사용할 수 있으므로 분산 대기열이라고합니다. 그러나 ActiveMQ의 여러 인스턴스를 시작하려면 ServiceMix의 추가 인스턴스를 시작하는 것을 고려해야합니다.

  • ServiceMix 인스턴스 수 - ServiceMix 인스턴스마다 ActiveMQ 인스턴스가 포함됩니다. ServiceMix의 인스턴스 수를 늘리면 ActiveMQ 인스턴스 (네트워크를 통해 브로커 네트워크를 구성 할 수 있음)의 수를 늘릴 수있을뿐만 아니라 ServiceMix의 이러한 인스턴스에 응용 프로그램의 복사본을 더 많이 배포 할 수 있습니다 .ActiveMQ 또는 ServiceMix 인스턴스 수를 늘려야하는 경우 각 인스턴스에 대해 적절한 양의 동시 사용자를 사용하여 소비 응용 프로그램을 배포 할 수 있습니다. 메시지는 분할되거나 복제되지 않고 소비자 요구에 따라 대기열에있는 모든 사용자에게 라운드 로빈 방식으로 배포됩니다. 즉, 네트워크에있는 하나의 ActiveMQ 인스턴스에 사용자가 없으면 소비 할 대기열의 인스턴스가 메시지에 표시되지 않습니다. 이것은 내 마지막 제안으로 이어져 인바운드 큐를 폴링하는 소비자의 수를 늘립니다.

  • 인바운드 대기열에서 JMS 사용자 수를 늘립니다. 처리량을 높이기 위해 가장 쉽고 강력하며 관리하기 쉬운 방법 일 수 있습니다. 사용중인 응용 프로그램의 추가 인스턴스를 배포하여 인바운드 큐에서 메시지를 경쟁하게하기 때문에 (로컬 큐 또는 브로커 네트워크를 통해 분산 된 큐에 관계없이) 경쟁하기 때문에 가장 쉽습니다. 이는 동시 사용자 수를 늘리는 것만 큼 간단하거나 소비자가 포함 된 응용 프로그램 부분을 분리하여 ServiceMix의 여러 인스턴스에 배포하는 방식으로 진행될 수 있습니다. 가장 힘든 이유는 일반적으로 어렵지 않고 이벤트 기반 응용 프로그램의 확장은 항상 소비자 수를 늘림으로써 이루어집니다. 응용 프로그램이 패키지되는 방식을 변경하여 소비하는 응용 프로그램이 완전히 분리되어 배포 할 수 있기 때문에 가장 관리하기 쉽습니다.

이 마지막 제안은 응용 프로그램을 확장하는 가장 강력한 방법입니다. 들어오는 HTTP 엔드 포인트가 많은 양의 트래픽을 처리 할 수있는 한 인바운드 대기열의 사용자 만 늘려야 할 수 있습니다. 이렇게하는 가장 큰 이유는 소비자 또는 그들이 손을 뻗은 콩이 많은 양의 작업과 많은 양의 처리 및 검증을 수행하고 있기 때문입니다. 일반적으로 궁극적으로 가장 많은 리소스가 필요한 프로세스입니다.

실제 크기 조정을해야하는 앱의 부분에 따라 한 방향으로 또는 몇 가지 방향으로 시작하는 데 필요한 정보가 제공되기를 바랍니다. 질문이 있으시면 알려주십시오.

브루스

+0

브루스, 감사합니다. "maxConcurrentConsumers"속성을 사용하여 인바운드 큐에서 소비자를 멀티 스레드했습니다. 이제 다음 단계를 수행하고 여러 컴퓨터에로드를 분산하려고합니다. 그래서 브로커 네트워크에 구성된 동일한 SMX 인스턴스를 여러 개 설치하면 내 필요에 맞게로드가 분산됩니다. 메시지 그룹은 여전히 ​​브로커 네트워크와 스레드 연관 관계를 제공합니까? 또한 포털에서 사용할 수있는 outboundTopic 메시지를 만들어야합니다. 포털은 모든 메시지를 가져 오기 위해 각 브로커에 연결해야합니까? –

+0

메시지 그룹이 중개인 네트워크에서 독점권을 제공 할 것이라고 나는 생각하지 않습니다. 총 주문은 한 번에 하나의 브로커에서만 작동하므로 메시지 그룹이 같은 방식이라고 생각합니다. 모든 메시지가 아웃 바운드 항목으로 전송되는 한 가입이 등록 된 브로커에 관계없이 모든 메시지를 사용해야합니다. 주제이기 때문에 영구 가입을 사용할 수도 있습니다. 인바운드 대기열에서 메시지를 가져 오기 위해 여러 개의 동시 사용자를 사용하기 때문에 영구 가입을 사용하는 단일 고객이 좋은 아이디어라고 확신하지는 않습니다. – bsnyder

+0

@bsnyder - 좋은 요약; ServiceMix의 최신 설명서를 어디에서 얻을 수 있습니까? 웹 사이트의 공식 문서는 구식입니다. – wulfgarpro

관련 문제