피드로 돌아가기
The Moment Veltrix Blew Up and We Had to Write Our Own Shard Router
Dev.toDev.to
Infrastructure

Jump Consistent Hashing 기반 Rust 라우터로 p99 120ms 달성

The Moment Veltrix Blew Up and We Had to Write Our Own Shard Router

pretty ncube2026년 5월 27일4advanced

Context

10만 동시 접속자의 5TB JSON 데이터 처리를 위해 Veltrix의 Modulo 기반 샤딩을 채택했으나, 32,768개 이상의 샤드 발생 시 Hash Collision으로 인한 특정 노드 부하 집중 발생. JVM Heap 및 Off-heap 메모리 누수로 인한 Swap 발생과 GC Pause로 인한 90ms 지터가 시스템 병목으로 작용.

Technical Solution

  • Modulo 방식의 12% 분산 편차를 해결하기 위해 분산 편차 0.001% 미만의 Jump Consistent Hashing 알고리즘 도입
  • JVM을 완전히 제거하고 Tokio 런타임 기반의 Rust ShardRouter를 구축하여 GC Pause 및 메모리 지터 원천 차단
  • 메모리 효율 극대화를 위해 mimalloc-rs 커스텀 할당자와 Memmap 기반의 Compacted B-tree 인덱스 설계
  • Gossip 프로토콜의 오버헤드를 줄이기 위해 Raft 기반의 단일 리더 상태 전파와 10바이트 경량 Heartbeat 하이브리드 구조 채택
  • I/O Wait 최소화를 위해 NVMe SSD 상의 Raft 로그 저장소에 io_uring 폴러 적용

- 샤드 키의 엔트로피 분석을 통해 특정 바이트에 편향된 데이터 분포 여부 확인 - 런타임 GC 지터가 SLA의 핵심 병목인 경우 Rust/C++ 등 비관리형 언어로의 데이터 평면(Data Plane) 전환 고려 - 고성능 I/O 처리가 필요한 로그 저장소 설계 시 io_uring 등 최신 커널 인터페이스 적용 검토 - 클러스터 규모 확장 전 가상 버킷(Virtual Bucket)의 충돌 임계치 정밀 계산

원문 읽기