먼저 trends.google.com 에서 Message Server 에 대한 트랜드
google 검색중 stackoverflow 에 아래와 같은 Article 이 있는것을 확인
(원문 : http://stackoverflow.com/questions/731233/activemq-or-rabbitmq-or-zeromq-or )
My initial answer had a strong focus on AMQP. I decided to rewrite it to offer a wider view on the topic.
These 3 messaging technologies have different approaches on building distributed systems :
RabbitMQ is one of the leading implementation of the AMQP protocol (along with Apache Qpid). Therefore, it implements a broker architecture, meaning that messages are queued on a central node before being sent to clients. This approach makes RabbitMQ very easy to use and deploy, because advanced scenarios like routing, load balancing or persistent message queuing are supported in just a few lines of code. However, it also makes it less scalable and “slower” because the central node adds latency and message envelopes are quite big.
ZeroMq is a very lightweight messaging system specially designed for high throughput/low latency scenarios like the one you can find in the financial world. Zmq supports many advanced messaging scenarios but contrary to RabbitMQ, you’ll have to implement most of them yourself by combining various pieces of the framework (e.g : sockets and devices). Zmq is very flexible but you’ll have to study the 80 pages or so of the guide (which I recommend reading for anybody writing distributed system, even if you don’t use Zmq) before being able to do anything more complicated that sending messages between 2 peers.
ActiveMQ is in the middle ground. Like Zmq, it can be deployed with both broker and P2P topologies. Like RabbitMQ, it’s easier to implement advanced scenarios but usually at the cost of raw performance. It’s the Swiss army knife of messaging :-).
Finally, all 3 products:
- have client apis for the most common languages (C++, Java, .Net, Python, Php, Ruby, …)
- have strong documentation
- are actively supported
위의 내용을 나름 해석하여 요약하면 다음과 같다.
Advanced Message Queuing Protocol 관점으로 보았을때, 이 세가지 기술은 분산환경을 구축하는데 있어서 각기 다른 접근법을 가짐.
RabbitMQ 는 클라이언트로 메세지를 보내기 전에 중앙에서 큐를 관리하는 브로커구조를 가짐. 이러한 접근법으로 인해 사용성과 배포성이 매우 좋아 라우팅, 로드밸런싱 혹은 지속적인 메세지 큐를 지원하는게 단 몇줄의 코드로 가능함.
그러나 중앙 노드는 지연이 발생시키고, 메세지 Envelopes 가 매우 크므로 확장성이 떨어지고 느리다.
ZeroMQ 는 대용량 처리/낮은 지연을 중점으로 디자인된 매우 가벼운 메세지 시스템이다.
다양한 Advanced 메세지 시나리오들을 지원하지만 RabbitMQ와 달리 다양한 프레임워크의 조각들을 조합하여 구현해야 한다. (예를 들어 sockets 그리고 devices) ZeroMQ는 매우 우연하나 80페이지 이상의 가이드들을 공부해야 한다.
ActiveMQ 는 중간정도에 위치함. ZeroMQ와 같이 브로커와 P2P 기술들과 함께 배포될 수도 있고, RabbitMQ 처럼 고급시나리오(advanced secarios)를 쉽게 구현할 수 있다. 그러나 원시적인 성능의 비용이 발생한다.(메세징에 있어서 Swiss army knife 와 같다고 할 수 있다.)
RabbitMQ 가 erlang 으로 만들어졌다고 해서 무척 빠를것이라고 생각했는데, 접근법의 차이로 ZeroMQ 가 더 빠른것 같음.
아무튼 지금 프로젝트에 있어서는 성능보다 생산성이 우선시 되므로 RabbitMQ 를 도입하려고 함.(대용량 낮은 지연을 중점으로 한 가벼운 시스템이 필요할 경우 ZeroMQ를 고려해야할듯)
참고로 RabbitMQ 를 도입하여 프로젝트를 진행할 경우 알아야 할 내용들이다.
- RabbitMQ 는 AMQP 지 JMS 가 아니다. (따라서 JMS 를 완전히 지원하지는 않는다.)
참고자료
AMQP 와 JMS 차이점 이해하기 : http://www.wmrichards.com/amqp.pdf
AMQP vs JSM : http://netinamu42.blog.me/70140619983