메시지 브로커를 이용한 비동기식 통신

박형석·2022년 4월 11일
1

메시지 브로커란?

송신자의 메시지 프로토콜 형식으로부터의 메시지를 수신자의 메시지 프로토콜 형식으로 변환하는 중간 컴퓨터 프로그램 모듈

메시지 브로커들은 응용 소프트웨어가 이전에 정의해둔 메지시를 교환할 수 있는 전기통신의 요소 또는 컴퓨터 네트워크이다.

동기적 방법과 비동기적 방법

요청과 그에따른 응답 및 반응을 처리할 때 두가지의 방법이 있다.

  • 요청을 보내는 즉시 수신자로부터 응답이 오길 기대하는 동기적 방법
  • 요청을 일단 보내놓고 수신자가 받을때까지 보관했다가 처리하는 비동기적 방법

동기적 방법으로는 대표적으로 클라이언트-서버 아키텍처의 REST(HTTP)가 대표적이다. 예를 들어 세가지의 단계가 있는 작업이 있다고 가정할 때, 동기적 방법은 A를 완료한 사건을 B를 시작할 트리거로 삼아 순차적으로 진행하게 된다.
즉, 어떤 작업을 요청했을 때 그 작업이 종료될때 까지 기다린 후 다음 작업을 수행하는 방식이다.

비동기적 방법은 오늘 소개할 메시지 브로커(메시지 큐)라는 것이 있다.동기적방법과 달리 전 단계의 작업완료를 기다리지 않아도 되기 때문에 상태 또는 메시지를 보관할 곳이 필요하다. 그래서 메시지 큐를 이용한다.

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

분산 애플리케이션에서 프로세스 간의 느스한 결합을 제공하는 것이 가장 큰 장점이다.
만약, 강하게 결합된 시스템에서 장애가 발생한다면 어덯게 될까?

예를 들어 다음과 같은 사진에서 서버2에 장애가 발생하면 서버1에서 서버2로 가는 데이터유실이 발생하게 된다.

이때 메시지 브로커가 중간단계 역할을 하여 장애가 발생하더라도 메시지 브로커에 보관을 해놓기 때문에 데이터가 유실되지 않는다.

메시지 브로커의 특징

용어

  1. 생산자: 메시지를 보내는 사람
  2. 소비자: 메시지를 받는 사람
  3. 발행: 메시지를 보내는 것
  4. 소비: 메시지를 받는 것

특징

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

메시지 브로커 툴

대표적인 메시지 브로커 세가지에 대해 알아보자.

  • Apache Kafka
  • Amazon SQS
  • Amazon Kinesis

Apache Kafaka

Apache Kafaka는 고성능 데이터 파이프라인, 스트리밍 분석, 데이터 통합 및 미션 크리티컬 애플리케이션에 수천 개의 회사가 사용하는 오픈 소스 분산 이벤트 스트리밍 플랫폼이다.

핵심기능

  • 높은 처리량: 대기시간이 2ms 미만인 머신 클러스터를 사용하여 제한된 네트워크 처리량으로 메시지를 전달한다.
  • 확장성
  • 영구 저장소
  • 고가용성

카프카를 쓰는이유

  • 실시간 트랜잭션(OLTP) 처리와 비동기 처리가 동시에 이루어 지지만 통합된 전송 영역의 부재로 복잡도가 증가
  • 파이프라인 관리가 어려움.

그래서 카프카가 발신자와 수신자를 연결해준다.

  • 발신자(Publish): 카프카에게 데이터를 전송하기만 하면 된다.
  • 수신자(Subscribe): 수신자는 카프카에 원하는 토픽을 구독한다.

Aws SQS

AWS SQS는 마이크로서비스, 분산시스템 및 서버리스 애플리케이션을 쉽게 분리하고 확장할 수 있도록 지원하는 완전관리형 메시지 대기열 서비스이다.

장점

관리 오버헤드 제거

AWS는 가용성과 확장성이 뛰어나고 선 결제 비용이 없어 설치 및 구성하는 시간과 비용을 절약할 수 있다. 그래서 신속하고 효율적인 구축 및 확장을 할 수 있다.

안정적인 메시지 전달

SQS를 사용하면 애플리케이션 구성요소를 분리할 수 있어서 구성요소가 독립적으로 실행되고 시스템의 전체 내결함성이 향상된다.

보안

SQS에서는 서버측 암호화를 통해 각 메시지 본문을 암호화하여 민감한 데이터를 교환 할 수 있다.

탄력적, 비용 효율적인 확장

AWS를 활용하여 필요에 따라 동적으로 확장된다.그리고 사용할 수 있는 대기열당 메시지 수에 제한이 없으며 표준 대기열은 거의 무제한의 처리량을 제공한다.

AWS Kinesis

AWS Kinesis Data Streams는 모든 규모의 데이터 스트림을 쉽게 캡쳐, 처리 및 저장할 수 있는 서버리스 스트리밍 데이터 서비스이다.

특징

  • 서비스형
  • pull방식 및 push 방식 둘다 사용가능
  • 스트림 데이터와 같은 빅데이터를 다루는 데 더욱 유리
  • 데이터 소비 행위 자체를 replau할 수 있음
  • 데이터를 바로 삭제하지 않고 며칠 후에 만료 되도록 설정할 수 있음
  • 처리량에 대한 프로비저닝 필요
profile
Better Than Yesterday

0개의 댓글