MicroService Architecture ‐ Asynchronous Communications Patterns - thought-corner/Backend-PlayGround GitHub Wiki

MicroService Architecture - Asynchronous Communications Patterns

비동기 통신에서의 메시지 처리 방법

  • Single-Receiver Meesage-based Communication(단일 수신자 비동기 일대일 통신)
  • One to One 또는 Point to Point
  • 단일 생산자와 단일 수신자(Command Pattern으로 구현)
  • Multiple-Receiver Message-based Communication(여러 수신자가 있는 게시/구독 메커니즘)
  • 생산자가 메시지를 발행 → 메시지 브로커 시스템이 메시지를 구독
  • 이벤트 기반 마이크로서비스 아키텍처 패턴
  • 생산자는 소비자를 알 필요가 없어야 한다. → 서비스 간의 종속성을 만들지 않기 위함이다.
  • One to Many → 여러 마이크로서비스에서 소비하며 각 요청은 0~N개의 수신자가 처리할 수 있으며, 메시지는 토픽에 영구적으로 유지된다.
  • 게시자/구독자 모델
    • 비동기적으로 메시지 통신이 가능하다.
    • 논리적 액세스 지점인 Topic을 정의한다.
  • Fan-Out
    • Pub/Sub Messaging Pattern
    • 여러 목적지에 병렬로 fan-out
    • 각 목적지는 메시지를 병렬로 작업 처리한다.
    • 여러 수신자에게 동일한 메시지를 전달한다.

Publish/Subscribe 패턴

  • Pub/Sub Messaging - 비동기 서비스 간 통신, Topic에 발행된 모든 메시지는 Topic의 모든 구독자에게 즉시 수신된다.
  • Event Driven Architecture - 이벤트 기반 아키텍처를 활성화, 애플리케이션을 분리해 성능 안정성 및 확장성을 유도한다.
  • 애플리케이션은 개발, 배포 및 유지 관리가 더 쉽도록 분리할 수 있다.

Topic-Queue Chaining

  • 서비스가 실패할 경우 → 데이터 손실 방지를 위한 서비스 간의 버퍼링 로드 밸런서 역할(Queue를 사용)
  • 서비스 다운/예외 발생/유지 관리를 위해 오프라인 전환될 때 → 이벤트가 손실되거나 사라질 수 있는데 이렇게 되면 구독자 서비스가 가동되어도 처리가 불가능하다.
  • AWS SQS Queue에 저장하면 메시지가 손실되지 않는다.
  • 요청 시작 → 클라이언트 애플리케이션이 API Gateway를 통해 HTTP 요청을 보낸다.
  • 주문 처리 및 기록 → Lambda가 요청을 받아 처리 후 주문 정보를 DynamoDB에 저장해 상태를 기록한다.
  • 이벤트 발행 → 서비스가 메시지를 Amazon SNS로 발행한다.
  • 필터링 및 분산 → SNS에 설정된 Event Filter를 통해서 필요한 메시지만 선별되고 선별된 메시지는 연결된 여러 개의 Amazon SQS 대기열로 복제되어 전달된다.
  • 비동기 소비 - 각 목적에 맞는 서비스들이 SQS에서 메시지를 가져가 독립적으로 작업을 수행한다.