피드로 돌아가기
The Event Store That Survived Black Friday Without a Single 5xx
Dev.toDev.to
Database

Tiered Event Sourcing 도입으로 164k TPS 처리 및 p99 420ms 달성

The Event Store That Survived Black Friday Without a Single 5xx

Lisa Zulu2026년 5월 26일3advanced

Context

블랙 프라이데이 트래픽 급증 시 Kafka Streams 기반 프로세서의 RocksDB compaction 병목으로 인한 데이터 지연 발생. Redis 및 DragonflyDB를 활용한 캐싱 시도에도 불구하고 메모리 부족 및 snapshot write 시의 Tail Latency 스파이크로 해결에 실패한 상황.

Technical Solution

  • jemalloc 기반 Unbounded ring buffer를 통한 최근 5초 이벤트의 Lock-free 처리
  • NVMe 기반 Sharded RocksDB 도입 및 compaction granularity 256 KB 최적화를 통한 처리 시간 70ms 단축
  • Segment locality 강제 설계를 통한 이벤트-노드 고정 방식으로 cross-node 트래픽 1.3 Gbps 미만 유지
  • S3 Deep Archive와 PutObject streaming 연동을 통해 RAM 버퍼 사용량을 128 KB로 제한한 불변 감사 추적 구현
  • Segment size를 2 GB에서 512 MB로 축소하고 Leveled compaction으로 전환하여 CPU 부하 최적화
  • Apache Pulsar의 Tiered Storage 및 BookKeeper ledger 도입을 통한 Critical Path 블로킹 제거

Impact

  • 처리 성능: 기존 32k TPS에서 164k TPS로 처리량 5배 이상 향상
  • 리소스 효율: Compaction CPU 점유율 45%에서 12%로 감소
  • 복구 속도: Node loss 복구 시간을 13분에서 89초로 단축
  • 비용 최적화: Redis 오버프로비저닝 제거를 통해 월 42k 달러 절감

Key Takeaway

고가용성 이벤트 스토어 설계 시 단순 캐싱보다 데이터의 Localit 및 Tiered Storage 전략이 성능 병목 해결에 더 결정적인 역할을 수행함.


- RocksDB 사용 시 compaction latency를 줄이기 위해 segment size 최적화 및 zstd 압축 레벨 검토 - JVM 기반 시스템의 GC Pause 해결을 위해 ZGC 도입 및 Replication factor에 따른 Rebalance storm 가능성 분석 - 분산 환경에서 cross-node 트래픽을 줄이기 위해 Router 수준에서 Segment locality 강제 적용 검토 - 대규모 데이터 복구 시 Kafka Mirroring 대신 S3 Multipart upload 기반 스냅샷 스트리밍 고려

원문 읽기