Discord
기술 블로그
C레벨 - 고난도

How Discord Stores Trillions of Messages

DB
마이그레이션
대규모 데이터
ScyllaDBCassandraRustgRPC
2023년 3월조회 4면접 0원문 보기

배경

Discord는 수조 개의 메시지를 저장하고 서빙하기 위해 Cassandra를 사용하고 있었습니다. 177개 노드로 클러스터를 운영했으나 읽기 지연이 점점 증가하고 있었습니다.

도전 과제

Cassandra의 compaction 성능 문제로 p99 읽기 레이턴시가 40-125ms까지 치솟았습니다. Hot partition 문제, GC pause, tombstone 누적 등 대규모 시계열 데이터에서의 Cassandra 한계에 직면했습니다. 수조 개의 기존 메시지를 무중단으로 마이그레이션해야 했습니다.

해결 방안

ScyllaDB로 마이그레이션을 결정하고, Rust로 커스텀 데이터 마이그레이터를 개발했습니다. 초당 320만 메시지를 처리하는 마이그레이터로 전체 데이터를 이전했습니다. ScyllaDB의 shard-per-core 아키텍처와 더 효율적인 compaction으로 성능을 크게 개선했습니다.

결과

177개 노드 → 72개 노드로 감소, p99 읽기 레이턴시 40-125ms → 15ms로 개선, 운영 비용 대폭 절감.

핵심 인사이트

  • 1.Cassandra의 JVM GC가 대규모 시계열 데이터에서 병목
  • 2.ScyllaDB의 shard-per-core 모델이 C++ 기반으로 GC 문제 해결
  • 3.Rust로 고성능 마이그레이터 개발 (초당 320만 메시지)
  • 4.Hot partition 문제는 데이터 모델링 단계에서 예방해야 함

이 사례 기반 면접에 도전해보세요

Discord의 실제 기술적 결정과 트레이드오프를 깊이 파고드는 면접 질문 5가 준비되어 있습니다

마이그레이션
데이터 모델링
DB 최적화
시스템 설계
데이터 검증
타이머사례 참조 가능결과 아카이브

로그인 없이 바로 면접을 시작할 수 있습니다