비동기 메시지 처리 시스템(1)-JMS, RabbitMQ

1.개요

   ㅇ비동기/병렬처리( QUEUE ):대량 메시지 처리성능을 위해 반드시 적용

   ㅇ동기처리시 문제.. 
       -트랜잭션이 늘어나면 대기하는 요청들이 늘어나 정체 -> 서버다운 
       -병렬 처리 못함 -> 응답시간 지연.
         
   ㅇSpring Integration:비동기 병렬처리를 손쉽게 구현.
     - spring 기반의 bean들과 설정들을 그대로 사용할 수 있어 매력적임
     - Task-executor를 이용한 단순한 구조였음에도 훌륭한 성능. 
   
   ㅇ 개선점 ( In memory channel 기반 시스템의..)
    - decoupling :
          .producer와 consumer간 직접연결로 인한 확장성 문제.
          .주소가 바뀌거나 , 서버이전하거나..( Physical decoupling)
          .어느 한쪽의 logic이 변경되면......( Logical decoupling )
    - 시스템 에러시 queue에 있는 데이타는 유실
    - load balancing, clustring ..
    - 큐의 상태에 대한 모니터링 도구가 없음. 
    
   ㅇ 보다 견고한 시스템 구성이 필요 -> jms, mq 등의 시스템 구성..

2. JMS vs RabbitMQ

   ㅇJMS : 메시지 처리에 대한 J2EE API.  OpenMQ, HornetQ, ActiveMQ가 이에 
           해당하는 제품들임
   
   ㅇRabbitMQ : AMQP 프로토콜을 지원하는 오픈소스 메시징 시스템 
                (AMQP란 ->  http://killins.egloos.com/m/3025514 )
   
   ㅇ둘의 차이점 
    [원본] http://java.dzone.com/articles/jms-vs-rabbitmq
       
    1) Messaging Model        
       
       Jms는 2가지 모델을 지원한다. 
        -> one to one, publish-subscriber        
       RabbitMQ는 4가지 모델을 지원한다.
        ->direct, fanout, topic , headers       

    2) Data Types       
       
       JMS는 5가지data types 지원
         -> byte, text, stream, map, object  
           
       RabbitMQ는 binary type만 지원한다.           

    3) Workflow strategy       
       
       AMQP는 producers가 exchange를 거쳐 queue로 전송하지만        
       jms는 queue나 topic으로 직접전송한다.        
       (exchange의 역할은 direct, fanout, topic 등을 수행) 

    4) Technology compatibility:        
       
       jms는 only java이다. RabbitMQ는 다양한 언어를 지원한다. 

    5) Performance        
       
       http://x-aeon.com/wp/2013/04/10/a-quick-message-queue-benchmark-activemq-rabbitmq-hornetq-qpid-apollo/
       에서의 순위는 ZeroMQ다음으로 RabbitMQ의 성능이 뛰어나다고 한다.
       (ZeroMQ?->http://blog.naver.com/PostView.nhn?blogId=haje01&logNo=130133918260)
      
      ㅇZeroMQ vs RabbitMQ 
        -.ZeroMQ에 비해 RabbitMQ는 문서화, 사용편리성등에서 월등하며,  
           많은 개발자들이 사용하고 있다는 잇점.
        -.RabbitMQ는 다양한 언어를 지원함. 
          ( spring integration과 연계됨 )
       
   (시스템 환경, 규모를 고려하지 않는 다면 ..확장성,독립성,성능등에서 
     RabbitMQ가 적절해 보임) 


ㅇps. 

   ㅇ In memory channel vs rabbitmq

    -async-task는 데이타의 누락에 대한 책임을 지지 못함
    -rabbitmq는 설치를 해야 하기때문에 관리포이트가 증가한다
    -rabbitmq는 모니터링 도구를 제공함.
    -----------------------------
   ㅇ RabbitMQ의 특징.  
    - High Availablity 
    - self-hosted
    - multi client language
    -------------------------------
 

댓글

이 블로그의 인기 게시물

Charset 변환 ( EUC-KR, UTF-8, MS949, CP933 )

GZipUtils- gzip을 통한 압축시 charset처리