-
Notifications
You must be signed in to change notification settings - Fork 2
1차: 요구사항 개발
Park minji edited this page Sep 4, 2024
·
24 revisions
- 발생 지점: 티켓 구매 시 현재 재고 확인 후 재고 감소하는 로직
-
원인: 현재 재고 수보다 더 많은 스레드가 재고 확인 시에는 재고가 존재함을 확인하고 재고를 차감하는 과정에서 실제 재고 수량보다 더 많은 구매가 이루어질 수 있음
- Check-And-Act 패턴
-
해결: 선착순이어야 하고, 동시 요청이 많은 기능이므로 티켓 재고 확인 시 mysql의 select for update를 사용하여 해결함
- 낙관락은 선착순이 보장되지 않고, 동시 요청에서 재시도 관련 부하가 더 발생하므로 사용하지 않음
- 쿼리 성능 분석
- 인덱스 최적화
- 커넥션 풀 설정
- 캐시 전략 정의
- Caffeine 캐시 활용
- 캐시 무효화 및 동기화 전략
- 동시 접속자 수: 3000명, 5000명, 7000명
-
시나리오: 동시 접속자들이 다음 순서대로 api 요청
-
- 티켓 구매 권한 획득
-
- 티켓 구매 미리보기 조회
-
- 티켓 구매
- 참고) 현재 api 요청 실패 시 다음 api를 요청하지 않음
-
- 검증: 상태 코드가 200인지 여부, 티켓 구매 성공한 요청 수와 mysql 티켓 재고 수 일치 여부
- 핵심 지표: 각 api 응답 시간
- 티켓 구매 미리보기 조회, 티켓 구매 권한 획득, 티켓 구매 순으로 api 응답 시간이 짧음
- 티켓 구매 미리보기 조회 api의 응답 시간이 긴 이유는 티켓 구매 권한 획득 api의 응답 시간이 길기 때문일 수 있음
- tomcat이 현재 처리할 수 없는 요청은 accept queue에 저장되는데, accept queue에 저장된 요청은 처리 진행 중인 요청이 끝나야 처리되므로 처리 진행 중인 요청의 처리 시간만큼 딜레이가 발생하기 때문
- 티켓 구매 미리보기 조회 api의 응답 시간이 긴 이유는 티켓 구매 권한 획득 api의 응답 시간이 길기 때문일 수 있음
티켓 구매 권한 획득 시 티켓 재고 수 차감 로직의 락 병목 해결 필요