2012-03-05 2 views
7

나는 RabbitMQ를 통한 메시지 전송 속도를 높이는 방법을 모색합니다.RabbitMQ 전송 속도가 빨라 집니까?

Windows 64 비트에 최신 버전을 설치하고 C# 구현을 통해 게시 및 소비하는 로컬 컴퓨터에서 서버를 실행했습니다. 처음에는 인상적이지만 내 요구 사항에 맞지 않는 초 당 40,000 메시지를 초과했습니다. (초당 2400 만 개의 unparsed 16 바이트 큰 바이트 배열을 처리 할 수있는 사용자 정의 바이너리 리더와 경쟁하며, 분명히 그 근처에 도달 할 것으로 기대하지는 않지만 나는 적어도 개선하려고 시도한다). 가능한 한 빨리 115,000,000 개의 메시지를 보내야합니다. 나는 데이터를 유지하기를 원하지 않으며 연결은 단일 소비자에게 직접적으로 이루어질 것입니다. 그런 다음 필자는 16b 바이트 배열의 청크를 작성하여 개선하지 않고 버스에 게시했습니다. 전송 속도는 45mb/초로 최대화되었습니다. 나는 교환기에 의한 라우팅의 효율성 비율이 원시 전송 속도에 비해 무시할 수있는 몇 메가 바이트 크기의 바이트 배열을 생성 할 수 있기 때문에 결국에는 원시 전송 속도로 종결되어야한다는 사실을 감안할 때 매우 느립니다. 왜 내 메시지 버스는 초당 45MB 속도로 전송됩니까?

+0

소비자가 1 명인 경우 TCP를 통해 직접 보내지 않으시겠습니까? 당신은 정말로 메시지 버스가 필요하지 않습니다. –

+0

IO (네트워크, 디스크)와 CPU가이 테스트 중에 어떻게 생겼습니까? – Xailor

+0

아마도 당신은 rabbitmq 대신 zeromq를보아야합니다. 귀하의 작업은 0mq에 적합하다고 보입니다. 적어도 그들은 메시지 크기 (16 바이트)에 대해 초당 약 3,000,000 개의 메시지를 요구합니다. http://www.zeromq.org/results:0mq-tests-v03 –

답변

1

범프 ... 및 업데이트 :이 질문에 대한 답변을 더 이상 보지 못했습니다. 나는 RabbitMQ와 ZeroMQ를 광범위하게 사용하여 단 하나의 RabbitMQ 개발자가 참여한 것이 놀랍다. 나는 RabbitMQ가 높은 처리량의 인 프로세스 메시징 솔루션을 볼 때 그 과제에 부합하지 않는다고 결정했다. 브로커 구현 및 특히 구문 분석 논리는 처리량을 향상시키는 주요 병목입니다. 가능한 옵션 목록에서 RabbitMQ를 삭제했습니다.

대기 시간이 짧고 처리량이 많은 재무 데이터 스트림을 관리하는 솔루션을 제공하는 방법을 설명하는 백서가 있지만 저 대기 시간을 목표로하는 솔루션을 제공하는 대신 하드웨어를 던지고있는 것처럼 들리지만, 높은 처리량 요구 사항.

ZeroMQ는 문서를 더 집중적으로 공부 한 후 훌륭한 직장이었습니다. 나는 의사 소통을 진행할 수 있으며, 필요한 푸시/풀, pub/sub, req/rep 및 pair/pair 패턴을 안정적으로 제공합니다. 나는 ZeroMQ가 제공하지 않는 pub/sub 패턴 내에서 차단 논리를 찾고 있었는데 (높은 워터 마크가 초과 될 때 메시지를 삭제하지만) 푸시/풀 패턴은 차단을 제공합니다. 그래서, 내가 필요한 거의 전부가 제공됩니다. 내가 가지고있는 유일한 불만은 이벤트 처리에 대한 이해입니다. 폴/멀티 플렉스를 통한 이벤트 구조 구현은 그리 만족스럽지 않습니다.

관련 문제