#Backend

카산드라의 와이드 파티션을 동적으로 분할하여 시계열 워크로드 최적화하기

카산드라의 와이드 파티션을 동적으로 분할하여 시계열 워크로드 최적화하기
01

Summary

넷플릭스는 어떻게 '초' 단위 지연 시간을 '밀리초'로 줄였나: 카산드라 와이드 파티션 정복기

데이터 급증과 파티션 쏠림 현상을 해결하기 위한 넷플릭스 엔지니어링 팀의 동적 파티셔닝 전략 대공개

수 페타바이트의 데이터를 처리하는 넷플릭스 시계열 서비스에서 카산드라의 고질적인 문제인 와이드 파티션을 기술적으로 해결한 사례입니다. 인프라 증설 대신 워크로드 변화를 실시간으로 감지하고 파티션을 유연하게 쪼개는 스마트한 아키텍처 구축 과정을 상세히 설명합니다.

  • 01카산드라 가상 테이블을 활용한 실시간 파티션 히스토그램 모니터링 및 분석
  • 02읽기 경로에서 와이드 파티션을 감지해 Kafka로 이벤트를 발행하는 비동기 감지 파이프라인
  • 03블룸 필터를 활용하여 오버헤드 없이 분할된 파티션으로 쿼리를 투명하게 리다이렉션
  • 04체크섬 검증과 Spark 기반 데이터 검증을 통한 무결성 보장 전략
  • 05가용성을 해치지 않기 위해 원본 데이터를 유지하는 안전한 폴백 메커니즘

RECOMMENDATION

카산드라를 사용하면서 데이터 스큐(Skew)나 성능 저하를 겪고 있는 백엔드 개발자 및 데이터 엔지니어에게 추천합니다. 대규모 분산 환경에서 가용성을 유지하며 스토리지 구조를 최적화하는 실무적인 패턴을 배울 수 있습니다.

The Problem

넷플릭스의 시계열 데이터 서비스에서 특정 ID에 데이터가 과도하게 쏠리는 '와이드 파티션' 현상이 발생하여, 읽기 지연 시간이 초 단위로 급증하고 시스템 불안정을 초래하는 문제가 발생했습니다.

The Solution

기존의 정적 프로비저닝 한계를 극복하기 위해 테이블 수준의 재파티셔닝과, 읽기 경로에서 와이드 파티션을 감지하여 비동기적으로 데이터를 분할하고 블룸 필터로 쿼리를 리다이렉션하는 ID 단위 동적 분할 시스템을 도입했습니다.

The Result

와이드 파티션의 읽기 지연 시간이 초 단위에서 수십 밀리초(ms) 수준으로 대폭 감소했으며, 스레드 큐잉과 타임아웃이 해결되어 전반적인 클러스터 안정성이 향상되었습니다.

Trade-off

안전한 폴백을 위해 원본 데이터를 삭제하지 않으므로 추가적인 저장 공간이 필요하며, 비동기 파이프라인과 메타데이터 캐시 관리로 인해 전체적인 아키텍처 복잡성이 증가했습니다.

03

Key Concepts

Concept · 01

Wide Partitions (와이드 파티션)

카산드라에서 단일 파티션 키 아래에 너무 많은 데이터가 쌓여 읽기/쓰기 성능이 저하되는 현상입니다.

  • 넷플릭스 시계열 워크로드에서 초 단위의 읽기 지연과 타임아웃을 유발하는 주요 원인으로 지목되었습니다.
Concept · 02

Bloom Filter (블룸 필터)

특정 원소가 집합에 포함되어 있는지 확인하는 데 사용되는 공간 효율적인 확률적 자료구조입니다.

  • 분할된 파티션 키 정보를 메모리에 상주시켜 읽기 요청 시 분할 여부를 마이크로초 단위로 빠르게 판별하는 데 사용되었습니다.
Concept · 03

Monte Carlo Simulation (몬테카를로 시뮬레이션)

난수를 이용해 함수의 값을 확률적으로 계산하거나 시스템의 거동을 예측하는 방법입니다.

  • 넷플릭스의 초기 프로비저닝 단계에서 워크로드 특성을 분석하여 최적의 인프라와 파티션 설정을 결정하는 데 활용됩니다.