피드로 돌아가기
Dev.toDatabase
원문 읽기
Aurora DSQL OCC 최적화로 오버셀링 0건, p99 42ms 달성
How I built a flash-sale engine that can't oversell
AI 요약
Context
대규모 트래픽 환경의 선착순 판매 시스템에서 단일 카운터 기반의 업데이트 방식은 심각한 병목 현상을 유발함. 특히 Multi-region 환경의 Eventual Consistency 모델은 데이터 복제 지연으로 인한 초과 판매(Overselling) 위험을 내포함.
Technical Solution
- Hot Row 병목 해결을 위해 단일 카운터 방식에서 개별 상품 단위의 Row 기반 모델링으로 전환
- Aurora DSQL의 Optimistic Concurrency Control(OCC) 특성을 활용하여 쓰기 부하를 전체 키 범위로 분산 설계
- RANDOM() 함수 기반의 후보 Row 추출과 원자적 UPDATE 문을 조합하여 Strong Consistency 확보
- SQLSTATE 40001 에러 발생 시 Jittered Exponential Backoff 전략을 적용한 재시도 로직 구현
- Idempotency Key 기반의 Unique Index 설정을 통해 중복 요청으로 인한 다중 결제 원천 차단
- DSQL 제약 사항인 Foreign Key 부재와 Async Index 생성 방식을 애플리케이션 레벨에서 처리하는 스키마 설계
실천 포인트
- 분산 DB 도입 시 해당 엔진의 동시성 제어 방식(OCC vs PCC)을 먼저 파악할 것 - 단일 카운터 업데이트가 필요한 로직을 개별 상태 Row의 점유 방식으로 변경 가능한지 검토할 것 - 네트워크 재시도 및 중복 클릭 방지를 위한 Idempotency Layer를 DB 제약 조건 수준에서 강제할 것 - Multi-region Active-Active 구성 시 Strong Consistency가 필수적인 비즈니스 로직인지 정의할 것