비관적 락에서 분산 락으로 온 이유
비관적 락에서 분산 락으로 온 이유는 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를 백업용 정도로만 가져가는 것이다.
그러면 올릴 수 있다... 처리량...