본문 바로가기
역량 UP!/Architecture

비동기 아키텍처(=Asynchronous Architecture)

by 태하팍 2025. 8. 21.
반응형
  • 비동기처리
    • 메세지 큐를 기반(MQ, RABBIT MQ, KAFKA, SQS etc)
    • 응답을 기다리지 않고 바로 리턴
    • 큐 뒤에 다수의 워커가 메세지를 읽어서 처리(워커수를 조정하여 대용량 처리가 용이)
  • 비동기 처리 메세지 패턴

  • Fire&Forget
    • pattern : Producer가 메세지를 그냥 큐에 던져놓고 응답 안 기다림
    • 소비여부는 신경 안씀
    • 일반적인 MQ 모델에 가까움
      • Producer -> Queue -> Consumer
    • ex) ActiveMQ, SQS, RabbitMQ의 기본 Queue

 

  • Publish&Subscrbe
    • pattern : Producer가 메시지를 발행(Publish)하면, 여러 Consumer들이 각각 구독(Subscribe)해서 받아감
    • 같은 메세지를 여러 Consumer가 동시에 받을 수 있음.
      • ex) Kafka, RabbitMQ(Fanout/ Topic Exchange), Google Pub/Sub 등

 

    • Routing
      • 메시지를 특정 조건(라우팅 키, 토픽, 헤더)에 따라 필요한 Consumer에게만 전달
      • Exchange란?
        • AMQP(Advanced Message Queuing Protocol)표준에서 정의 된 개념
        • Producer로부터 수신한 메세지를 적절한 큐 또는 또 다른 Exchange로 분배하는 라우터의 기능을 함.
        • Producer는 메시지를 직접 큐에 넣지 않고 Exchange에 보냄
        • Exchange가 라우팅 규칙에 따라 적절한 큐로 전달
        • tip.
          • Routing key : 발행된 메시지와 큐가 라우팅 테이블을 통해 매칭되는 key
            Publisher/Producer로 칭하는 송신부에서 송신한 메시지 헤더에 포함되는 것으로 가상의 주소라고 보면 됨.
        • Direct Exchange
          • Routing key가 정확히 일치하는 큐로 메세지 전달
            • ex) RoutingKey=error 면 error큐, info면 info큐로 전달
        • Fanout Exchange
          • Routing Key 무시
          • 연결된 모든 큐에 브로드캐스트
            • ex) 전체 알림 전송, 공지사항 발송
        • Topic Exchange
          • Routing Key 패턴 매칭(와일드 카드 *, # 지원)
            • ex) order.* -> order.create, order.update
        • Headers Exchange
          • Routing Key 대신 메세지 헤더를 기반으로 전달 
            • ex) 메세지 헤더 {format=pdf, type=report} ->  이 조건을 구독한 큐로만 전송.
    •  
     

비동기 에러처리 패턴

  • Error Hospital(병원, Hospital에서 컨셉 빌려옴.)
    • 환자(=문제가 생긴 메세지)가 발생하면 그냥 버리지 않고 특별한 공간(병원 큐)으로 옮김.
      • Worker에서 메세지 처리 시 오류가 날 경우 -> 에러큐로 보냄
  • 에러큐에서 보통 재시도 후 안되면 사람에게 리포팅해서 차후 재처리
  • 메시지 유실이 되면 안되는 엔터프라이즈 시스템에서 많이 사용 함.

 

반응형