문제1) 메시지큐잉에 대한 개념과 필요성, 종류, 기능에 대하여 설명하시오
답)
1. 메시지큐잉에 대한 개념과 필요성
가. 메시지큐잉의 개념
개념
|
서로 다른 응용 프로그램 사이에서 비동기 메시지를 사용하여 데이터 송수신을 위한 메시지 지향 미들웨어(Meesage Oriented Middleware: MOM)를 구현한 시스템
|
개념도
|
|
관련 개념
|
메시지 지향 미들웨어(Message Oriented Middleware : MOM)
|
분산 시스템 간 메시지를 주고 받는 기능을 지원하 는 소프트웨어나 하드웨어 인프라
|
메시지 큐(Message Queue : MQ)
|
MOM을 구현한 시스템
|
브로커(Broker)
|
Message Queue 시스템
|
AMQP(Advanced Message Queueing Protocol)
|
메시지 지향 미들웨어를 위한 프로토콜
|
필요성
|
설명
|
확장성
|
- 기능 별로 모듈을 분리하여 구성하기 때문에 확장에 용이
|
데이터의 영속성
|
- 데이터를 메모리 대신에 디스크에 저장하여 데이터 유실을 방지
|
고가용성 유지
|
- 다소 지연시간을 희생하는 한이 있더라도 서비스 규모에 독립적으로 언제나 이용할 수 있는 상태를 유지
|
장애 복원력
|
- 단일 장애점 해소
- 시스템 일부에 장애가 발생하더라도 전체적으로 영향을 주지 않음
- 메세지가 큐에 추가되어 있으므로 혹시라도 어떤 모듈에서 장애가발생하였더라도 해당 모듈 복구 후 작업을 마저 수행하는 것이 가능
|
- Producer(생산자)가 Message를 Queue에 넣어두면, Consumer가 Message를 가져와 처리하는 방식
- 대표적인 MQ에는 RabbitMQ, ActiveMQ, ZeroMQ, Kafka 있음
|
2. 메시지큐잉의 종류와 기능
가. RabbitMQ의 개념과 기능
구분
|
설명
|
개념
|
- AMQP(Advanced Message Queueing Protocol) 프로토콜을 구현한 메시지 브로커로 생산자에게 메시지를 받아 소비자에게 전달해 주는 오픈소스 메시지 브로커 소프트웨어
|
개념도
|
|
구성요소
|
Producer
|
- 메세지를 생성하고 발송하는 주체
- Queue에 직접 접근하지 않고, 항상 Exchange를 통해 접근
|
Consumer
|
- 메세지를 수신하는 주체
- Queue에 직접 접근하여 메세지를 가져옴
|
Queue
|
- Producer들이 발송한 메세지들이 Consumer가 소비하기 전까지 보관되는 장소
|
Exchange
|
- Producer들에게서 전달받은 메세지들을 어떤 Queue들에게 발송할지를 결정하는 객체, 일종의 라우터
- 유형: fanout, direct, topic, header
|
Binding
|
- Exchange에게 메세지를 라우팅 할 규칙을 지정하는 행위
|
주요기능
|
메시지 분배 (Round-robin dispatching)
|
- Consumer가 병렬처리를 쉽게 할 수 있도록 같은 Queue를 바라보고있는 Consumer에게 메시지를 균등 분배
|
Fair dispatch (공평한 분배)
|
- busy한 서버에게 메시지를 계속 전달하지 않도록 prefetchCount라는 개념 사용하여 prefetchCount가 1일때는 아직 ack를 받지 못한 메시지가 1개라도 있으면 다시 그 consumer에게 메시지 할당하지 않음
|
메시지 수신 통보 (Acknowledgment)
|
- 많은 프로토콜들이 메시지 전달 보장을 해 Acknowledgment(ACK)라는 개념을 사용하여 메시지에 대한 응답을 보냄
|
- 확장성이 뛰어나며 Spring에서도 AMQP연동 라이브러리가 제공되어 편리하게 연동하여 사용가능
|
구분
|
설명
|
개념
|
- 아파치 소프트웨어 재단의 오픈소스 프로젝트로, 기업 연동 작업을 쉽고 확장성있게 구현할수 있도록 지원하는, 고기능 JAVA 메시지 기반 미들웨어(MOM )이며 통합패 (Intergration Patterns) 서버
|
개념도
|
|
구성요소
|
JMS (Java Message Service)
|
- 자바 플랫폼, 엔터프라이즈 에디션(EE) 기반이며, 메시지 생성, 송수신, 읽기를 하며 또한 비동기적이며 신뢰할 만하고 느슨하게 연결된 서로 다른 분산 어플리케이션 컴포넌트 간의 통신을 허용
- 다른 MOM(AMQP, SMTP 등)과의 통신은 불가능
|
주요 기능
|
JMS준수
|
- 동기와 비동기 메시지 전달과 1:1 메시지 전달, 구독자들에게 메시지전달 보장을 제공
|
연결성
|
- HTTP/S, IP multicast, SSL, STOMP, TCP, UDP, XMPP 등의 프로토콜의 지원을 포함하여 넓은 영역의 연결옵션을 제공.
- 넓은 영역의 프로토콜 등의 지원은 시스템에 유연성을 제공
|
플러그 방식의 저장 과 보안
|
- 다양한 저장매체를 사용 가능
- ActiveMQ의 보안성은 원하는 최상의 인증과 승인 정의 가능
|
다양한 어플리케이션 간의 통합
|
- WAS(Web Application Server)와 ActiveMQ를 통하여 다양한 어플리케이션 간의 통합 제공
|
다양한 언어의 클라 이언트를 위한 API제공
|
- Java 뿐만 아니라 C/C++, NET, Perl, PHP, Python, Ruby 등의 많은 언어를 위한 API를 제공
|
브로커 클러스터링
|
- 다수의 ActiveMQ브로커는 확장성을 위해 브로커의 연합네트워크로서 함께 동작 함
|
많은 전문적인 브로 커기능과 클라이언트 옵션
|
- 브로커와, 브로커에 연결하는 클라이언트 모두에게 다양한 기능을 옵션으로 제공
|
단순한 관리
|
- JMX(Java Management eXtensions)를 통하여 JConsole이나ActiveMQ웹 콘솔, ActiveMQ조회(advisory) 메시지처리, 명령줄 스크립트 등 다양한 측면의 모니터링 방법을 제공
|
스프링(Spring) 지원
|
- 스프링을 지원하기 때문에 쉽게 스프링 응용프로그램 안으로 포함될수 있으며 스프링의 XML 설정 메커니즘을 사용하여 설정도 가능
|
Ajax 지원
|
- 순수한 DHTML을 사용하는 웹 브라우저를 지원하기 위한 웹 스트리밍을 지원하는 Ajax, 웹 브라우저가 메시징구조의 일부가 될 수 있도록 지원
|
CXF 와 Axis
|
- CXF와 Axis 를 지원하기 때문에 신뢰성 있는 메시징을 제공하기 위한 웹서비스 스택 중 하나를 쉽게 적용
|
고급기능지원
|
- 메시지그룹과 가상목적지, 와일드카드, 그리고 합성주소(Composite Destination) 같은 고급기능을 지원
|
엔터프라이즈 통합패턴 지원
|
- JMS클라이언트와 메시지 브로커, 양 쪽을 엔터프라이즈 통합패턴으로 연동 지원
|
- JMS로 구현한 하나 이상의 클라이언트와 서버 간의 커뮤니케이션을 증진시키는 기능을 제공
|
구분
|
설명
|
개념
|
- 아파치 소프트웨어 재단이 스칼라로 개발한 오픈 소스 메시지 브로커 프로젝트
- 실시간 데이터 피드를 관리하기 위해 통일된, 높은 처리량, 낮은 지연시간을 지닌 플랫폼을 제공하는 것이 목표
|
개념도
|
|
구성요소
|
Broker
|
|
Message
|
- 카프카에서 다루는 데이터의 최소 단위
- 메시지는 Key와 Value를 갖게 되며 나중에 언급할 메시지 전송할 때파티셔닝에 이용
|
Producer
|
- 데이터의 생산자이며 브로커에 메시지를 보내는 애플리케이션
|
Consumer
|
|
Topic
|
- 메시지를 종류별로 관리하는 스토리지
- 브로커에 배치되어 관리됨
- 프로듀서와 컨슈머는 특정 토픽을 지정하여 메시지를 송수신함으로써단일 카프카 클러스터에서 여러 종류의 메시지를 중계함
|
주요기능
|
Publisher Subscriber 모델
|
- 데이터 큐를 중간에 두고 서로 간 독립적으로 데이터를 생산하고 소비
- 느슨한 결합을 통해 서로 간에 의존성이 없으므로 안정적으로 데이터를 처리
|
고가용성(High availability) 및 확 장성(Scalability)
|
- 클러스터로서 작동하므로 Fault-tolerant 한 고가용성 서비스를 제공
- 분산 처리를 통해 빠른 데이터 처리
- 서버를 수평적으로 늘려 안정성 및 성능을 향상시키는 Scale-out이 가능
|
디스크 순차 저장 및 처리 (Sequential Store and Process in Disk)
|
- 메세지를 메모리 큐에 적재하는 기존 메세지 시스템과 다르게 카프카는 메세지를 디스크에 순차적으로 저장
|
분산 처리 (Distributed Processing)
|
- 파티션(Partition)이란 개념을 도입하여 여러 개의 파티션을 서버들에
- 분산시켜 나누어 처리하므로 메세지를 상황에 맞추어 빠르게 처리 가능
|
- Kafka는 대용량 실시간 로그 처리에 특화되어 설계된 메시징 시스템으로 TPS가 매우 우수
|
4. RabbitMQ, ActiveMQ, Kafka 의 장단점 비교
구분
|
RabbitMQ
|
ActiveMQ
|
Kafka
|
개념
|
|
|
- 대용량 실시간 로그 처리에 특화되어 설계된 메시지 시스템
|
장점
|
- 실시간 모니터링 및 관리 용이
- 다양한 언어 지원
- 클러스터링 가능
|
- 다양한 언어 지원
- STOMP를 통해서도 접근 가능
- JDBC를 사용하여 매우 빠른 Persistence 지원
- 클러스터링 가능
- REST API를 통해 웹기반 메시징 지원
|
- AMQP나 JMS를 사용하지 않고 단순 메시지 헤더를 지닌 TCP 통신
- 개별 전송이 아닌 다수 전송 가능(Batch 처리 가능)
- 파일 시스템에 저장(데이터의 영속성 보장)
- 대기 중인 메시지로 인한 시스템성능 감소 줄임
- 대기 중인 메시지로 인한 시스템성능 감소 줄임
|
단점
|
- Window OS 시, Erlang, OpenSSL 설치 필요
|
|
- 컨슈머 장애가 발생했을 때 메시지가 손실되거나 메시지 중복이 발생 할 수 있음
|
공감과 댓글은 아이티신비에게 큰 힘이 됩니다.
블로그 글이 유용하다면 블로그를 구독해주세요.♥