Skip to content

seongHyun-Min/coupon-system-kafka

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

coupon-system-kafka

카프카를 이용한 선착순 이벤트 시스템

feature-coupon

요구사항

  • 이벤트: 선착순 1,000,000명에게 할인 쿠폰 제공
  • 조건:
    1. 선착순 1,000,000명에게만 쿠폰 제공
    2. 1,000,000개 이상 쿠폰 지급 금지
    3. 순간적으로 몰리는 트래픽을 버틸 수 있어야 함

변경 내용

  1. 이벤트 초기 구현 추가 🚀:

    • 할인 쿠폰을 선착순 1,000,000명에게 제공하는 이벤트를 위한 초기 구현 추가
  2. 다중 요청 동시성 문제 발생 🚧:

    • 다중 요청 시 동시성 문제로 인해 쓰레드 간 레이스 컨디션이 발생함
image
  1. 현재 상태 ⚠️:
    • 초기 구현으로, 다중 요청 시 동시성 문제를 고려하지 않은 상태

다음 단계 계획

  • 동시성 문제 해결을 위해 레디스를 사용하여 데이터 동기화 구현 🛡

feature-redis

요구사항

  • 공유하는 값에 동시 연산을 하게 되면 동시성 문제가 발생하여 의도치 못한 값을 얻게 되어 버그를 유발할 수 있다.
  • 물론 트래픽이 적을 경우도 문제가 발생하지만 특히 동시에 여러 연산이 자주 일어나는 대규모 시스템에선 문제가 발생할 가능성이 크다.

변경 내용

동시성 문제 해결을 위해 레디스를 사용하여 데이터 동기화 구현 🛡

  • 락을 활용하여 구현한다면 발급된 쿠폰 개수를 가져오는 것부터 쿠폰을 생성하는 과정까지 락을 걸어야합니다.

  • 그렇게 된다면 락을 거는 구간이 길어져서 성능이 떨어지는 현상이 발생하게 된다.

  • 이 프로젝트의 핵심 키는 쿠폰 개수

  • 발급된 쿠폰의 개수를 제어하기 위해 incr 명령어를 사용한다.

  • 레디스로 Atomic한 연산을 보장할 수 있게하여 안전한 어플리케이션을 구현

  • INCR 명령어는 여러 서버가 동시에 명령을 날려도 synchronized 키워드를 쓴 것 처럼 명령어가 묶여서 실행되어 Atomic이 보장됨

  • 분산락을 건다는 것은 병목 지점을 만드는 것으로 락을 걸지 않을 방법이 있고 해결할수 있는 방법이 있다면 사용!!!

  • Redis를 활용한 쿠폰 개수 제어 🚀

    Redis의 INCR 명령어를 활용하여 쿠폰의 발급 개수를 안전하게 증가시키고, 동시에 발생하는 요청을 순차적으로 처리 이를 통해 여러 클라이언트가 동시에 쿠폰을 발급하는 시나리오에서도 데이터의 일관성을 유지

image

다음 단계 계획

  • 발급하는 쿠폰의 개수가 많아지면 많아질수록 RDB에 부하 🚧
  • 사용하는 RDB가 쿠폰 뿐만 아니라 다양한 곳에서 사양하고 있다면 서비스 장애 🛡
  • 카프카를 사용하여 위 문제를 해결 🛡

feature-kafka

요구사항

  • 기존 로직은 쿠폰 발급 요청이 들어오면 레디스를 활용해서 쿠폰의 발급 개수를 가져온 후에 발급이 가능하다면 rdb에 저장하는 방식을 사용한다.

  • 그러나 발급하는 쿠폰의 개수가 많아지면 많아질수록 RDB에 부하를 주게 된다.

  • 만약 사용하는 RDB가 쿠폰 뿐만 아니라 다양한 곳에서 사양하고 있다면 서비스 장애까지 발생할수 있다.

변경사항

  1. Kafka 사용 이유
  • 순간적으로 몰리는 트래픽에 대해 대응하기 위해 쿠폰을 발급을 요청하는 API와 실제 쿠폰 발급을 생성하여 저장하는 모듈을 분리


  • AOP(Spring Aspect-Oriented Programming) 스프링 이벤트 리스너를 사용할 수 없는 멀티모듈 구조에서 이벤트 기반 아키텍처를 구현하기 위해 카프카를 선택

  • 카프카는 분산형 스트리밍 플랫폼으로, 다양한 모듈 간의 통신에 유연하게 활용될 수 있음

  • 카프카의 기본구조는 프로듀서, 토픽, 컨슈머

image

About

카프카를 이용한 선착순 이벤트 시스템

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages