2013-07-18 3 views
6

내 응용 프로그램에서 잠재적으로 매우 커질 수있는 큐가 있습니다. 내 컴퓨터에 더 이상 공간이 없다는 것을 발견하면 어떻게해야합니까? 대기열을 여러 대의 컴퓨터로 분할하려면 어떻게해야합니까? 어쩌면 RabbitMQ 철학이 다르기 때문에 하나의 큰 대기열 대신 여러 대기열을 만들어야합니다 ..? RabbitMQ 큐 디자인 및 스케일링

최저

, 플라 비오

답변

1

RabbimMQ 당신은 당신의 요구에 맞게 구성해야 clusteringhigh availability features 바로 상자 밖으로 제공합니다.

실제로 AMQP는 모든 크기의 메시지를 보관할 수 있지만 대부분의 경우 메시지는 99 %에서 최대 32KB입니다. 예상 자원 사용량 (최소/최대/평균)을 계산하고 추가 결정을 클러스터링하거나 클러스터링하지 않을 수 있습니다.

+2

는 하나의 큐는 단일 노드 (그래서 하나의 큐가 확장 할 수 없습니다에만 거주 너무) ... 내가 틀렸어? – user2539645

+0

맞아요. 단일 노드에서 실시간으로 대기열에 대기 (하지만 다른 대기열에 미러링 할 수 있음). 당신의 메시지는 크기와 유속을 어떻게 추정합니까? – pinepain

+0

실제로는 다음날 평가 될 내용입니다. 몇 시간 만에 수 테라 바이트의 데이터가 올 것으로 예상되므로 부하가 큰 시스템이 필요합니다. 아마도 더 나은 솔루션은 대기열에 추가하고 대기열이 커질 때 대기열을 추가하십시오 (클러스터 요구). 어떻게 생각하십니까? 문제는 다음과 같습니다. 교환기가 라운드 로빈과 같이 노드에서 균등하게 새 대기열을 생성합니까? – user2539645

1

RabbitMQ 메일 링리스트 스레드 http://rabbitmq.1065348.n5.nabble.com/RabbitMQ-scalability-design-question-td28323.html에서 읽을 수 있듯이, 필자가 생각해 낸 해결책은 경쟁 메시지 (많은 소비자가 대기열에 있음)를 구현하는 것입니다. 정지 메시지가있는 특수 메시지가 감지되면 STOP이 전송됩니다 주제 교환에 메시지.

이 정지 메시지는 zakkeer의 모든 하위 노드가 삭제 될 때까지 (큐레이터를 통해) 사육사를 통해 폴링을 시작하는 큐의 "마스터"고객이 수신합니다 (Zookpeer를이 경우 큐 소비자의 레지스트리로 사용함).). 모든 소비자가 중지 단계를 마쳤 으면 "마스터"소비자는 몇 가지 작업을 수행하고 원래 대기열 소비자가 RESTART 메시지를 주제 교환 (각 소비자가 전용 대기열로 수신 대기)으로 다시 보냅니다. 나는이 다른 사람 ("영감"또는) 도움이 될 희망

.. 내가 큐가 다른 기계들 사이에서 분할 할 수없는 이해 것과