본문 바로가기

Etc./APM

[APM] Message Queue

1. Message Queue란? 

1-1) 프로세스 혹은 프로그램이 데이터를 서로 교환할 때 사용하는 방법이다.

- 서로 다른 프로세스 사이에 메시지를 교환할 때 AMQP(Advanced Message Queuig Protocol)이라는 프로토콜을 사용한다. 

   (AMQP: 시스템 간 메시지를 교환하기 위해 공개 표준으로 정의한 프로토콜)

- AMQP를 사용하면 다른 벤더 사이에 메시지를 전송하는 것이 가능해진다. 

 

1-2) 메시지를 임시로 저장하는 간단한 버퍼이다.

- 메시지 전송 시 producer 컴포넌트가 메시지를 메시지큐에 추가한다. 해당 메시지는 consumer 컴포넌트가 메시지를 검색하고, 이를 사용해 특정 작업을 수행할 때 까지 메시지큐에 저장한다.

- 각 메시지는 하나의 소비자에 의해 한번만 처리된다. 

 

2. Message Queue의 사용

간단한 서버 구조에서는 사용자의 요청과 응답에 시간이 소요되는 메시지큐를 사용할 이유가 없다.

- 메시지큐는 consumer가 실제로 메시지를 어느 시점에서 가져가서 처리해야할지 보장되지 않는다. 언젠가 메시지큐에 넣어둔 메시지가 소비되어 처리된다. (비동기적 특징)

- 대용량 데이터를 처리하기 위한 배치 작업, 채팅 서비스, 비동기 데이터를 처리할 때 사용한다.

- 사용자가 많아지거나 데이터가 많아지면 응답 지연으로 서비스가 정상적으로 작동하지 못하는 상황이 올 수 있다. 

 

예시) 이메일 전송 시스템 

- 비밀번호를 잊어버렸을 때 재발급 받는 시스템 

- 비밀번호 재설정을 위해 이메일을 발급하는 서비스, 회원 가입을 위해 이메일을 발급받는 서비스 => 메시지(이메일)를 큐에 넣는다.

- 이메일 전송 전용 서비스는 메시지가 어느 서비스로부터 producing 되었는지 상관없이 consumer가 메시지큐에 쌓인 메시지를 처리한다. 

 

그렇다면 메시지 큐를 왜쓰는가? 

만약 채팅 서비스에서 동기식 요청-응답 방식을 쓴다면 끊임없이 메시지를 주고받는 채팅 시스템에 유연하게 대처하지 못하게된다. 수백명의 사람이 채팅방에 들어와 있을 때 한 사람의 네트워크 상태가 좋지 않아서 그 사람이 보낸 메시지가 제대로 처리되지 않고 있는 상황이 발생하면 이로 인하여 나머지 수백명의 사람이 해당 메시지의 완전한 처리에 대한 응답이 올 때까지 메시지를 전송하지 못하게된다. 

 

이와 반대로 메시지 큐 방식은 메시지를 발행하는 클라이언트가 이용하는 서비스와 메시지를 소비하는 클라이언트가 이용하는 서비스 사이에 큐를 삽입한다. 이 큐는 데이터를 읽는데 사용되는 것이 아니라, 데이터의 상태가 변할 때 메시지를 발행하는데 사용이 된다. 즉 두개의 서비스 사이에서 중개자 역할을 하여 느슨한 결합, 확장성을 제공해준다.

 

메시지 큐의 특징:

1. 비동기: 큐에 넣기 때문에 나중에 처리할 수 있다. 

2. 비동조: 어플리케이션과 분리할 수 있다.

3. 탄력성: 일부가 실패 시 전체에 영향을 받지 않는다.

4. 확장성: 다수의 프로세스들이 큐에 메시지를 보낼 수 있다. .

 

참고) https://velog.io/@power0080/Message-Queue-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC

https://creakycogwheel.tistory.com/entry/%EC%BA%A1%EC%8A%A4%ED%86%A4-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A9%94%EC%8B%9C%EC%A7%80-%ED%81%90%EB%9E%80

'Etc. > APM' 카테고리의 다른 글

TCP / UDP  (0) 2023.02.06
[DB] 프로시저 (procedure)  (0) 2023.01.30
[APM] APM 스카우터  (0) 2023.01.27
OSI 7계층  (1) 2023.01.25
TCP/IP 소켓 프로그래밍 기초 지식  (0) 2023.01.25