피드로 돌아가기
Why Discord Keeps Rewriting Its Stack
Dev.toDev.to
Backend

데이터 기반 스택 전환을 통한 응답 속도 170ms에서 1ms로 단축

Why Discord Keeps Rewriting Its Stack

Pavan Sai2026년 5월 5일2intermediate

Context

사용자 급증에 따른 기존 데이터베이스의 쓰기 성능 한계와 런타임 Garbage Collector로 인한 Latency Spike 발생. 서비스 성장 규모가 초기 설계 임계치를 초과하며 발생한 구조적 병목 지점 해결 필요.

Technical Solution

  • MongoDB의 쓰기 성능 한계 극복을 위한 Cassandra 도입 및 이후 유지보수 비용 절감을 위한 ScyllaDB 전환
  • 대규모 데이터셋 정렬 작업의 오버헤드 제거를 위한 Elixir 기반 로직의 Rust 재작성
  • Go GC의 메모리 스캔으로 인한 주기적 지연 시간을 제거하고자 GC가 없는 Rust로 Read States 서비스 교체
  • BEAM VM의 강점인 대규모 동시성 처리를 활용하여 실시간 메시징 영역의 Elixir 스택 유지
  • 플랫폼 일관성 확보를 위한 React Native 도입으로 iOS 및 Android 코드베이스 통합

Impact

  • 데이터 정렬 작업 속도: 170ms에서 1ms로 단축
  • Read States 서비스 응답 속도: Milliseconds 단위에서 Microseconds 단위로 개선
  • 데이터베이스 노드 규모: Cassandra 12노드에서 ScyllaDB 전환을 통한 효율적 확장성 확보

Key Takeaway

기술적 유행이 아닌 지표 기반의 임계치 도달 시점에 맞춘 점진적 스택 전환 전략. 초기 단계부터 오버엔지니어링을 피하고 현재 규모에 최적화하되 확장 가능성을 열어두는 유연한 아키텍처 설계 원칙.


1. 튜닝으로 해결 불가능한 성능 지표(Metric)가 명확히 식별되었는가?

2. 런타임의 Garbage Collection 특성이 서비스의 Latency 요구사항과 충돌하지 않는가?

3. 현재 스택의 한계가 단순 설정 문제인지 혹은 언어/DB의 구조적 한계인지 분석했는가?

4. 모든 구성 요소를 교체하는 대신 핵심 병목 지점만 선택적으로 재작성(Rewrite)했는가?

원문 읽기