inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Hệ thống sự kiện đến trước được phục vụ trước để học thông qua thực hành

Cài đặt môi trường làm việc

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

154

audition365695

1 câu hỏi đã được viết

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

Câu trả lời 1

0

169developer9973

조기윤님 안녕하세요.

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

audition365695

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

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

 

먼저 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

169developer9973

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

그런 상황에서 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

74

1

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

0

83

2

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

0

70

2

안되서 스트레스 받아요

-2

108

2

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

0

183

2

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

0

213

1

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

0

167

2

키생성 방식에 따른 성능

0

167

2

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

0

134

2

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

0

209

1

쿠폰 발급 개수 제한

0

182

2

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

0

224

2

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

0

274

2

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

0

293

1

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

0

307

2

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

0

230

2

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

0

398

2

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

0

381

1

도커 환경설정에 대해서

0

268

2

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

0

595

1

consumer 모듈

0

322

2

카프카 토픽 생성오류

0

382

2

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

0

372

2