피드로 돌아가기
Dev.toAI/ML
원문 읽기
Go와 ONNX 기반 71k RPS 처리 및 p95 <6ms 구현
How I Built a Real-Time Fraud Detection System That Handles 71,000 RPS at p95 <6ms
AI 요약
Context
결제 시스템의 특성상 100ms 미만의 실시간 처리와 대규모 트래픽 수용이 필수적인 상황. Python 기반의 ML 추론 환경은 성능 병목을 유발하며, 모델 업데이트 시 서비스 중단 없는 배포가 요구되는 제약 사항 존재.
Technical Solution
- Python의 학습 편의성과 Go의 런타임 성능을 결합하기 위해 XGBoost 모델을 ONNX 포맷으로 변환하여 추론 레이어 분리
- 고빈도 요청의 중복 계산을 제거하고자 LRU Cache를 전면에 배치하여 모델 추론 호출 횟수 최소화
- 런타임 모델 교체 시 Lock 경합으로 인한 지연을 방지하기 위해 Go 1.19의 atomic.Pointer 기반 HotSwap 구조 설계
- 클래스 불균형 데이터셋(Fraud 0.17%)으로 인한 왜곡을 방지하고자 ROC-AUC 대신 PR-AUC를 최적화 지표로 채택
- 예측값의 통계적 변동을 감지하여 모델 성능 저하를 실시간으로 파악하는 Drift Detection 메커니즘 구축
실천 포인트
- ML 서빙 시 Python-Go 간의 간극을 메우기 위해 ONNX와 같은 표준 인터페이스 검토 - Critical Path 내의 동기화 오버헤드를 줄이기 위해 Mutex 대신 Atomic Operation 도입 고려 - 모델 추론 비용이 높은 경우 데이터 특성에 맞는 LRU 캐싱 전략 수립 및 Hit Rate 모니터링 - 불균형 데이터셋 기반 모델 평가 시 Precision-Recall Curve 분석을 통한 지표 검증