메세지 브로커 (비동기 통신)

문한성·2023년 5월 8일
0

부트캠프

목록 보기
79/123
post-thumbnail

프로세스 간 통신

  • 요청을 보내는 즉시 수신자로부터 응답이 오길 기대하는 "동기적 방법"
    • 클라이언트-서버 아키텍처의 REST(HTTP)가 대표적
  • 요청을 일단 보내놓고 수신자가 받을 때까지 보관했다가 처리하는 "비동기적 방법"
    • 수신자가 받기 전에 누군가는 메시지를 보관해놓아야 한다 → 메시지 브로커 (메시지 큐)

메시지 브로커가 필요한 이유

분산 애플리케이션에서 프로세스 간의 느슨한 결합(loosely coupled)을 제공하는 것이 가장 큰 장점입니다. 그렇다면 강하게 결합된 시스템에서의 단점은 무엇일까요? 서로 연결되어 있는 시스템 중 한 곳에서 장애가 발생했을 때 그 장애가 연결된 다른 시스템들에 영향이 갑니다.

예를 들어 다음과 같은 상황에서, Server 2에 장애 상황이 발생하면, Server 1에서 DB2로 가는 데이터가 유실됩니다.

https://s3.ap-northeast-2.amazonaws.com/urclass-images/qzaApJjakiOUv1CiBEK5u-1639904653485.png

그러나 중간에 메시지 브로커가 있다면, 한 시스템의 장애가 다른 시스템에 주는 영향을 줄일 수 있다.

https://s3.ap-northeast-2.amazonaws.com/urclass-images/dHRTjxcUuU-BUzELqydeB-1639904726531.png

Server 2에 일시적인 장애가 발생하더라도, 복구 기간 동안 메시지 브로커가 메시지를 보관해 놓기 때문에, 데이터가 유실되지 않습니다.

주요 용어

  • 메시지를 보내는 사람이 생산자(producer), 메시지를 받는 사람이 소비자(consumer)
  • 메시지를 보내는 것을 발행(publish), 메시지를 받는 것을 소비(consume)

메시지 브로커의 특징

  • 프로그램 간의 직접 연결 없음: less dependency, fault tolerant
    • 소비자 프로세스가 죽어있어도 생산자는 메시지를 보낼 수 있음
    • 생산자 프로세스가 죽어있어도 소비자는 메시지를 수신할 수 있음
  • 메시지 브로커에 있는 메시지는 소비자(수신자)가 꺼낼 때까지 안전하게 보관됨: durability
    • (프로세스가 죽어 있어도) 메시지는 소비하기 전까지는 사라지지 않음
    • 따라서, 프로그램 간 통신은 시간과 독립적임
  • 통신이 이벤트에 의해 구동될 수 있음
    • 큐의 상태에 따라 프로그램을 제어할 수 있습니다. 예를 들어 메시지가 큐에 도착하는 즉시 프로그램이 시작되도록 설정할 수 있습니다. 또는 예를 들어 큐에서 특정 우선순위 이상의 메시지가 10개가 되거나 임의의 우선순위의 메시지가 10개가 될 때까지 프로그램이 시작되지 않도록 지정할 수 있습니다.
  • 확장에 용이함
    • 메시지 브로커는 여러 큐를 만들거나, 수평적으로 확장하여 메시지 부하 증가를 처리할 수 있습니다.

메시지 브로커의 단점

  • 프로세스 간의 직접 연결에 비해 아키텍처가 복잡합니다.

메시지 브로커 선택의 기준

메시지 브로커의 종류로는 Apache Kafka, Amazon Kinesis, Amazon SQS 등이 있습니다. 어떤 메시지 브로커를 선택해야 할 경우, 다음 기준으로 선택하면 좋습니다.

  • 프로그래밍 언어 지원 여부
  • 메시징 표준 지원 여부
  • 메시지 순서 보장 여부
  • 전달 보장 여부: 어떤 종류의 전달을 보장하는가?
  • 영속성: 브로커가 고장 나도 문제가 없도록 메시지가 디스크에 저장되는가?
  • 내구성: 소비자가 메시지 브로커에 다시 접속할 경우, 접속이 중단된 시간에 전달된 메시지를 받을 수 있는가?
  • 확장성
  • 지연 시간

Question

  • 메시지 브로커의 두 가지 방식인 Queue 방식과 Topic 방식은 어떤 차이가 있나요?
  • 메시지 서비스로는 대표적으로 Apache Kafka와 Amazon SQS, Amazon Kinesis가 있습니다. 각각은 어떤 차이가 있나요?
  • 웹 서비스에서 메시지 브로커(메시지 큐)를 이용해 비동기적인 방법이 활용되는 사례를 하나 이상 찾아보고, 어떻게 활용되는지 설명하세요.

Q1

Queue 방식: 메시지 큐에 대기하고 있는 각각의 소비자는 메시지를 순서대로 처리합니다. 즉, 각각의 메시지는 하나의 소비자에게만 전달됩니다.

Topic 방식: 메시지를 구독하는 모든 소비자에게 메시지가 전달됩니다. 이는 구독자 중 하나 이상이 메시지를 처리하고 다른 구독자가 처리하지 않은 메시지는 해당 구독자들에게 계속 유지됩니다.

Q2

Apache Kafka: 대규모 스트림 데이터 처리를 위한 메시지 브로커입니다. 대규모 분산 처리를 위한 기능을 제공하며, 데이터 유실 없이 고속으로 처리할 수 있습니다.

Amazon SQS: Amazon Web Services(AWS)에서 제공하는 완전 관리형 메시지 큐 서비스입니다. 이 서비스는 대규모 분산 시스템 및 서버리스 아키텍처와 같은 클라우드 환경에서 사용하기 적합합니다.

Amazon Kinesis: AWS에서 제공하는 대규모 데이터 스트리밍 플랫폼입니다. 대규모 데이터 처리, 실시간 분석, 머신러닝과 같은 기능을 제공합니다.

Q3

이메일 발송: 이메일 발송은 웹 서비스에서 많이 사용되는 기능 중 하나입니다. 이메일 발송 요청을 메시지 큐에 저장한 후 백그라운드에서 처리할 수 있습니다. 이를 통해 이메일 발송이 느려지거나 실패할 경우, 사용자 경험이 저하되는 문제를 방지할 수 있습니다.

주문 처리: 웹 사이트나 앱에서 주문 처리 시, 주문 정보를 메시지 큐에 저장한 후 백그라운드에서 처리할 수 있습니다. 이를 통해 사용자가 대기 시간을 최소화하고 주문 처리 과정이 안정적으로 이루어질 수 있습니다.

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글