[TIL]비동기 메세징
비동기 메세징
메세징은 서비스 간 메세지를 통해 비동기적으로
주고 받는 통신 방식.
메세징은 브로커라는 인프라 서비스의 이용 유무에 따라 나뉜다.(찾아보기)
브로커 기반 메세징 모델은 송신자,메세지 채널,수신자로 구성되며
송신자와 수신자 간 메세지 채널을 통해 메세지를 교환한다.
송신자는 메세지 채널에 메세지를 쓰고
수신자는 메세지 채널에 메세지를 읽는다.
메시지란?
메시징 서비스에서 송신자와 수신자 간 교환되는 데이터 단위.
메시지는 헤더와 바디(본문)으로 구성된다.
메세지의 종류에는 document, command, event가 있고
document : 데이터만을 포함한 제너릭한 메세지.
해당 document메세지는 데이터를 전달하기만 하며, 해당 메세지를
어떻게 해석하여 어떤 작업을 수행할 지는 수신자가 결정한다.
command : 호출할 작업과 매개변수를 전달하고 수신자가
어떤 작업을 수행할지 지정하는 메세지, RFC요청과 비슷한 개념의 메세지.
event : 어떤 사건의 발생과 상태의 변화를 나타내고,
이러한 송신자의 사건의 발생 및 상태의 변화를 알리는 메세지
매세지 채널
메세지 채널은 메세징 인프라내의 송신자와 수신자를 연결하는 가상의 통로이며
채널에서는 Point to Point, Publish and Subscribe 두가지 종류가 있다
왜 비동기 메세징을 사용하는가?
현대 소프트웨어 아키텍처 MSA에서는 서비스의 민첩성,고가용성,확장성 등을 위해
서비스간의 느슨한 결합을 강조하며
느슨한 결합은 각 서비스의 구성요소들 간 의존성을 최소화하는 것을 목표로 한다.
의존성이 최소화하게 되면
1. 비즈니스 민첩성 : 서비스간의 결합을 줄여 서비스의 변경 및 테스트 등이 용이
2. 뛰어난 성능 : 송수신자는 메세지 큐를 통해 데이터를 교환
한쪽의 서비스가 중단되어도 다른 한쪽은 메세지 큐를 통해 여전히 상호작용을 할 수 있다.
또한 메세지 큐에서 메세지를 읽는 것은 실패해도
해당 메세지는 메세지 큐에 저장되어 있기 때문에 메세지 읽기를 재시도 할 수 있다.
3. 확장성 : 메세지 큐, 송신자, 수신자는 분리되어 있으며
메세지 큐를 중심으로 각자 독립적으로 확장이 가능하다
이러한 확장성을 기반으로 분산 처리에 용이하다.
4. 편의성 : 각 수신자의 처리 성능이나 환경에 대한 고려가 줄어든다.
따라서 불필요한 상호작용의 최소화로 각자의 비즈니스 로직에만 집중할 수 있다
비동기 메세징 시스템의 종류
위와 같은 메세징 기반 통신을 구현한 소프트웨어를 메세지 지향 미들웨어
MOM : Message Oriented Middleware라고 하며
많은 메세지 지향 미들웨어는 메세지 큐(MQ) 시스템을 기반으로 한다.
대표적인 메세지 큐 시스템 : Kafka, RabbitMQ , ActiveMQ , IBM MQ