Design Spotify Top K Songs - System Design Interview
- Spotify Top K 곡 시스템은 100~1000개의 Top K 곡을 찾기 위해 하루 100억 건의 재생 이벤트와 1억 개의 고유 곡을 처리해야 합니다. 🎯
- 시스템은 '전체 기간' 및 '최근 한 달/한 시간'과 같은 현재 시점 기준의 다양한 시간 윈도우를 지원해야 합니다. ⏳
- Top K 조회 시 100ms 이내, 곡 재생 후 1분 이내에 순위에 반영되는 낮은 지연 시간과 빠른 업데이트가 핵심 성능 요구사항입니다. ⚡
- API는 K와 윈도우 파라미터를 포함하는 간단한 GET 엔드포인트로 구성되며, 데이터베이스는 각 곡의 재생 횟수를 저장합니다. 📊
- 스트리밍 이벤트 처리를 위해 Kafka와 같은 메시지 큐를 사용하여 데이터 보존, 비동기 처리, 장애 복구 기능을 확보합니다. 📨
- 핵심 처리 엔진으로 Flink를 활용하여 내장된 윈도우 기능과 상태 관리(stateful processing)를 통해 Top K 문제를 효율적으로 해결합니다. ⚙️
- Flink는 슬라이딩 윈도우 로직을 통해 특정 시간 윈도우(예: 1분) 내의 데이터를 집계하고, 이를 주기적으로(예: 5초마다) 출력할 수 있습니다. 🖼️
- Flink는 내부적으로 상태(예: 해시맵의 곡 카운트)를 관리하며, 이 상태는 메모리 또는 영구 저장소에 저장될 수 있고, 최종 집계 결과는 Redis나 데이터베이스 같은 외부 싱크로 출력됩니다. 💾
- Top K를 효율적으로 찾기 위해 Flink 내에서 최소 힙(Min-Heap)과 같은 자료구조를 활용하여 윈도우 내의 상위 항목을 유지합니다. 🏆
- 대규모 이벤트 처리 및 낮은 지연 시간 요구사항을 충족하기 위해 Flink와 같은 분산 스트림 처리 시스템을 통한 수평 확장이 필수적입니다. 🚀
데브허브 | DEVHUB | Design Spotify Top K Songs - System Design Interview