넷플릭스는 전 세계 수백만 명의 사용자가 매끄럽게 스트리밍 서비스를 이용할 수 있도록 대규모의 견고한 백엔드 인프라를 운영하고 있습니다. 그 중심에는 확장성과 고가용성을 자랑하는 Apache Cassandra와 같은 분산형 NoSQL 데이터베이스가 있습니다. 그러나 다양한 데이터베이스의 도입과 사용사례 증가로 인해 복잡성이 커지면서 개발자들이 데이터 저장소를 효율적으로 활용하는 데 어려움을 겪었습니다.
이를 해결하기 위해 넷플릭스는 키-값(Key-Value, KV) 데이터 추상화 계층을 도입하였습니다. 이 기술은 데이터 액세스를 간소화하고 다양한 서비스가 최적의 데이터 저장소를 사용할 수 있도록 지원합니다. 이번 블로그에서는 넷플릭스의 KV 추상화 기술과 그 핵심 요소들을 살펴보겠습니다.
1. 넷플릭스의 키-값 데이터 추상화 계층의 설계
KV 데이터 추상화는 다양한 분산 데이터베이스의 복잡성을 감추고, 개발자에게 통일된 인터페이스를 제공합니다. 이를 통해 개발자는 백엔드 데이터베이스에 대한 깊은 이해 없이도 데이터를 저장하고 관리할 수 있습니다. 넷플릭스의 주요 데이터 저장소인 Cassandra, EVCache, DynamoDB 등과 같은 다양한 데이터베이스를 지원하며, 사용 사례에 따라 적합한 저장소로 데이터를 라우팅하는 기능을 제공합니다.
2단계 맵 아키텍처
KV 데이터 추상화의 중심에는 2단계 맵 아키텍처가 있습니다. 첫 번째 단계는 문자열 ID를 해시하여 고유의 기본 키를 생성하고, 두 번째 단계는 바이트 단위의 정렬된 키-값 쌍으로 데이터를 저장합니다. 이를 통해 단순한 데이터 모델뿐만 아니라, 구조화된 복잡한 데이터 모델도 유연하게 지원할 수 있습니다.
2. 데이터베이스 독립적 추상화
KV 데이터 추상화는 기본 데이터베이스의 세부 구현을 숨기고, 개발자에게 일관된 인터페이스를 제공합니다. 이는 특정 데이터베이스에 의존하지 않고, 다양한 데이터베이스 간의 데이터 전송을 쉽게 처리할 수 있게 합니다. 예를 들어, 넷플릭스는 Cassandra의 파티셔닝 및 클러스터링 기능을 활용하여 데이터를 효율적으로 관리합니다. 그러나 EVCache와 같은 다른 스토리지 시스템으로도 전환할 수 있습니다.
3. 주요 API 및 기능
KV 추상화는 네 가지 주요 CRUD API를 통해 다양한 데이터 액세스 패턴을 지원합니다.
- PutItems: 데이터를 추가하거나 업데이트하는 업서트 작업을 수행합니다.
- GetItems: ID와 필터를 사용하여 레코드에서 데이터를 조회합니다.
- DeleteItems: 레코드에서 항목을 삭제하는 기능을 제공하며, 멱등성을 보장합니다.
- MutateItems 및 ScanItems: 복잡한 데이터 변형과 대규모 데이터를 처리하는 API입니다.
이러한 API는 모두 멱등성을 보장하여 여러 번의 요청이 중복되더라도 시스템이 안정적으로 동작할 수 있도록 설계되었습니다.
4. 성능 최적화 기술
KV 추상화는 넷플릭스의 다양한 글로벌 운영 환경에서 예측 가능한 성능을 제공하기 위해 여러 기술을 도입했습니다.
클라이언트 측 압축
대용량 데이터 전송 시 서버의 리소스를 아끼기 위해 클라이언트 측 압축을 사용합니다. 이를 통해 네트워크 대역폭과 서버 CPU 사용량을 절약하고, 성능을 극대화합니다.
청킹(Chunking) 기반 대용량 데이터 처리
KV 추상화는 대규모 블롭 데이터를 처리할 때 청킹을 사용하여 데이터 크기에 따라 성능이 선형적으로 확장되도록 합니다. 데이터가 너무 크면 청크로 나누어 효율적으로 저장하고, 필요한 경우 이를 재구성합니다.
스마트한 페이징 처리
KV 추상화는 데이터를 조회할 때 항목 수가 아닌 바이트 크기를 기준으로 페이징을 처리합니다. 이는 각 항목의 크기가 달라질 수 있는 경우 예측 가능한 대기 시간을 보장할 수 있게 합니다. 이와 함께 적응형 페이징을 도입하여 초기 쿼리에서 효율성을 높이고, 후속 페이지 요청의 성능을 최적화합니다.
5. 넷플릭스의 글로벌 사용 사례
KV 추상화 계층은 넷플릭스의 다양한 주요 사용 사례에서 중요한 역할을 하고 있습니다. 예를 들어:
- 스트리밍 메타데이터: 실시간으로 개인화된 콘텐츠를 제공하기 위해 메타데이터를 빠르게 처리합니다.
- 사용자 프로필: 다양한 기기에서 사용자 경험을 유지하기 위해 사용자 프로필과 시청 기록을 저장하고 관리합니다.
- 실시간 분석: 사용자 행동과 시스템 성능을 실시간으로 분석하고 대규모 데이터를 효율적으로 관리합니다.
넷플릭스의 KV 데이터 추상화 계층은 단순한 데이터 저장소 이상의 역할을 합니다. 다양한 데이터베이스와 복잡한 데이터 모델을 지원하는 유연한 시스템으로, 개발자가 데이터베이스의 복잡성을 신경 쓰지 않고 비즈니스 문제 해결에 집중할 수 있게 합니다. 이로써 넷플릭스는 글로벌 대규모 인프라에서도 안정적이고 확장 가능한 성능을 보장할 수 있게 되었습니다.
참고 링크
https://netflixtechblog.com/introducing-netflixs-key-value-data-abstraction-layer-1ea8a0a11b30
'DB' 카테고리의 다른 글
PostgreSQL 17 출시: 성능과 개발자 경험의 새로운 지평을 열다 (0) | 2024.09.28 |
---|---|
FAISS 벡터 데이터베이스: 고차원 데이터 유사성 검색의 혁신적 해법 (0) | 2024.09.26 |
효율적인 메시징 솔루션! Oracle AQ(Advanced Queueing)의 개념과 활용법 (0) | 2024.09.19 |
Oracle Stored Procedure, 꼭 알아야 할 데이터베이스의 필수 개념과 활용법 (0) | 2024.09.19 |
Pinecone 벡터 데이터베이스: AI 시대의 필수 도구 (0) | 2024.09.13 |