로직 세분화 하기
예매하기 → 좌석 선택 (락 먹이기) → 결제하기
- redis
- redis + kafka
카프카로 맨 처음에 받고 순서 보장이 되면 redis로 넘기고 락을 먹이는?
redis에서 애초에 받으면 끝인건가…?
만약에 카프카로 1000명을 받았는데 10명이 겹쳐서 순서가 나열되어있는데 (순서 보장)
redis로 넘어갔는데 취소하면 그 다음 사람이 받는 것 (동시성 제어)
- 취소하면은 redis 락 시간이 사라질때인데, 이거는 어떻게 할지
- redis 유효 시간 TTL 이걸로 사라질텐데 몇분으로 할 지? 5~10분으로
kafka 동시성 제어는 되는데 락을 못먹인다?
예매하기 버튼을 클릭할 때 순서 보장 (kafka)→ 좌석 선택은 순서 보장하지 않고 먼저 누른 사용자가 선점 (redis) → 결제 ( 취소한다면 lock ttl로 취소 처리 )
티켓을 어떻게 처리 할 건지?
태훈님
- 티켓에 이미 데이터를 넣고 where을 줄이자.
영웅님 - 티켓에 데이터 안넣고 where을 넣자. 인덱싱 박자
좌석수 변경이 됐을경우 3만건이 1만건으로 됐을 때, 삭제 하고 다시 넣어줘야함
select count에 걸어야한다. 0이면 insert를 해주는
user_id가 null인지 확인 후 update를 해줄텐데 비슷한 방식이지 않을까…
1000만건을 넣고 시작을 할건지 아니면 동시성제어 및 기능을 구현하고 시작을 할건지
1000만건을 넣고 시작을 할 경우에는?
- 데이터가 확실히 덤프 데이터다. why 천만개의 좌석이 생기거나, 천만명의 유저가 필요
동시성 제어 및 기능 구현 후 시작 하면은? - jmeter로 일단 데이터를 넣으면서 테스트
기능 구현을 어떻게 진행 하는지?
- 비어있는 좌석들 List 조회 (예매)
- 결재된 기존 티켓을 not in을 해서 가져오는지?
- 속도면에서 좋은 것을 찾아서 하거나 리팩토링 진행하면 되니
- 일단 비어 있는 좌석들 List 조회를 하면 됨 - 비어있는 좌석을 선택 (락)
- 카프카 파티션을 1개만 사용, Redis 분산 락
- 병렬 소비자는 적용 나중에 하는걸로
- 결재 했을 때 락 해제
티켓이란 테이블이 view단에 보여줘된다고 생각을 하면 인터파크는 남은 좌석을 뿌려준다 현재 ERD로는 한계가 있다. 어떻게 할 지?
- 예매 테이블이 생긴 이유가 남은 좌석 때문에 생김
- 이게 맞는지? 다른 방법은 없는지? 예매 테이블이 아닌 다른테이블도 생각을 해봐야함
- N:M 으로 가는게 맞는지 ?
- 1:N은 왜 안되는지?
좌석 수를 차감을 해야한다?
왜why? a,b,c 좌석번호 없이 그냥 예매하면은 바로 된다. 좌석을 선택을 안하고 차감을 해서 0개면은 더 이상 없죠 티켓이
반대로why? a,b,c 좌석번호가 있어 이미 좌석번호를 나열을 해놨어 예를들면 1~50번까지 그러면 의미가 있는가 차감이 47번 48번 예매를 48개가 남는데 차감해서 의미가 있는가 무엇을 체크하는가…?
2번 공연장에 시트가 A,B,C 예매 테이블에는 남은 좌석을 가져오기 위한 테이블 id, 티켓id, 행사장id, 행사장시간id, 좌석id, 좌석번호1~50까지
태훈님이 말했던게 티켓에 이미 좌석번호를 나열해서 저장하는걸 말씀하신게 아닐까
ERD 변경
남은 좌석을 가져올려면 기존 ERD를 수정해야 했음
예매 레디스 적용 방안
예매테이블에 좌석 번호를 저장을 하는데 매진 되지 않은 상태로 공연이 진행 불필요한 row가 생긴다.
레디스로 예매테이블을 대체하면은 TTL로 사라지기에 불필요한 row가 사라짐.
(TTL을 행사 종료일까지 지정하면 됨)
레디스에 행사 생성시에 행사아이디, 시간아이디, 좌석아이디, 좌석번호를 미리 저장을 하여서 예매를 결재까지 정상적으로 끝나면 소거 하는 방식으로 진행
- 레디스에 저장을 어떻게 해야하는지?
- redis-stack을 사용하면 JSON형식으로 저장이 가능
- 서버를 별개로 진행하는게 시간 절약이 될 것 같음.
- RedisInsight로 데이터를 시각화하고 최적화하기 위한 강력한 도구사용
'항해99' 카테고리의 다른 글
항해99 실전 프로젝트 (15일차) (0) | 2024.02.16 |
---|---|
항해99 실전 프로젝트 (14일차) (0) | 2024.02.15 |
항해99 실전 프로젝트 (12일차) (0) | 2024.02.08 |
항해99 실전 프로젝트 (11일차) (0) | 2024.02.07 |
항해99 실전 프로젝트 (10일차) (0) | 2024.02.06 |