카테고리 없음

Radiata 3주차 WIL - 분산락에서 Redis Increment 로

wonow_ 2024. 10. 14. 11:40

 

비관적 락에서 분산 락으로 온 이유

 

비관적 락에서 분산 락으로 온 이유는 DB의 CPU 점유율 때문이다.

 

비관적 락은 본질적으로 DB에 Select 문을 날려야 락을 걸 거나 확인 할 수 있는 구조여서, DB 에 많은 부하가 간다.

그래서 Redisson 의 Pub - Sub 구조를 이용해 레디스에서 메서드에 락을 걸어 점유하지 못하게 했다.

 

분산 락은 느렸다.

대규모 트래픽 관점에서 너무 느렸다.

RPS 200 ~ 250 대가 나왔다.

 

쿠폰 10000 장을 발급했을 때 최소 50초나 기다려야한다.

 

 

이에 따른 응답 시간도 길어졌다.

 

실제 이벤트를 진행하면 어느정도 RPS 가 나와야 할까?

 

여기어때 네고왕 당시

 

TPS 3600+..

 

내가 구현한 분산락으로는 어림도 없다.

더욱 빠른 방법을 갈구해야한다.

 

이렇게 해볼까?

 

 

쿠폰 API에 요청이 들어오면 Redis 를 통해 발급량을 올리고 Topic 을 하나 만들고 응답한다.

만약 Redis 쿠폰의 발급량이 최대 발급량을 초과하면 예외를 반환한다.

 

Topic 은 Consumer 가 처리를 한다.

Redis를 읽어와서 Redis 에 있는 발급량으로 업데이트 하는 것이다.

 

즉 DB를 메인으로 쓰는 게 아닌, Redis 를 메인, DB를 백업용 정도로만 가져가는 것이다.

 

그러면 올릴 수 있다... 처리량...