피드로 돌아가기
The Day We Realized Events Were the Bottleneck (And Why We Moved to Rust)
Dev.toDev.to
Backend

Rust 포팅을 통한 p99 레이턴시 1.2s에서 38ms로의 극적 단축

The Day We Realized Events Were the Bottleneck (And Why We Moved to Rust)

pretty ncube2026년 5월 27일3advanced

Context

Scala 기반 Kafka Streams와 RocksDB를 사용한 분산 이벤트 처리 시스템에서 500k EPS 부하 시 p99 레이턴시 급증 및 JVM OOM 발생. G1GC의 잦은 Pause와 JIT 컴파일 스톨로 인한 예측 불가능한 성능 저하가 임계점에 도달한 상황.

Technical Solution

  • Predictable Latency 확보를 위해 JVM의 GC 오버헤드를 완전히 제거한 Rust 기반 Hot Path 재설계
  • Tokio Async Runtime을 도입하여 고성능 비동기 이벤트 라우팅 및 집계 로직 구현
  • RocksDB의 Blocking fsync 병목 해결을 위해 500ms 주기로 Disk Flush를 수행하는 sled 임베디드 KV 스토어 채택
  • LLVM의 SIMD 명령어를 활용한 Join 연산 최적화로 CPU 처리 시간 50% 절감
  • Schema Validation 및 REST Endpoint는 기존 Scala 레이어를 유지하며 핵심 처리 경로만 Rust로 분리한 하이브리드 구조 설계

1. p99 Tail Latency가 임계치를 초과할 때 GC Log의 Promotion 속도와 JIT Stall 비율을 먼저 분석할 것

2. 고성능 KV 스토어 도입 시 Write-ahead Log의 fsync 전략이 Disk I/O Wait에 미치는 영향을 검증할 것

3. Kubernetes 환경에서 3~5ms 수준의 Scheduling Jitter가 허용되지 않는다면 Bare Metal 배포를 검토할 것

4. 메모리 할당자 최적화를 위해 jemalloc 또는 mimalloc 적용 가능 여부를 설계 단계에서 확인

원문 읽기