inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

작업환경 세팅

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

154

조기윤

작성한 질문수 1

0

Redis 로 문제점 해결하기 강의 7분 쯤에 나오는 설명으로,

redis 는 싱글스레드 기반으로 동작하기 때문에

 

Thread 1 에서 10:00 에서 10:02 동안 incr coupon_count 메서드가 동작한다고 했을 때 10:02분에 끝나고나서 thread 2의 incr coupon_count 가 동작한다고 말씀하셨는데요

 

이는 딱 redis 가 싱글스레드로 동작하는 시간 만큼만이 lock 이 걸린 시간이라고 보면 될까요?

 

예컨데 ApplyService 의 apply 가 싱글 스레드, 단일 요청에 딱 2분이 걸리는 메서드라고 가정하고

 

그 안에 있는 couponCountRepository.increment() 가 1초가 걸린다고 가정하면

 

100개의 요청이 동시에 들어온 경우, 전체 요청이 모두 처리되는 시간이

 

2분 + 1*100초 = 3분 40초가 걸린다고 계산하는게 맞는거죠? 2분*100이 아니라요

java docker spring-boot kafka redis

답변 1

0

최상용

조기윤님 안녕하세요.

Thread 1 에서 10:00 에서 10:02 동안 incr coupon_count 메서드가 동작한다고 했을 때 10:02분에 끝나고나서 thread 2의 incr coupon_count 가 동작한다고 말씀하셨는데요
이는 딱 redis 가 싱글스레드로 동작하는 시간 만큼만이 lock 이 걸린 시간이라고 보면 될까요?

여기서 lock 은 어떤 lock 을 말씀하시는걸까요?
강의에서 말하고자 했던것은 redis 는 순차적으로 명령을 실행하며 현재 실행중인 명령이 끝나야 다음 명령이 실행된다 였습니다!

예컨데 ApplyService 의 apply 가 싱글 스레드, 단일 요청에 딱 2분이 걸리는 메서드라고 가정하고 그 안에 있는 couponCountRepository.increment() 가 1초가 걸린다고 가정하면 100개의 요청이 동시에 들어온 경우, 전체 요청이 모두 처리되는 시간이 2분 + 1*100초 = 3분 40초가 걸린다고 계산하는게 맞는거죠? 2분*100이 아니라요

ApplyService.apply 메소드가 싱글스레드로 동작하며 메소드의 실행시간이 2분이라고 가정하고
couponCountRepository.increment() 가 1초가 걸린다고 가정한다면

100개의 요청을 처리하는데 걸리는 시간은 2분 * 100 일것같네요.

  • ApplyService.apply 는 1번에 1개의 요청밖에 처리를 하지 못합니다.

  • couponCountRepository.increment() 하는 로직은 ApplyService.apply 메소드 안에 존재합니다.

  • ApplyService.apply 는 처리하는데 2분이 걸립니다. 싱글스레드 이므로 이전 요청이 끝나고난 이후 다음 요청을 처리할 수 있습니다. 따라서 100개의 요청을 처리하는데는 2 * 100 분이 걸릴것같네요

0

조기윤

안녕하세요. 빠른 답변 감사드립니다~! ㅎㅎ

모호하게 질문드린 부분이 있는 것 같아서 내용을 조금 명확하게 정정하겠습니다.

 

먼저 lock 이라고 말씀드린 부분은 용어를 잘 못 사용한 것 같습니다.

Redis 가 싱글 스레드로 동작하는 시간 만큼 다른 Thread 가 접근하지 못하는 상황을 lock 걸린 시간이라고 표현했습니다만, 쓰레드 대기 시간 정도로 표현하는게 적절했을까 싶네요.

 

그리고 결과적으로 이 부분에서 질문드리고 싶었던 것은,

예컨데 ApplyService 의 apply 가 싱글 스레드, 단일 요청에 딱 2분이 걸리는 메서드라고 가정하고 

ApplyService 의 apply 메서드가 단일 요청 1개를 처리하는데 걸리는 시간이 2분이라고 가정하고 싶었고

 

100개의 요청이 동시에 들어온 경우, 전체 요청이 모두 처리되는 시간이 2분 + 1*100초 = 3분 40초가 걸린다고 계산하는게 맞는거죠? 2분*100이 아니라요

그런 상황에서 100개의 요청이 ThreadPoolSize 가 100인 멀티 스레드가 가능한 환경에서 한꺼번에 들어왔을 때를 전제로 전체 요청 응답 시간을 계산하고자 하였습니다.

 

제 개인적인 예상으로는 Redis 를 통해 발생하는 대기 시간이 발생하는 경우를 제외하고는 동시에 처리가 되어서

1번째 요청은 2분, 2번째 요청은 1초 대기 후(redis 처리 대기) 2분1초에 끝나고 100번째 요청은 100초대기 후 2분걸려서 3분 40초에 걸리게 되지 않을까 생각했는데 이렇게 예상하는게 맞는지 질문 드립니다~!

 

0

최상용

조기윤님 안녕하세요.
알림을 놓쳐서 답변이 늦었습니다 ㅠㅠ 죄송합니다.

그런 상황에서 100개의 요청이 ThreadPoolSize 가 100인 멀티 스레드가 가능한 환경에서 한꺼번에 들어왔을 때를 전제로 전체 요청 응답 시간을 계산하고자 하였습니다.

 

제 개인적인 예상으로는 Redis 를 통해 발생하는 대기 시간이 발생하는 경우를 제외하고는 동시에 처리가 되어서

1번째 요청은 2분, 2번째 요청은 1초 대기 후(redis 처리 대기) 2분1초에 끝나고 100번째 요청은 100초대기 후 2분걸려서 3분 40초에 걸리게 되지 않을까 생각했는데 이렇게 예상하는게 맞는지 질문 드립니다~!

멀티스레드 환경이고 스레드가 100개인 상태에서 100개의 요청이 들어온다면 말씀하신것과 비슷하게 소요될것이라고 예상됩니다.

다만, 다른 로직이 추가된다면 소요 시간은 변경될 수 있을듯합니다.

감사합니다.

ApplyService와 Consumer서비스의 db공유?

0

54

2

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

0

72

1

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

0

83

2

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

0

70

2

안되서 스트레스 받아요

-2

108

2

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

0

181

2

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

0

212

1

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

0

167

2

키생성 방식에 따른 성능

0

165

2

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

0

134

2

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

0

209

1

쿠폰 발급 개수 제한

0

181

2

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

0

223

2

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

0

274

2

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

0

293

1

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

0

306

2

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

0

230

2

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

0

398

2

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

0

381

1

도커 환경설정에 대해서

0

267

2

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

0

593

1

consumer 모듈

0

321

2

카프카 토픽 생성오류

0

380

2

redis 를 사용하여 문제점 해결하기

0

370

2