피드로 돌아가기
Dev.toBackend
원문 읽기
Rust Arena 기반 설계로 P99 Latency 2.1s에서 48ms로 97% 개선
When the Treasure Hunt Engine ate my weekend
AI 요약
Context
글로벌 헌트 이벤트 중 보상 테이블 확장에 따른 메모리 압박으로 P99 Latency가 2.1s까지 급증한 상황. Ruby 런타임의 Garbage Collection(GC) 부하와 jemalloc 할당 정체가 시스템 병목으로 작용하며 인프라 확장 및 캐싱 전략으로는 해결 불가능한 런타임 제약 발생.
Technical Solution
- Ruby의 객체 해석 및 Dispatch 오버헤드 제거를 위해 핵심 로직을 Rust로 재작성
- 메모리 단편화 및 GC 오버헤드 원천 차단을 위해 Flat Arena 구조의 u32 인덱스 및 Precomputed Bounding Box 설계
- 데이터 접근 최적화를 위해 BTreeMap 기반 Pruning 후 Hot Path에서 packed_simd 크레이트를 통한 Linear Scan 처리
- jemalloc의 스톨 현상 해결을 위해 Large-page 지원 mimalloc 도입 및 Treasure Arena 격리
- 데이터 구조를 단순 Raw Slices로 구성하여 Boxed 객체 생성을 배제한 Zero-GC 아키텍처 구현
실천 포인트
1. P99 Tail Latency 급증 시 단순 쿼리 최적화 전 런타임 GC 로그 및 Allocator Stall 여부 확인
2. 대규모 데이터 처리 시 Heap-allocated 객체 대신 Raw Slices 기반의 Arena Allocation 검토
3. 성능 분석 시 단순 Profiler보다 eBPF 기반의 Heap Flamegraph를 통한 Malloc 경로 추적 권장
4. SIMD 활용 가능 여부를 판단하여 Hot Path의 루프 처리 방식 최적화