SMS 메시지 발송 이중화 아키텍처
코드너리 | 2022. 03. 16
SMS 발송
사용된 기술:
간단 요약
메시지 플랫폼에는 Router라는 모듈이 있습니다. Router 모듈은 요청받은 메시지가 어떤 외부시스템에 발송 요청할지 결정하고 요청을 넘겨주는 역할을 담당합니다. 따라서 Router 모듈에서 외부 시스템 별 트래픽 비율 정보를 알고 있고, 비율에 따라 A와 B 외부 시스템으로 트래픽을 분산하도록 아키텍처를 결정하였습니다.
요구 사항
다음으로 요구되는 내용은 A 외부 시스템와 B 외부 시스템로 원하는 만큼 트래픽을 분산할 수 있어야 합니다.
- A 외부 시스템 장애 상황 시에는 B 외부 시스템로만 요청이 가도록 해야 합니다.
- B 외부 시스템 장애 상황 시에는 A 외부 시스템로만 요청이 가도록 해야 합니다.
- A 외부 시스템에서 처리할 수 있는 동시 처리량을 넘어서는 경우에는 B 외부 시스템에 트래픽을 50:50으로 분산할 수 있어야 합니다.
- 트래픽 분산 기능은 Weighted Routing Policy에 있는 트래픽 비율 정보를 바탕으로 이루어지게 됩니다.
Router 처리 단계
- message-platform-router 모듈에서 10초 주기로 Config Server에 application-name과 profile 정보를 기반으로 프로퍼티 정보를 조회합니다.
- Config Server는 요청받은 application-name과 profile 정보를 기반으로 DB에 저장된 프로퍼티 정보를 조회하여 API 응답으로 리턴합니다.
- 이 아키텍처에서는 state라는 필드를 사용해 state 값이 변경된 경우에만 Context Refresh 하도록 합니다.
-> state 값이 변경되지 않은 경우에는 Context Refresh를 실행하지 않도록 하여 비효율적으로 Bean을 재생성하는 과정을 제거하였으며, state 값에는 가장 최근에 변경된 프로퍼티의 수정시간 timestamp 값을 사용하였습니다. - 응답 정보의 state 값이 변경된 경우에는 조회된 프로퍼티 정보를 기반으로 클라이언트에
@RefreshScope
로 등록된 Bean을 재생성합니다.