logo
logo
SMS 메시지 발송 이중화 아키텍처
코드너리  |  2022. 03. 16
SMS 발송
사용된 기술:
kafka-image
springboot-image
spring-image
mysql-image
content

간단 요약

메시지 플랫폼에는 Router라는 모듈이 있습니다. Router 모듈은 요청받은 메시지가 어떤 외부시스템에 발송 요청할지 결정하고 요청을 넘겨주는 역할을 담당합니다. 따라서 Router 모듈에서 외부 시스템 별 트래픽 비율 정보를 알고 있고, 비율에 따라 A와 B 외부 시스템으로 트래픽을 분산하도록 아키텍처를 결정하였습니다.

요구 사항

다음으로 요구되는 내용은 A 외부 시스템와 B 외부 시스템로 원하는 만큼 트래픽을 분산할 수 있어야 합니다.

  • A 외부 시스템 장애 상황 시에는 B 외부 시스템로만 요청이 가도록 해야 합니다.
  • B 외부 시스템 장애 상황 시에는 A 외부 시스템로만 요청이 가도록 해야 합니다.
  • A 외부 시스템에서 처리할 수 있는 동시 처리량을 넘어서는 경우에는 B 외부 시스템에 트래픽을 50:50으로 분산할 수 있어야 합니다.
  • 트래픽 분산 기능은 Weighted Routing Policy에 있는 트래픽 비율 정보를 바탕으로 이루어지게 됩니다.

Router 처리 단계

  1. message-platform-router 모듈에서 10초 주기로 Config Server에 application-name과 profile 정보를 기반으로 프로퍼티 정보를 조회합니다.
  2. Config Server는 요청받은 application-name과 profile 정보를 기반으로 DB에 저장된 프로퍼티 정보를 조회하여 API 응답으로 리턴합니다.
  3. 이 아키텍처에서는 state라는 필드를 사용해 state 값이 변경된 경우에만 Context Refresh 하도록 합니다.
    -> state 값이 변경되지 않은 경우에는 Context Refresh를 실행하지 않도록 하여 비효율적으로 Bean을 재생성하는 과정을 제거하였으며, state 값에는 가장 최근에 변경된 프로퍼티의 수정시간 timestamp 값을 사용하였습니다.
  4. 응답 정보의 state 값이 변경된 경우에는 조회된 프로퍼티 정보를 기반으로 클라이언트에 @RefreshScope로 등록된 Bean을 재생성합니다.
Copyright © 2025. Codenary All Rights Reserved.