Message Queue 제품별 특징
Apache Kafka
특징
- pub-sub 구조에 특화된 분산 메세지 큐.
- 범용 메세지 큐(RabbitMQ, ActiveMQ)에 비하여 성능적 우위를 가지고 있음.
- broker들이 클러스터로 구성되어 동작하는 등 각 컴포넌트의 분산 및 복제 구성이 쉬움.
- 단순한 TCP기반 프로토콜 사용으로 오버헤드 감소
- 다수의 메세지를 batch 형태로 한번에 publish 하는게 가능하여 TCP/IP 라운드 트립 횟수를 줄일 수 있음
- 메세지를 파일 시스템에 저장하여 영속성 보장. 특정 과정에서 에러가 발생했을 시 다시 rewind 하는 것이 가능.
- OS의 페이지 캐시를 활용, 메세지를 순차적으로 읽도록 하여 성능 면에서 가능한한 희생을 줄임.
- 커널모드와 유저모드간 불필요한 데이터 복제를 하지 않도록 하는 zero-copy를 이용하여 성능을 높임.
- broker가 push하는 대신 consumer이 자체적으로 pull해서 consume하는 방식으로 consumer 성능을 최대한 활용 가능
Luxun
특징
- Kafka와 전체적으로 유사한 구조.
- BigQueue라는 Memory mapped file 기반 시스템 사용. (성능상 우위를 내는 주요 요인)
- Communictaion layer로 Thrift RPC 사용
Amazon SQS
특징
- 메시지크기 256KB 제한 (그 이상은 Amazon S3에 저장됨)
- FIFO 엄격하게 지켜지지 않음. (순서를 엄격하게 지키기 위해선 추가적인 정렬 필요)
- 메세지를 여러 서버에 충분히 중복해서 저장하여 안정성 보장. 메세지가 전달된 다음에 직접 삭제를 하지 않으면 일정 시간 뒤 중복해서 받는 것이 가능함.
- 강력한 보안 및 ACL 지원
RabbitMQ
특징
- AMQP(Advanced Message Queue Protocol) 0-9-1 버전 구현
- Mnesia 사용
- 얼랭 기반으로 높은 신뢰성과 분산 어플리케이션 구축 가능.
- Direct Exchange(Point to Point), Topic Exchange(Publish-Subscribe), Fanout Exchange(Multicast) 등의 라우팅 규칙 제공
- 뛰어난 범용성을 가지고 있음.
- 기본적으로 클러스터링 지원. 추가로 좀 더 높은 트래픽을 처리하기 위해 셔블, 페더레이션 플러그인 제공.
ZeroMQ
특징
- 메세지큐라기보다는 소켓과 비슷한 개념으로 생각해볼 수 있음.
- 비동기 통신, queue를 다이나믹하게 생성.
- inproc, ipc, tcp, pgm, epgm등 다양한 전송 매체 사용 가능.
- 다양한 언어를 지원.
- 여러 패턴을 통해서 가용성, 신뢰성, 안정성, 확장성 등을 원하는 대로 구현 가능.
- in-memory message buffer만 제공하므로 영속성은 없음.
로그인하면 댓글을 남길 수 있습니다.