Redis Pub/Sub으로 쿠폰 발급, 속도 2.2배 UP!
by DD
2년 전
조회수 6
Redis Pub/Sub을 활용하여 올리브영 쿠폰 발급 시스템을 비동기적으로 개선함
쿠폰 과발급 및 미발급 문제 해결을 위해 Redis List 자료구조를 도입
2023년 6월 올영세일 기간, 분당 최대 쿠폰 발급량 2.2배 증가 및 대기 시간 단축
비동기 쿠폰 발급 아키텍처
기존 동기 방식의 쿠폰 발급은 DB Connection 자원 소모가 컸다. Redis Pub/Sub을 도입하여 쿠폰 발급 요청을 비동기적으로 처리하도록 변경했다. 구체적으로, 쿠폰 발급 Worker가 Pub/Sub 메시지를 구독하고, 메시지 수신 후 DB에 INSERT하는 구조를 갖는다.
과발급 및 미발급 문제 해결
다중 Worker 환경에서 쿠폰 과발급 문제가 발생했다. Redis Pub/Sub의 특성상 메시지 중복 수신이 원인이었다. 따라서, 각 Worker에 일련번호를 할당하고, Redis List를 활용하여 메시지 유실을 방지했다. LPop을 통해 정확히 하나의 Worker만 처리하도록 개선했다.
Redis List를 활용한 안정성 확보
Redis List를 사용하여 쿠폰 발급 데이터의 유실을 방지하고, 데이터 정합성을 확보했다. RPush를 통해 데이터를 List에 추가하고, Worker는 주기적으로 List 크기를 확인하여 LPop으로 데이터를 처리한다. 따라서, 쿠폰 발급 처리의 안정성을 높였다.