2017-01-10 4 views
0

다음 두 가지 접근법을 사용하고 있습니다. 어느 것이 더 나은지 이해하도록 도와주세요! 그것의 동기 과정.ActiveMQ 요청/응답 패턴 : 어떤 접근 방식이 좋은 성능을 고려한 것입니까?

접근 1 : (모든 연결 개체를 닫을 수 없음)

아래 수업 시간에 만든 ConnectionFactory에 그 클래스

ConnectionPool.java (브로커 URL을 다른 생산자의 풀을 유지 유지 수영장)

private static Map<String, Producer> producers 
public static ProducerPool getInstance() { 
     if(INSTANCE==null){ 
      producers = Maps.newConcurrentMap(); 
      INSTANCE= new ProducerPool(); 
     } 
     return INSTANCE; 
    } 

Producer.java (모든 관련 개체) 여기서 생성

private ActiveMQConnection connection; 
private ActiveMQSession session; 
private MessageProducer producer; 
return consumer.receive(5000); 

그래서 100 req도 나오면 하나의 연결, 생산자, 세션 만 유지합니다.

접근법 2 :

(닫기 모든 연결, 세션, 제작자의 요청에 따라이 아닌 싱글) 3

접근 :

(유지에만 연결 살아 폐쇄 각 요청마다 세션 및 제작자를 요청하고 요청 당 닫힌 요청을 다시 작성하십시오)

성능 향상을위한 어떤 접근 방법이 있습니까? 우리가 재사용 할 수있는 하나의 (연결 r 세션 r 생산자) 요청 패턴의 최대 응답 레벨? (사람이 그것을 사용하는 방법을 예제를 도울 수 있습니다!) 하나를 수행해야하는 도와주세요

PooledConnectionFactory : 은 눈을했다!

답변

0

프로덕션 환경에서 사용할 동일한 시스템 구성에 대한 성능 테스트를 수행하지 않으면 실제로 대답 할 수 없습니다. 최고의 실적을 결정하는 데 너무 많은 변수가 있습니다. 예를 들어 브로커 구성 만 결정하려면 다음을 확인해야합니다.

  • CPU 수?
  • RAM 용량?
  • 네트워크 카드 인터페이스 수?
  • 스토리지 백엔드에 사용되는 디스크 마운트 수?
  • 대기열 수는 사용됩니까?
  • 생산자 수?
  • 소비자 수?
  • 메시지의 크기는?
  • 메시지 볼륨 (msg/s)?메시징

가장 좋은 방법은 하지 사전에 조정하는 것입니다. 내가 들어가는 대부분의 고객은 실제로 메시지 양이 많지 않습니다. 간단한 단일 연결, 단일 세션 및 단일 제작자를 먼저 시도하십시오. 성능 요구 사항을 충족하는 경우 HA 및 모니터링 메트릭에 초점을 두는 것이 중요합니다. 이러한 권리를 얻는 것은 시간 투자에 대한 수익을 훨씬 높여 주며보다 안정적인 메시징 플랫폼과 5 ~ 10 %의 성능 향상을 조정할 수 있습니다.

기억하십시오. 대부분의 메시징 시스템은 브로커의 디스크 속도에 의해 제한 될 것이므로 클라이언트 측에서 개체를 캐싱하면 특정 엣지 케이스 시나리오에서만 이점이 있습니다.