inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실습으로 배우는 선착순 이벤트 시스템

Producer 사용하기

안녕하세요 선생님 질문이 있습니다

해결된 질문

658

이재윤

작성한 질문수 8

0

먼저 강의 잘 들었습니다.

취준 중인데도 이해가 잘 돼서 좋습니다!

 

다름이 아니라 동시성 제어를 할 때 redis, kafka로도 해결할 수 있다는 것은 알겠습니다.

 

다만, Lock으로도 동시성 제어도 할 수 있지만 줄줄이 기다리기 때문에 선착순 쿠폰 같은 이슈에 대해서는 비관적 락을 걸 경우 100명까지 순차적으로 느리게 된다는 것으로 이해했는데 맞을까요?

 

제가 이해한 것이 맞다면 락을 사용하면 많이 느릴텐데 보통 어떤 경우에 락을 통해 동시성 제어를 하고, 어떤 경우에 카프카를 쓰시나요? 같은 경우라도 상황마다 다르겠지만.. 예시를 조금만 들어주실 수 있을까요?

 

잘 이해를 하지 못해서 질문 남깁니다

감사합니다

java docker spring-boot kafka redis

답변 1

1

최상용

이재윤님 안녕하세요.

분산락을 활용한다면 Lock 을 걸게 되는 범위가 너무 길어지게 됩니다.
아래와 같이 10시 00분에 제일 먼저 들어온 스레드가 락을 점유하고 10시 03분에 락을 해제 하게된다면 이후의 사용자들은 10시 3분 이후에 쿠폰발급 시도를 할 수 있게됩니다. 사용자가 많아지면 많아질수록 문제가 발생될 확률이 높아지게 됩니다.

10:00 Lock 획득
10:01 쿠폰발급 가능여부 판단
10:02 쿠폰 발급
10:03 Lock 해제

 

또한, 강의에서는 kafka 를 사용하여 "처리량 조절" 을 하는 것이지, 동시성 제어는 redis 만을 사용하여 제어합니다.
강의에서는 아래와 같이 redis 를 활용하여 동시성 이슈를 해소하고 (쿠폰 발급 수를 제어하고) 실제 쿠폰은 Kafka 에서 함으로써 처리량을 조절하였습니다.

1. redis 를 활용하여 동시성 이슈를 해소 하였습니다.
2. 쿠폰 발급이 가능한 유저들에 대해 쿠폰발급을 API 에서 단기간에 많이한다면 데이터베이스에 부하를 줄 수 있습니다.
3. 이 때 Kafka 를 활용하여 "처리량 조절" 을 한다면 데이터베이스에 부하를 줄일 수 있습니다.
Kafka 를 사용한다면 지연시간이 존재할 수 있으므로 바로 생성이 되지 않을 수 있다는 문제점은 존재합니다.

 

Redis 를 사용해서도 동시성 제어를 할 수 있고, Kafka 를 활용하여 동시성 제어를 할 수는 있습니다.
대부분의 케이스는 Redis 를 활용하여 동시성 제어를 할 수 있을 것 같습니다.
대표적인 예시로는 영화석 좌석 예매 같은 것들이 있을 것 같습니다.

Kafka 를 활용할때는 키를 이용하여 동일한 Consumer 에서만 데이터를 가져갈 수 있게하고, 순차적으로 처리하게 했을 때 동시성 문제를 해결 할 수 있는 상황이라면 고려할 수 있을 것 같습니다.

다만, 저러한 상황일때도 redis 를 우선적으로 고려할 것 같습니다.

혹시 제 답변이 부족했거나, 추가적인 질문이 있으시다면 댓글 혹은 질문 남겨주세요!
감사합니다.

ApplyService와 Consumer서비스의 db공유?

0

56

2

consumer가 topic을 전부 사용하기 전에 사용자에게는 쿠폰이 발급된것으로 확인하는 과정에서 발생가능한 문제.

0

77

1

쿠폰에 관련되어서 좀 더 참고할만한 자료가 있을까요?

0

86

2

흐름정리 제가 이해한게 맞나요?

0

73

2

안되서 스트레스 받아요

-2

111

2

프로젝트 진행할때 모듈로 추가하는 이유가 궁금합니다!

0

185

2

Redis 활용하기 문제점 해결하기 부분이 이해가 잘 안됩니다...

0

213

1

카프카를 도입하고 난 뒤 로그로 보여지는 장점을 발견하지 못하고 있습니다.

0

167

2

키생성 방식에 따른 성능

0

168

2

사용자 동선에 대한 트랜잭션 문의

0

135

2

강사님 강의를 듣고 실제 프로젝트에서 이벤트 응모 시스템을 만들어 봤습니다.

0

210

1

쿠폰 발급 개수 제한

0

183

2

ApplyService 의 총 처리 시간이 궁금합니다.

0

154

1

쿠폰 생성 에러 처리에 관해서 질문이 있습니다.

0

224

2

마지막에 하신 테스트 자체는 실패하는 게 맞는거죠??

0

276

2

안녕하세요 질문 있습니다!

0

295

1

쿠폰 발급 유저 흐름에 대한 질문

0

308

2

수량 조절에 대한 질문이 있습니다.

0

231

2

kafka Producer 실행 중 에러 시 redis count 정합성 이슈

0

398

2

test 과정에서 오류가 발생합니다.

0

383

1

도커 환경설정에 대해서

0

269

2

Redis의 INCR 사용 해도 Race condition이 잡히지 않는 문제

0

599

1

consumer 모듈

0

322

2

카프카 토픽 생성오류

0

383

2