2015-01-08 3 views
5

우리는 미국 - 동부에 하나의 RabbitMQ 노드가 있고 다른 지역 (아일랜드, 시드니 등)에 생산자가있는 상황이 있습니다. 우리는 다른 영역에서 큐잉 할 때 엄청난 성능 적중률을보고 있습니다. Sydney -> US-East 대기열은 1s이며 메시지 대기열은 Queuing Sydney -> Sydney는 50ms입니다. 채널을 만들고 대기열을 선언하는 데 많은 시간이 소비 된 것 같습니다.지리적 거리에 따른 RabbitMQ 대기 시간 문제

성능을 향상시키기 위해 어떤 옵션을 사용해야합니까? 각 지역에 노드가있는 일종의 분산 RabbitMQ 클러스터를 볼 수 있습니까? 그게 우리를 도울까요? 페더레이션 또는 삽 보라이 사용 사례를 들어

var queueConnection = amqp.connect("OUR amqp servers in each region") 
var queueName = "test-queue" 

var queueMessage = function(message) { 
    return queueConnection.then(function(conn) { 
    return conn.createChannel() 
    }).then(function(ch) { 
    var queue = ch.assertQueue(queueName, { durable: false }); 
    return queue.then(function() { 
     ch.sendToQueue(queueName, new Buffer(JSON.stringify(message)), { deliveryMode: true }); 
     return ch.close() 
    }); 
    }) 
}; 

Promise.map(_.range(0, 10), function(item) { 
    var timedQueueMessage = timely.promise(queueMessage) 
    return timedQueueMessage({ name: "Dom" }).then(function(res) { 
    console.log("Completed in " + timedQueueMessage.time + "ms") 
    }) 
}, { concurrency: 10 }).done(process.exit) 
+0

하드 질문, 당신은 삽 플러그인으로 시도해 봤어 :

이 페이지는 RabbitMQ가 제공하는 분산 된 각 옵션의 장단점을 설명? 여러 가지 방법이 있습니다. 예를 들어 브로커와 버퍼 집계 간 브리지로 하나의 대기열 만 만들고 메시지를 압축하여 보낼 바이트를 줄일 수 있습니다. – Gabriele

+1

채널을 만드는 데 필요한 바이트 수준에 대해 잘 알고 있습니다. 배후에서 대기열을 만드는 과정에서 RMQ가하는 일에 익숙하지는 않지만 클라이언트로부터 입력이 필요하지는 않습니다. 그러므로 나는 지역간 연결을 통해 다른 일이 진행되고 있다고 결론을 내려야합니다. 성능 문제를 만들기 위해이 프로세스에서 교환 된 데이터가 거의 없습니다. – theMayer

답변

관련 문제