Netflix TechBlog | Medium 한국어 노트

Netflix TechBlog | Medium 한국어

넷플릭스 테크 블로그는 넷플릭스가 기술을 처리하는 방법에 대한 통찰을 제공합니다. 그들은 데이터 과학, 엔지니어링, 디자인 및 기술 혁신에 대한 연구를 수행합니다. 그들은 자체 콘텐츠 전송 네트워크와 같은 혁신을 보여 주고 서비스 신뢰성 노력에 대한 통찰을 제공합니다.

노트 스레드

Netflix는 아트워크 및 비디오 미리보기와 같은 개인화된 시각적 자산을 통해 회원들이 좋아할 만한 콘텐츠와 연결하는 것을 목표로 합니다. 새로운 타이틀의 경우, 불충분한 상호작용 데이터로 인해 효과적인 개인화가 불가능해지는, 즉 콜드 스타트 문제로 알려진 문제가 발생합니다. 전통적으로 모델은 자산을 불투명한 ID로 취급하고, 충분한 데이터가 축적될 때까지 인기도 휴리스틱에 의존했습니다. 이는 새로운 콘텐츠에 대한 개인화가 지연되어 발견 경험에 영향을 미쳤습니다.Netflix의 솔루션은 멀티모달 임베딩을 사용하여 모델이 자산을 "보고" "들을" 수 있도록 하는 것입니다. 사전 훈련된 이미지-텍스트 모델인 CLIP으로 아트워크를 인코딩함으로써 자산은 시각적 이해를 얻게 됩니다. 이 CLIP 임베딩은 자산의 ID 임베딩과 연결되어 시각적 테마와 재능을 포착하는 더 풍부한 표현을 생성합니다. 이를 통해 자산이 상호작용 기록이 전혀 없더라도 회원들의 시각적 스타일에 대한 선호도를 기반으로 개인화가 가능해지며, 타이틀 간 지식 이전이 용이해집니다.이 접근 방식은 또한 모델 통합을 가능하게 하여, 서로 다른 아트워크 캔버스에 대한 별도의 모델을 단일 통합 모델로 병합합니다. CLIP 임베딩은 자르기 및 크기 조정에 크게 영향을 받지 않기 때문에, 거의 동일한 아트워크 렌더링이 유사한 벡터에 매핑됩니다. 특히 데이터가 적은 캔버스에 이점을 주는 캔버스 전반의 상호작용 신호 풀링을 통해 단일 모델이 모든 아트워크 배치를 개인화할 수 있습니다. 캔버스 간 데이터 불균형을 해결하기 위해, 노출량보다는 장기적인 가치에 기반한 상호작용을 우선시하는 보상 기반 가중치가 사용됩니다.이 접근 방식의 효과는 역확률 점수(inverse propensity scoring)를 사용한 오프라인 평가와 대규모 A/B 테스트를 통해 검증되었습니다. 이미지 임베딩과 통합 모델(V3)을 결합한 결과는 이 개선 사항 중 하나만 포함한 모델보다 훨씬 뛰어났습니다. 이 결합된 접근 방식은 최소한의 과거 데이터로 지배적인 캔버스가 도입된 주요 Netflix 홈 화면 재설계 중에 중요함이 입증되었습니다. CLIP 임베딩을 갖춘 통합 모델은 이 새로운 레이아웃에 대한 콘텐츠를 성공적으로 개인화했으며, 발견 지표 및 스트리밍 시간에서 통계적으로 유의미한 향상을 보여주며, 콜드 스타트 문제를 극복하는 데 있어 멀티모달 임베딩의 힘을 강조했습니다.
Netflix는 현재 두 개의 Flink autoscaler를 운영 중이며, 이를 하나의 오픈소스 솔루션으로 통합하는 것을 목표로 하고 있습니다. 처음에는 수천 개의 Flink 작업을 관리하기 위해 자체 autoscaler를 구축했는데, 이는 효과적이었지만 복잡한 멀티-오퍼레이터 작업을 처리하는 데는 한계가 있었습니다. 이 자체 개발 시스템은 외부 메트릭에 의존했는데, 이는 부정확하거나 내부 작업 문제를 놓칠 수 있었습니다. 이후 Apache Flink 커뮤니티는 작업 자체 내부에서 추론하는 더 정교한 autoscaler를 개발했습니다. 이 두 번째 autoscaler는 오퍼레이터의 실제 처리율을 추정하여 각 버텍스별 최적의 병렬성을 결정합니다. Netflix는 상태 저장 작업을 확장하고 세분화된 구성을 허용하는 능력 때문에 이 오픈소스 솔루션으로 수렴하고 있습니다. Netflix에 OSS autoscaler를 구현하는 데는 기존 제어 평면에 통합하는 것을 포함하여 상당한 조정이 필요했습니다. 또한 메트릭 수집을 개선하고 순방향 연결된 서브그래프 및 싱크 제한과 같은 특정 작업 구조를 처리하기 위해 Flink 런타임을 수정했습니다. OSS autoscaler를 채택함으로써 Netflix는 상당한 비용 절감과 리소스 활용도 향상을 달성했습니다. 학습된 교훈은 메트릭 품질이 중요하며, 조정 가능한 기본값이 유익하고, 기존 솔루션을 확장하기 전에 채택하는 것이 현명한 전략임을 강조합니다. 운영을 간소화하기 위해 OSS 기반 autoscaler로 완전히 마이그레이션할 계획입니다.
CdXz5zHNQW_HJCpS7bDND.png
Netflix는 내부 파트너를 위한 실시간 인사이트를 제공하기 위해 Real-Time Distributed Graph를 구축했으며, 이 블로그 시리즈의 세 번째 부분은 그래프를 효율적으로 쿼리하는 데 중점을 둡니다. 이 그래프는 수십억 개의 노드와 엣지로 이루어진 복잡한 네트워크이며, 이를 쿼리하려면 빠르고 유연한 서빙 레이어가 필요합니다. 저자들은 광범위한 액세스 패턴을 처리하고 얕고 넓은 쿼리와 깊고 좁은 쿼리를 모두 지원하는 것을 포함하여 그래프 쿼리의 어려움에 대해 논의합니다. 그들은 지연 시간을 최소화하기 위해 너비 우선 접근 방식과 비동기 컴포지션을 사용하여 그래프를 효율적으로 쿼리하기 위한 서빙 레이어를 설계하는 방법을 설명합니다. 저자들은 또한 쿼리 레이어 설계에서 캐싱, 옵트인 강화, 최종 일관성의 중요성에 대해 논의합니다. 쿼리 레이어는 그래프 쿼리 서비스, 스토리지 추상화 레이어, 강화 레이어의 세 가지 레이어로 구성되며, 이들은 함께 쿼리를 효율적으로 실행합니다. 저자들은 쿼리 레이어가 실제로 작동하는 방식을 보여주기 위해 예제 쿼리를 통해 설명하며, 요청을 읽고 해석하는 것, 스토리지에서 효율적으로 읽는 것, 너비 우선 레벨로 순회를 실행하는 것, 많은 작업을 병렬로 실행하는 것, 스마트하게 필터링하는 것, 캐싱으로 반복 쿼리를 더 빠르게 만드는 것의 중요성을 강조합니다. 쿼리 레이어의 목표는 100ms 미만으로 쿼리를 완료하는 것이며, 저자들은 그들의 설계가 이 목표를 어떻게 달성하는지 보여줍니다. 쿼리 레이어는 초당 수만 건의 쿼리를 처리하도록 설계되었으며, 각 쿼리는 잠재적으로 다를 수 있습니다. 저자들은 이 수준의 성능을 달성하기 위해 쿼리 레이어를 설계하면서 내린 절충안에 대해 논의합니다. 전반적으로 저자들은 대규모 분산 그래프를 위한 고성능 쿼리 레이어를 구축하는 데 관련된 어려움과 절충안을 강조하면서 쿼리 레이어의 설계 및 구현에 대한 자세한 개요를 제공합니다. 쿼리 레이어는 Real-Time Distributed Graph의 중요한 구성 요소이며, 저자들의 설계 및 구현은 Netflix가 내부 파트너를 위한 실시간 인사이트를 제공할 수 있도록 했습니다.
CdXz5zHNQW_1lL53FS8TQ.png
Netflix는 다양한 기기에서 폭넓은 기능과 콘텐츠 유형을 제공하지만, 하드웨어 제약으로 인해 특정 기기에서는 일부 기능이 제한될 수 있습니다. 이를 해결하기 위해 회사는 기기 기능을 이해하고 최상의 사용자 경험을 보장하기 위한 포괄적인 기기 기능 데이터 모델을 개발했습니다. 이 데이터 모델은 내부 시스템의 기능 플래그를 통합하여 전 세계 기기 환경 전반에 걸쳐 스마트한 기능 관리를 가능하게 합니다. 기기 기능(예: 화면 해상도, 비디오 프로필, RAM 크기)에 대한 정보를 저장하기 위해 누적 테이블이 사용되며, 이는 분석 및 보고에 이상적입니다. 이 테이블은 각 기기와 관련 기능의 최신 상태를 캡처하도록 구성되어 있어 정보 처리를 효율적으로 할 수 있습니다. 집계 분석을 위해 히스토그램 테이블이 사용되어 지난 28일 동안의 활성 기기 수를 기기 모델 및 소프트웨어 버전별로 분류하여 캡처합니다. 이 테이블은 특정 기능을 지원하는 기기 수도 기록하여 상세한 분포 분석을 가능하게 합니다. 히스토그램 데이터는 HD 또는 UHD 프로필을 지원하는 기기 비율과 같은 외부 디스플레이 기능의 분포를 분석하는 데 사용될 수 있습니다. 이러한 데이터 세트를 활용하여 Netflix는 4K Ultra HD, Netflix Spatial Audio, Cloud Gaming을 포함한 기능 도달 범위에 대한 포괄적인 보기를 제공하는 분석 제품을 구축했습니다. 회사는 데이터 기반 통찰력을 사용하여 특정 기기에서 어떤 기능을 활성화할지에 대한 정보에 입각한 결정을 내리고 성능과 안정성을 모두 보장합니다.
추천은 Netflix 경험의 중요한 부분이며, 회사는 수천 개의 수작업 기능과 특화된 아키텍처에 의존하는 복잡한 프로덕션 모델을 사용해 왔습니다. 그러나 이러한 모델은 유지 관리 및 업데이트 비용이 많이 들기 때문에 회사는 더 효율적이고 효과적인 솔루션을 찾고 있습니다. 대규모 언어 모델은 이 분야에서 가능성을 보여주었지만, 아직 프로덕션 준비가 되지 않았으며 인기 콘텐츠를 과도하게 추천하거나 비즈니스 제약을 무시하는 등의 한계가 있습니다. 이를 해결하기 위해 Netflix는 Netflix별 데이터 및 목표에 대해 내부 기반 LLM을 후속 학습시키는 LLM 기반 추천 랭커인 GenRec을 구축했습니다. GenRec은 사용자 기록, 항목 메타데이터 및 컨텍스트를 텍스트로 구체화하고 카탈로그 인식 점수 헤드를 사용하여 항목의 순위를 매깁니다. 이 모델은 비즈니스 목표 및 장기적인 회원 만족도에 부합하기 위해 순위, 언어 및 보상 신호를 결합한 다중 목표 손실로 학습됩니다. GenRec은 잘 조정된 프로덕션 랭커에 비해 단기 및 장기 온라인 지표 모두에서 통계적으로 유의미한 개선을 보여주었으며, 레이블이 지정된 데이터 및 입력 신호의 일부만 사용했습니다. 이 모델은 vLLM을 사용하여 Netflix의 내부 LLM 스택에서 제공되며, 회사는 더 작은 모델, 공격적인 컨텍스트 압축 및 사전 채우기 전용 추론과 같은 서빙 비용을 제어하기 위한 전략을 구현했습니다. 전반적으로 GenRec은 Netflix의 추천을 위한 보다 LLM 중심적인 미래를 향한 중요한 발걸음을 나타내며, 그 성공은 회사가 추천 및 개인화에 접근하는 방식을 변화시킬 잠재력을 가지고 있습니다. 자연어 입력을 학습하고 개인화된 순위를 생성하는 모델의 능력은 사용자 경험을 개선하고 참여를 늘릴 잠재력을 가지고 있습니다. 대규모 언어 모델의 힘을 활용함으로써 Netflix는 비즈니스 성공을 이끄는 보다 효과적이고 효율적인 추천 시스템을 만들 수 있습니다.
CdXz5zHNQW_VHtw7eOaqU.png
Netflix는 전체 대규모 언어 모델 스택을 내부적으로 운영하며 배포 및 추론을 직접 관리합니다. 이들은 별도의 머신러닝 사일로 대신 기존 프로덕션 환경에 이를 통합했습니다. 이 접근 방식에는 추론 엔진의 신중한 선택, 모델 패키징 방식 결정, API 표면 설계, 배포 전략 정의, 출력 제약 조건 시행이 포함되었습니다.선택된 추론 엔진은 vLLM으로, 운영 적합성, 사용자 정의 아키텍처 로드 능력, 확장성, 디버깅 용이성, 실무자들의 익숙함 때문에 선택되었습니다. 모델은 Triton의 vLLM 백엔드를 사용하여 패키징되어 동적 I/O 텐서 사양을 허용하고 모델과 프론트엔드의 독립적인 발전을 촉진합니다. 더 넓은 생태계 호환성을 위해 기존 gRPC 인터페이스와 함께 OpenAI 호환 HTTP 프론트엔드가 추가되었습니다.배포를 위해 Netflix는 모델 버전 간의 잠재적인 스키마 변경을 처리하기 위해 Versioned 전략을 사용하여 소비자가 독립적으로 업데이트할 수 있도록 합니다. 모델 인터페이스가 안정적일 때는 비용이 덜 드는 Red-Black 배포 전략을 사용합니다. 한 가지 주요 운영 과제는 느린 모델 시작 시간이었으며, 이는 Amazon FSx에 대규모 모델을 구체화하여 더 빠른 액세스를 가능하게 함으로써 해결했습니다.vLLM과 Triton 모두의 데이터를 집계하는 통합 /metrics 엔드포인트를 생성하여 관찰 가능성을 개선했습니다. 중요한 기능은 vLLM의 사용자 정의 로짓 프로세서를 통해 구현된 대규모 제약 디코딩입니다. 이를 통해 모델은 추론 후 보정 없이 직접 규정을 준수하는 출력을 생성할 수 있습니다.제약 디코딩의 초기 순수 Python 구현은 Global Interpreter Lock (GIL)과 CPU에서의 순차 처리로 인해 확장성 문제가 있었습니다. 이는 높은 동시성에서만 명확해졌고 상당한 꼬리 지연 시간을 초래했습니다. 시스템은 배포, 버전 관리 및 자동 확장을 관리하기 위해 Java 제어 평면에 의존합니다. 실시간 및 캐시된 배치 추론 경로 모두 서비스 시스템에서 지원됩니다. 이 통합 시스템은 라우팅, 후보 생성 및 로깅을 포함한 전체 다운스트림 소비자 흐름을 처리합니다.
CdXz5zHNQW_CmjJjU7Bih.png
Netflix는 엔지니어들이 분산 아키텍처를 문제 해결하고 이해하는 데 도움을 주기 위해 실시간 서비스 종속성 맵을 개발했습니다. 이 시스템은 eBPF 네트워크 흐름, IPC 메트릭, 분산 추적을 독립적인 그래프 레이어로 결합합니다. 초기 버전은 로컬에서 작동했지만, 프로덕션 환경에서는 Kafka 소비자 지연 및 메모리 문제와 같은 상당한 확장성 문제를 드러냈습니다.핵심 아키텍처 결정은 시간당 배치 처리 대신 거의 실시간에 가까운 토폴로지 업데이트를 제공하는 스트리밍 우선 접근 방식이었습니다. 이는 사고 대응 및 실시간 이벤트 모니터링에 중요했습니다. 초당 수백만 개의 흐름 기록을 데이터 손실 없이 처리하기 위해 이 시스템은 백프레셔를 갖춘 반응형 스트림을 사용하여 다운스트림 시스템이 과부하될 때 업스트림 구성 요소에 속도를 늦추도록 신호를 보냅니다. 이는 데이터 손실이나 충돌 대신 점진적인 성능 저하를 보장합니다.이 아키텍처는 네트워크, IPC, 추적 레이어에 대한 물리적 스토리지 격리를 갖춘 다층 설계를 사용하여 독립적인 최적화를 가능하게 합니다. 네트워크 레이어의 수집은 3단계 분산 집계 파이프라인에 의존합니다. 1단계는 Kafka에서 초기 집계를 수행하고, 2단계는 네트워크 중개자(로드 밸런서 등)를 직접 애플리케이션 수준 종속성으로 해석하며, 3단계는 최종 집계, 외부 데이터로의 강화, 그래프 데이터베이스에 대한 영구 저장을 처리합니다.3단계 파이프라인은 중개자 해석 및 강화 중에 데이터 집중으로 인해 "핫 노드" 문제가 발생했던 초기 2단계 설계에서 중요한 진화였습니다. 이러한 책임을 3단계로 분할하면 워크로드가 분산되어 병목 현상을 방지합니다. Server-Sent Events(SSE)는 gRPC의 성능 오버헤드로 인해 스테이지 간 통신에 gRPC를 대체했습니다. 이 오버헤드는 대규모 환경에서 과도한 CPU 및 메모리를 소비했습니다.
CdXz5zHNQW_FXxC4JJL7E.png
넷플릭스 홈페이지는 콘텐츠 탐색을 위한 고도로 개인화되고 구조화된 인터페이스입니다. 전통적으로 홈페이지 생성은 복잡한 다단계 파이프라인을 포함했습니다. 새로운 접근 방식인 GenPage는 단일 생성 트랜스포머 모델을 사용하여 전체 홈페이지를 자기회귀적으로 구성합니다. 이 엔드투엔드 모델은 사용자 컨텍스트를 프롬프트로 받아 행, 엔티티 및 레이아웃을 동시에 생성합니다. 주요 목표는 추천 스택을 단순화하고, 강화 학습을 통한 전체 페이지 최적화를 가능하게 하며, 확장성과 유연성을 향상시키는 것입니다. 프로덕션 과제에는 실시간 서빙 지연 시간, 엔티티 콜드 스타트 및 모델 신선도 유지 등이 포함되었습니다. GenPage는 A/B 테스트에서 사용자 참여도 향상과 서빙 지연 시간 감소라는 상당한 개선을 보여주었습니다. 데이터는 사용자 정보를 나타내는 컨텍스트 토큰과 홈페이지 구조를 위한 페이지 토큰으로 토큰화됩니다. 도메인별 토큰화는 일반 텍스트 토큰화에 비해 계산 효율성과 제품 제어를 향상시킵니다. 사용자 기록, 프로필 및 요청 컨텍스트가 프롬프트를 형성하며, 엔티티와 행은 생성된 페이지의 토큰으로 표현됩니다. 시스템은 사용자 피드백을 기반으로 보상 시스템을 사용하여 추천 가치를 정량화하고 학습을 안내합니다. GenPage는 표준 디코더 전용 트랜스포머 아키텍처를 사용하며, 사전 학습 및 사후 학습의 LLM과 유사한 학습 레시피를 따릅니다. 사전 학습은 다음 토큰 예측을 사용하여 모델에 홈페이지 언어를 학습시키고, 이후 가중 이진 분류 또는 강화 학습으로 사후 학습을 진행합니다. 이 생성적 접근 방식은 넷플릭스 홈페이지 경험 전체를 최적화하는 데 더 통합되고 직접적인 경로를 제공합니다.
CdXz5zHNQW_XlipK7GYZj.gif
Netflix 연구원들은 홍보용 에셋 제작 시 비디오 편집자를 지원하기 위한 두 가지 AI 도구를 개발했습니다. 첫 번째 도구인 Vera는 콘텐츠 보존 편집을 위해 설계된 계층형 비디오 확산 모델입니다. Vera는 편집을 별도의 계층으로 생성하여 원본 푸티지의 변경되지 않은 부분을 그대로 유지함으로써 신원과 세부 정보를 보존합니다. Vera를 훈련시키기 위해 특수 데이터셋을 만들고 효율적인 출력 생성을 위해 Mixture-of-Transformers 아키텍처를 사용했습니다. 평가 결과, Vera는 콘텐츠 보존 측면에서 기존 방법보다 훨씬 뛰어난 성능을 보였으며 비디오 품질도 비슷했습니다. 두 번째 도구인 VOID는 비디오 객체 및 상호 작용 삭제 프레임워크입니다. VOID는 상당한 상호 작용이 있는 객체를 제거할 때 발생하는 물리적으로 불가능한 결과의 문제를 해결합니다. 물리적으로 가능한 반사실적 비디오를 생성하는 첫 번째 패스와 아티팩트(예: 객체 변형)를 방지하기 위해 출력을 개선하는 두 번째 패스로 구성된 2단계 추론 파이프라인을 사용합니다. VOID는 시뮬레이션 및 실제 모션 캡처 데이터에서 생성된 합성 데이터를 사용하여 훈련되었습니다. 실험 결과, VOID는 이전 접근 방식에 비해 일관된 장면 역학을 더 잘 보존하는 것으로 나타났습니다. 이러한 연구 탐구는 아티스트에게 힘을 실어주면서 AI 비디오 편집을 책임감 있게 발전시키는 것을 목표로 합니다. Vera와 VOID 모두 공개된 연구 논문에 자세히 설명되어 있습니다.
CdXz5zHNQW_YZ3adN1Eip.gif
넷플릭스는 컴퓨팅 인프라를 쿠버네티스 네이티브 모델로 전환하며, Kueue와 같은 구성 요소를 자사의 Titus 플랫폼에 통합하고 있습니다. 클라우드 네이티브 작업 큐 시스템인 Kueue는 넷플릭스가 자체 개발한 배치 솔루션인 Compute Managed Batch(CMB)의 맞춤형 로직을 대체했습니다. 이러한 마이그레이션의 동기로는 CMB의 노후화, 쿠버네티스의 진화, 그리고 기존 시스템에 선점(preemption)과 같은 기능을 추가하기가 점점 더 어려워진 점 등이 꼽혔습니다. Kueue는 기존 Titus 스케줄링 프로필과의 호환성, 도입 확산 추세, 그리고 선점과 같은 기능을 네이티브로 지원한다는 점 때문에 다른 대안들보다 선택되었습니다.‘Netflix Batch’로 알려진 이번 마이그레이션은 사용자에게 미치는 영향을 제로로 하고 처리량을 저하시키지 않는 것을 목표로 했습니다. 이 과정에서는 작업 제출을 Kueue가 활성화된 Titus 셀로 재라우팅하고, Titus 페더레이션이 작업 분배를 처리하도록 했습니다. 운영자 측의 조정은 최소한으로 이루어졌으며, 주로 테넌트를 Kueue에 등록하기 위한 간단한 UI 토글 설정에 국한되었습니다. 이 등록 과정을 통해 CMB의 기존 테넌트 계층 구조와 용량 구성이 Kueue의 코호트(Cohorts), 클러스터 큐(ClusterQueues), 로컬 큐(LocalQueues) 개념으로 변환됩니다.주요 교훈으로는 원활한 사용자 경험을 보장하기 위해 기존 시스템과의 API 호환성을 유지한 점과, 신뢰를 구축하기 위해 복잡한 사용 사례를 조기에 마이그레이션한 점이 있습니다. 또한 Kueue가 넷플릭스의 높은 처리량 요구 사항을 처리할 수 있는지 확인하기 위해 부하 테스트를 수행하는 것이 중요했으며, 이를 위해 기본 구성을 조정해야 했습니다. 현재 Kueue는 완전히 가동 중이며 수백만 건의 배치 워크로드를 관리하고 있으며, 향상된 공정한 공유 및 선점 기능을 지원하고 있습니다. 이러한 개선 사항을 통해 예약된 용량의 활용도를 높이고, 작업 대기 현상을 줄이며, 중요 워크로드의 처리 속도를 향상시켜 평균 리소스 활용도를 크게 높였습니다.
CdXz5zHNQW_CNU9jjDeMi.png
Netflix의 TimeSeries Abstraction은 Apache Cassandra를 스토리지로 사용하여 밀리초 지연 시간으로 페타바이트 규모의 시간 이벤트 데이터를 수집하고 쿼리합니다. 단일 파티션이 시간이 지남에 따라 대량의 이벤트를 축적하는 와이드 파티션은 TimeSeries 워크로드에 상당한 문제를 야기합니다. 이는 Cassandra 클러스터에서 높은 읽기 지연 시간, 타임아웃, CPU 사용량 증가 및 가비지 컬렉션 일시 중단을 초래합니다. 이를 해결하기 위해 TimeSeries 데이터는 개별 시간 청크로 분할되어 관리 가능한 세그먼트를 생성합니다.초기 프로비저닝 전략은 사용자 지정 워크로드 특성과 몬테카를로 시뮬레이션을 사용하여 최적의 인프라 및 파티션 구성을 결정하는 데 의존했습니다. 그러나 이 접근 방식은 워크로드를 알 수 없거나, 부정확하게 추정하거나, 시간이 지남에 따라 진화하거나, 데이터 이상치를 포함하는 경우 불충분했습니다. 조정을 자동화하기 위해 백그라운드 워커를 도입하여 파티션 히스토그램을 모니터링하고 관찰된 데이터 밀도를 기반으로 향후 시간 슬라이스를 동적으로 재분할했습니다. 이 Time Slice Re-Partitioning 전략은 대부분의 데이터가 유사한 와이드 파티션 동작을 보일 때 읽기 지연 시간과 타임아웃을 효과적으로 줄입니다.그러나 이 전략은 테이블 내 ID의 작은 비율만 와이드한 시나리오를 해결하지 못합니다. 이러한 경우와 호출자가 높은 지연 시간에도 불구하고 모든 데이터를 필요로 하는 경우, Dynamic Partitioning per ID가 개발되었습니다. 이 비동기 파이프라인은 읽기 작업 중에 와이드 파티션을 감지하고 투명하게 최적의 크기로 분할합니다. 이 프로세스는 감지, 계획 및 분할, 분할된 파티션으로 쿼리를 재라우팅하여 읽기를 제공하는 것을 포함합니다.감지는 구성된 바이트 임계값을 초과하는 읽기 작업이 발생할 때 이루어지며, Kafka로 이벤트를 내보냅니다. 시스템은 단순성을 위해 처음에 불변 파티션에 집중합니다. 계획 단계에서는 전체 파티션을 읽어 분할 계획을 생성하며, 체크포인팅을 사용하여 실패를 처리합니다. 분할은 이벤트 버킷을 시간 버킷에 할당하는 것과 같은 특정 전략에 데이터 분할을 위임하는 것을 포함합니다. 분할을 검증하는 것이 중요하며, 체크섬은 분할이 완료된 것으로 표시하기 전에 데이터 무결성을 보장합니다. 마지막으로 TimeSeries 서버는 인메모리 Bloom 필터를 사용하여 읽기 쿼리를 분할된 파티션으로 효율적으로 전환하여 호출자에게 거의 눈에 띄지 않게
CdXz5zHNQW_JhVMWuRvRR.png
Netflix는 엔지니어들이 서비스 종속성을 이해하고 문제를 해결하는 데 도움을 주기 위해 Service Topology라고 불리는 분산 인프라의 "살아있는 지도"를 개발했습니다. 이 지도는 서비스 관계와 장애 발생 시 잠재적 영향을 더 빠르게 식별해야 하는 필요성을 해결합니다. 이는 어떤 서비스가 서로에게 의존하는지, 그리고 문제의 근원을 파악하는 것과 같은 중요한 질문에 답합니다. 그들은 eBPF 네트워크 흐름, IPC 메트릭, 엔드투엔드 추적의 세 가지 소스에서 데이터를 수집했습니다. 각 데이터 소스는 고유한 관점을 제공합니다. 즉, 네트워크 연결성, 애플리케이션 수준의 세부 정보, 실제 요청 흐름입니다. 이 다층 아키텍처는 이러한 뷰를 통합된 실시간 지도로 결합합니다. 시스템은 각 데이터 소스에 대해 별도의 그래프 데이터베이스를 사용하여 독립성을 유지하고 병렬 쿼리를 가능하게 합니다. 엔지니어들은 각 그래프를 개별적으로 보거나 결합하여 서비스 상호 작용에 대한 포괄적인 이해를 얻을 수 있습니다. 시스템은 여러 지역의 Kafka에서 흐름 로그를 수집하고, 처리하고, 그래프 데이터베이스에 데이터를 저장합니다. 이 살아있는 지도는 Netflix 엔지니어들이 문제를 신속하게 진단하고 해결하여 원활한 스트리밍 경험을 보장하는 데 도움이 됩니다.
CdXz5zHNQW_fZOTLLTM4l.png
Netflix는 수천 개의 Java 리포지토리를 사용하는 폴리 리포(polyrepo) 전략을 사용하며, 효율적인 빌드 로직 공유가 필요합니다. 이들은 종속성을 관리하고 코드 표준을 강제하기 위해 ArchRules를 포함한 Nebula Gradle 플러그인 제품군을 구축했습니다. 이 이니셔티브는 이전 버전과 호환되지 않는 변경 사항 사고 이후 Java 라이브러리 수명 주기 관리를 개선해야 할 필요성에서 비롯되었습니다. Netflix는 API 수명 주기 주석(@Deprecated, @Public, @Experimental)을 활용하여 폐기된 코드의 잠재적인 문제를 식별합니다. 아키텍처 규칙을 강제하는 데 널리 사용되는 라이브러리인 ArchUnit은 이러한 주석의 오용 및 기타 기술 부채 문제를 감지하기 위해 선택되었습니다. Nebula ArchRules 플러그인을 통해 여러 리포지토리에 걸쳐 ArchUnit 규칙을 공유하고 적용할 수 있으며, 향상된 기능을 제공합니다. ArchRules는 언어 간 지원을 위해 바이트코드 분석(ASM)을 사용하고, 규칙 생성을 단순화하는 사용하기 쉬운 빌더 패턴을 사용합니다. 규칙은 라이브러리와 함께 번들링되거나 독립적인 규칙 라이브러리에 정의될 수 있으며, 플러그인에 의해 자동으로 감지되고 실행됩니다. ArchRules Runner 플러그인은 소스 세트에 대해 규칙을 평가하고 JSON 및 콘솔 보고서를 생성하여 더 나은 보고 기능을 제공합니다. ArchRules를 사용함으로써 Netflix는 라이브러리 작성자가 API 사용을 추적하고 폐기된 API 사용을 감지할 수 있는 플랫폼을 제공합니다.
CdXz5zHNQW_UkqZEpugr5.png
Netflix는 개인화, 스튜디오 제작, 결제, 광고와 같은 다양한 비즈니스 도메인에 걸쳐 머신러닝을 활용합니다. ML 채택이 증가함에 따라 모델과 데이터가 사일로화되어 협업과 검색을 방해하는 파편화된 환경이라는 문제가 발생했습니다. ML 실무자들은 다양한 시스템에 걸쳐 모델 계보, 기능 소스 및 영향을 이해하는 데 어려움을 겪었습니다. 이러한 파편화로 인해 기존 기능, 데이터 소스, 파이프라인 종속성 및 변경 효과에 대한 질문에 쉽게 답할 수 없었습니다.핵심적인 어려움은 메타데이터를 생성하는 분산된 ML 인프라 구성 요소를 연결하는 데 있었습니다. 파이프라인 오케스트레이터부터 실험 플랫폼 및 기능 스토어에 이르기까지 수십 개의 시스템이 다양한 형식으로 데이터를 생성했습니다. 이를 해결하려면 이기종 메타데이터를 수집하고, 이를 통합된 모델로 변환하고, 탐색을 위한 연결된 그래프를 구축해야 했습니다.해결책은 Netflix에서 ML 엔티티를 상호 연결하는 모델 수명 주기 그래프를 구축하는 메타데이터 서비스(MDS)입니다. MDS는 ML 메타데이터를 실시간으로 수집하여 특정 모델을 사용하는 실험을 식별하거나 특정 기능을 공유하는 모델과 같은 도메인 간 쿼리를 가능하게 합니다. 비전은 모든 ML 자산을 회사 전체에서 검색 가능하고, 이해 가능하며, 재사용 가능하게 만드는 것입니다.MDS는 고유한 AIP URI를 가진 구성 요소, 속성을 가진 ML별 자산인 엔티티, 데이터 모양을 정의하는 엔티티 유형, 관련 엔티티 유형을 그룹화하는 도메인, 소스 시스템의 도메인에 대한 구체적인 구현인 공급자와 같은 핵심 추상화를 기반으로 작동합니다. 이 URI 기반 주소 지정 방식을 통해 모든 서비스가 모든 ML 자산을 보편적으로 참조할 수 있습니다. 그래프를 구축하는 과정은 여러 단계를 거칩니다.첫째, MDS는 Kafka 및 AWS SNS/SQS를 통해 소스 시스템과 통합하여 변경 사항을 나타내는 얇은 이벤트를 소비합니다. 전용 이벤트 핸들러는 파이프라인 오케스트레이션, 모델 레지스트리, 기능 스토어, 실험 플랫폼, ID 플랫폼과 같은 시스템의 이벤트를 처리합니다. 둘째, MDS는 수분 계약을 구현하여 이벤트를 검증하고 소스 시스템 API를 호출하여 전체 상태를 가져온 다음, 이를 정규화된 엔티티로 변환합니다. 이 "변경 알림" 패턴은 이벤트 순서 문제에 대한 견고성을 보장하지만 소스 시스템에 읽기 부하를 줍니다.셋째, 원시 이벤트는 표준화된 필드를 가진 통합 엔티티 모델로 변환되어 다운스트림 소비자에게 일관된 인터페이스를 생성합니다. 정규화된 엔티티는 필드 이름, 형식을 표준화하고 플랫폼별 ID를 전역 AIP URI로 변환합니다. 마지막으로 정규화된 엔티티는 캐싱 및 관계 저장을 위해 Datomic에 지속되고 동시에 Elasticsearch에 인덱싱됩니다. 불변 사실 모델을 가진 Datomic은 복잡한 그래프 순회 및 엔티티 관계를 지원하여 비효율적인 N+1 쿼리 패턴 없이 여러 도메인에 걸친 쿼리를 가능하게 합니다.
CdXz5zHNQW_EXeyjNVmx8.png
이 블로그 게시물은 Netflix의 ML 모델 서빙 인프라가 다양한 도메인에 걸쳐 대규모 개인화된 경험을 어떻게 지원하는지에 대한 기술적인 통찰력을 논의합니다. 중앙 ML 모델 서빙 플랫폼은 모델 추론을 위해 여러 도메인별 마이크로서비스에 도메인 독립적인 API 추상화 및 트래픽 라우팅 기능을 제공합니다. 이 단일 API는 기존 ML 경험의 최신 버전을 반복하는 혁신 속도를 높이고 ML을 통한 새로운 제품 경험을 가능하게 했습니다. ML 모델 서빙 인프라의 성공은 연구자들이 새로운 가설을 신속하게 실험하고 모델을 프로덕션에 안전하게 출시할 수 있도록 하는 데 달려 있습니다. 이 플랫폼은 수백 가지의 모델 유형과 버전을 처리하며 초당 100만 건의 요청을 처리하고, 개별 채점 함수뿐만 아니라 워크플로 수준에서 작동합니다.모델 정의에는 기능을 계산하는 데 필요한 사실 목록이 포함되어 있으며, 서빙 시점에 여러 다른 마이크로서비스를 호출하여 이러한 사실을 제공하도록 모델 서빙 플랫폼에 의존합니다. 호출하는 서비스는 표준 요청 컨텍스트와 관련 도메인 컨텍스트만 제공하면 되며, 모델 자체는 실행 흐름의 일부로 기능을 계산하고 추론을 수행할 수 있습니다. 이 플랫폼은 신속한 ML 혁신의 촉진자 역할을 하며 클라이언트 앱에 대한 ML 모델 반복의 노출을 제한합니다. 플랫폼의 핵심 원칙에는 클라이언트 앱과 독립적인 모델 혁신, 클라이언트를 모델 샤딩에서 분리, 유연한 트래픽 라우팅 규칙이 포함됩니다.이 플랫폼은 Switchboard라는 사용자 정의 서비스를 사용하며, 이는 초당 100만 건 이상의 요청을 처리하면서 높은 가용성과 신뢰성을 유지하는 모든 트래픽에 대한 유연한 프록시 계층 역할을 합니다. Switchboard는 모든 클라이언트의 모델 요구에 대한 단일 접점을 제공하며 풍부한 컨텍스트 기능 세트를 기반으로 요청을 라우팅할 수 있습니다. 이 플랫폼은 또한 "Objective"라는 개념을 도입하는데, 이는 서빙 플랫폼에서 정의한 열거형으로 시스템에 대한 모든 요청이 제공해야 합니다. Objective는 클라이언트를 구체적인 모델에서 분리하고 플랫폼의 라우팅 및 모델 선택 결정을 안내합니다.Switchboard Rules는 연구자들이 클라이언트 코드를 변경하지 않고도 Objective에 모델 변형, 실험 및 트래픽 분할을 연결할 수 있도록 하는 JavaScript 구성입니다. 규칙은 주어진 Objective에 대한 기본 모델, 일련의 Objective에 대한 A/B 실험 구성, 새 모델로 트래픽을 점진적으로 전환하기 위한 사용자 정의를 지시합니다. 규칙은 Switchboard와 Model Serving 클러스터 모두에서 사용되며, 서빙 플랫폼 구성 요소는 이러한 규칙을 기반으로 다양한 작업을 수행할 수 있습니다. 전반적으로 이 플랫폼은 Netflix에서 ML 모델을 서빙하기 위한 확장 가능하고 유연한 솔루션을 제공하여 클라이언트 앱에 대한 영향을 최소화하면서 신속한 혁신과 실험을 가능하게 합니다.
CdXz5zHNQW_XdCPf6klQA.png
CdXz5zHNQW_aUoM5pxXdJ.jpeg
CdXz5zHNQW_kK6Y54I9YV.jpeg
CdXz5zHNQW_s8spGD1mD0.png
넷플릭스는 대규모 환경에서 Druid 쿼리 성능을 향상시키기 위해 실험적인 캐싱 레이어를 구현했습니다. 이 캐싱 시스템은 특히 대규모 이벤트 발생 시 대시보드에서 발생하는 중복 쿼리 문제를 해결합니다. 핵심 아이디어는 결과의 일부를 캐싱하고, 가장 최신 데이터에 대해서만 Druid에 쿼리하여 약간의 오래된 데이터(staleness)를 감수하는 것입니다. 지수 시간-생존(TTL) 값을 사용하여, 늦게 도착하는 이벤트를 처리하기 위해 오래된 데이터는 더 오래 캐싱됩니다. 캐싱 시스템은 캐시된 데이터의 효율적인 범위 스캔을 위해 맵-오브-맵 구조를 사용합니다. 캐시는 Druid 라우터에서 요청을 가로채 필요에 따라 결과를 제공하거나 Druid에 쿼리합니다. 이 솔루션은 캐시된 데이터와 최신 데이터를 결합하여 완전한 결과를 반환하고, 최신 데이터를 비동기적으로 캐싱합니다. 빈 버킷에 대한 부정 캐싱(negative caching)이 사용되며, 후행 빈 버킷을 캐싱하는 것에 대한 예방 조치가 취해집니다. 이 시스템은 넷플릭스의 키-값 데이터 추상화 계층(KVDAL)을 사용하며, Cassandra를 기반으로 하여 각 데이터 포인트에 대해 독립적인 TTL을 제공합니다. 캐싱 레이어는 Druid 쿼리 부하를 크게 줄이고 쿼리 시간을 개선했으며, 특히 대량의 이벤트 발생 시 효과가 컸습니다. 이 캐싱 시스템은 아직 실험 단계에 있으며, 향후 목표는 Druid 자체에 통합하는 것입니다.
CdXz5zHNQW_ZIJYgW0wPc.png
이 기사는 고급 비디오 검색 엔진 구축에 대한 과제와 해결책을 논의합니다. 핵심 문제는 방대한 양의 비디오 영상과 관련 순간을 추출하는 어려움입니다. 해결책은 다양한 AI 모델을 통합하여 비디오 콘텐츠의 여러 측면을 분석하는 다중 모드 접근 방식입니다. 이 접근 방식은 전문 모델에서 얻은 다양한 데이터를 일관된 실시간 인텔리전스 시스템으로 통합해야 합니다. 시스템 아키텍처는 대규모 처리에 중점을 두고 있으며, 수십억 개의 데이터 포인트를 효율적으로 처리합니다. 트랜잭션 지속성, 오프라인 데이터 융합, 실시간 검색을 위한 인덱싱을 포함하는 3단계 프로세스는 데이터 무결성과 응답성을 보장합니다. 이 프로세스는 데이터 수집 과정에서 병목 현상을 방지하기 위해 분리된 파이프라인을 사용합니다. 검색 서비스는 쿼리 전처리, 의미 검색 미세 조정, 정확한 결과를 위한 고급 텍스트 분석과 같은 기능을 제공합니다. 또한 검색 정확도를 향상시키기 위해 구문 일치, N-gram 분석, 퍼지 일치를 포함합니다. 시스템은 보다 미묘한 검색을 가능하게 하기 위해 집계 및 유연한 그룹화를 제공합니다. 전반적으로 목표는 관련 비디오 콘텐츠를 발견할 수 있는 강력한 도구를 제공하여 영화 제작자를 지원하는 것입니다.
CdXz5zHNQW_YdZx5oYSdr.png
"3년 전, 넷플릭스는 텔레비전만큼이나 오래된 형식인 라이브 스트리밍을 통해 전 세계를 어떻게 즐겁게 할 수 있는지 물었습니다. 이 질문은 코미디 쇼, 스포츠, WWE 이벤트를 포함한 수백 개의 라이브 이벤트 개발로 이어졌습니다. "Behind the Streams"라는 시리즈에서 넷플릭스는 라이브 스트리밍 기능을 구축하는 기술적 여정을 공유할 예정입니다. 라이브 스트리밍은 아키텍처 및 기술 선택에 대한 새로운 고려 사항을 도입했으며, 넷플릭스에서 잘 작동하도록 만들기 위해 상당한 구축이 필요했습니다. 넷플릭스의 라이브 아키텍처의 핵심 기둥에는 전용 방송 시설, 클라우드 기반의 중복 트랜스코딩 및 패키징 파이프라인, 라이브 콘텐츠 전달 확장, 라이브 재생 최적화, 클라우드에서 검색 및 재생 제어 서비스 실행이 포함됩니다. 넷플릭스는 또한 전문 도구와 시설을 사용하여 클라우드에서 실시간 메트릭을 중앙 집중화했습니다. 라이브 기능을 구축하는 것은 새로운 도전과 학습 기회를 가져왔으며, 넷플릭스는 여전히 라이브 이벤트를 더 효과적으로 제공하는 방법을 매일 배우고 있습니다. 지금까지의 주요 학습 내용은 광범위한 테스트, 정기적인 연습, 시청률 예측, 우아한 성능 저하 및 재시도 폭풍의 중요성입니다. 넷플릭스는 견고한 라이브 스트리밍 시스템 구축에 상당한 진전을 이루었지만, 여전히 배우고 개선해야 할 점이 많이 남아 있습니다."
CdXz5zHNQW_JBiedm3Ejv.png
Tudum.com는 넷플릭스의 공식 팬 대상지로, 매월 2000만 명 이상의 회원에게 독점 콘텐츠, 비하인드 스토리, 상호작용 경험을 제공합니다. 이 플랫폼의 아키텍처는 유지 가능, 확장 가능, 유연성을 위해 설계되었으며, Command Query Responsibility Segregation (CQRS)에 유사한 서버 주도 UI 접근 방식을 사용합니다. Tudum의 에디터리얼 팀은 콘텐츠를 생성하고, 이를 쓰기 데이터베이스에 저장한 후, 사용자들이 소비하는 읽기 최적화 형식으로 변환합니다. 초기 아키텍처는 Kafka를 사용하여 쓰기 및 읽기 데이터베이스를 분리하여 독립적인 확장 및 최종 일관성을 허용했습니다. 그러나 이 접근 방식은 콘텐츠 편집과 웹 사이트 반영 사이에 지연을 초래했습니다. 팀은 페이지 데이터 서비스의 근 캐시를 사용하여 페이지 구축을 가속화하는 데 사용되는 지연의 원인을 확인했습니다. 이 문제를 해결하기 위해 넷플릭스는 RAW Hollow, 즉 메모리 내, 공동위치, 압축 객체 데이터베이스를 개발했습니다. 이는 강한 읽기-쓰기 일관성 및 낮은 지연을 제공합니다. Tudum은 RAW Hollow를 테스트하는 완벽한 후보였으며, 이는 I/O를 크게 줄이고 O(1) 시간에 동기식 데이터 액세스를 가능하게 했습니다. 업데이트된 아키텍처는 Kafka 인프라의 필요성을 제거하고 데이터 전파 시간을 줄였으며, 작가 및 에디터가 초 단위로 변경을 미리 볼 수 있게 되었습니다. 마이그레이션은 또한 요청 시간을 줄였으며, 홈페이지 구축 시간이 1.4초에서 0.4초로 줄었습니다.
CdXz5zHNQW_0cHOBDLN2F.jpeg
넷플릭스의 오픈 커넥트 프로그램은 인터넷 서비스 공급자(ISP)와의 파트너쉽을 통해 콘텐츠 전달을 지역화하여 회원들에게 최상의 경험(QoE)을 제공하는 콘텐츠 전달 네트워크(CDN)입니다. 이 프로그램은 효율성과 비용 효율성을 위해 특별히 설계된 서버인 오픈 커넥트 어플라이언스(OCAs)를 사용합니다. 오픈 커넥트의 효율성을 평가하기 위해 넷플릭스는 캐시 미스, 즉 클라이언트에게 가장 적절한 OCA에서 바이트가 제공되지 않는 경우를 식별하는 프레임워크를 사용합니다. 캐시 미스는 세 가지 카테고리로 분류됩니다. 콘텐츠 미스는 로컬 사이트의 OCA에 파일이 없는 경우, 헬스 미스는 로컬 사이트의 OCA 하드웨어 리소스가 포화된 경우, 기타 미스는 기타 경우입니다. 넷플릭스는 캐시 미스를 계산하기 위해 두 가지 중요한 데이터 컴포넌트를 로깅합니다. 스티어링 플레이백 매니페스트 로그와 OCA 서버 로그입니다. 이러한 로그는 다양한 집계 수준에서 캐시 미스 메트릭스를 계산하는 데 사용됩니다. 캐시 미스를 계산하는 시스템 아키텍처는 로그 발송, 로그 통합, 로그 강화, 스트리밍 창 기반 조인으로 구성됩니다. 캐시 미스를 평가하는 데이터 모델은 오프라인 및 시뮬레이션에서 변수 매개변수와 함께 논리를 재생할 수 있도록 허용하여 프로덕션 트래픽에 영향을 주지 않고 새로운 조건 및 기능을 테스트할 수 있습니다.
CdXz5zHNQW_u3pdU106U1.png
넷플릭스는 데이터 효율성을 최적화하면서도 영화적 질감의 예술적 무결성을 보존하는 AV1 필름 그레인 합성(FGS) 스트림을 도입했습니다. 필름 그레인은 스토리텔링의 핵심 요소로서 영화에 깊이와 사실감을 더하지만, 기존 알고리즘으로는 압축하기 어렵습니다. AV1 FGS 도구는 필름 그레인 패턴과 필름 그레인 강도라는 두 가지 구성 요소를 통해 필름 그레인을 모델링합니다. 필름 그레인 패턴은 자기 회귀 모델을 사용하여 복제되고, 필름 그레인 강도는 스케일링 함수에 의해 제어됩니다. 인코딩 과정에서는 비디오에서 필름 그레인을 제거하고 압축한 다음, 그레인의 패턴과 강도를 압축된 비디오 데이터와 함께 전송합니다. 재생 중에는 블록 기반 방법을 사용하여 필름 그레인을 다시 생성하여 비디오에 다시 통합합니다. AV1 FGS를 활성화하면 비트 전송률이 크게 줄어들어 더 적은 데이터로 고품질 비디오 스트리밍이 가능해졌습니다. 또한 합성된 노이즈가 압축 아티팩트를 효과적으로 가려 시각적 품질도 향상되었습니다. 넷플릭스는 플랫폼 전반에 걸쳐 FGS를 출시했으며, 이제 지원되는 장치에서 FGS 지원 스트림을 즐길 수 있습니다. 이 출시로 인해 넷플릭스 회원들은 더 낮은 비트 전송률, 감소된 재생 오류 및 향상된 재생 안정성을 통해 더 부드럽고 안정적인 품질의 경험을 누릴 수 있게 되었습니다.
CdXz5zHNQW_VP7NReszvY.png
Netflix의 서비스가 성장함에 따라 이를 지원하는 시스템의 복잡성도 증가하여 중복되고 일관되지 않은 모델, 일관되지 않은 용어, 데이터 품질 문제 및 데이터 간의 일관되지 않은 관계로 이어집니다. 이러한 문제를 해결하려면 모델을 한 번 정의한 후 해당 정의를 모든 곳에서 재사용하고, 개념을 실제 시스템에 연결하고 이러한 정의를 외부로 프로젝션하고, 스키마를 생성하고, 시스템 전반에 걸쳐 일관성을 적용할 수 있는 새로운 기반이 필요합니다. 이는 UDA(Unified Data Architecture)의 개발로 이어졌으며, 이 UDA는 도메인을 한 번 모델링하고 시스템 전반에 걸쳐 일관되게 표현하여 자동화, 검색 가능성 및 의미론적 상호 운용성을 강화합니다. UDA를 통해 사용자와 시스템은 도메인 모델을 등록 및 연결하고, 도메인 모델을 데이터 컨테이너에 카탈로그 및 매핑하고, 도메인 모델을 스키마 정의 언어로 변환하고, 데이터 컨테이너 간에 데이터를 충실하게 이동하고, 도메인 개념을 검색 및 탐색하고, 프로그래밍 방식으로 지식 그래프를 검사할 수 있습니다. UDA는 비즈니스 개념을 스키마 및 데이터 컨테이너에 연결하는 지식 그래프로, UDA에서 도메인 모델링을 위한 언어를 정의하는 Upper라는 사내 메타모델을 기반으로 합니다. Upper는 도메인과 그 개념을 공식적으로 설명하는 언어이며 데이터 컨테이너 표현 및 매핑을 모델링하는 데 사용됩니다. UDA는 명명된 그래프 우선 정보 모델을 채택하여 전체 그래프에서 해상도, 모듈성 및 거버넌스를 보장합니다.
CdXz5zHNQW_aXb9bCvUTK.png
추천 시스템은 전자 상거래, 스트리밍 미디어, 소셜 네트워크의 필수 구성 요소로 제품 및 비즈니스에 큰 영향을 미칩니다. 넷플릭스에서는 이러한 시스템이 적절한 콘텐츠를 회원에게 적시에 제공합니다. 추천 기초 모델은 사용자 선호도를 이해하는 데 상당한 진전을 이루었습니다. 그러나 사용자 세션의 이해를 넘어 다음 항목 예측을 넘어선 사용자 의도 예측을 통합하여 모델의 기능을 추가로 향상시킬 수 있습니다. 최근 연구에서는 온라인 플랫폼에서 사용자 의도를 이해하는 것이 더 정확하고 개인화된 추천을 이끌어내는 데 중요하다는 것을 강조했습니다. FM-Intent는 새로운 추천 모델로, 사용자의 짧은 기간 및 장기적인 신호를 대리하여 잠재적인 사용자 의도를 포착하고, 이를 다음 항목 추천을 개선하는 데 사용합니다. 이 모델은 의도 예측과 다음 항목 추천 간에 계층적 관계를 설정하여 더 일관되고 효과적인 추천 파이프라인을 생성합니다. FM-Intent는 세 가지 주요 기여를 합니다. 새로운 추천 모델, 계층적 다중 작업 학습 접근 방식, 그리고 최첨단 모델보다 유의미한 개선 사항을 보여주는 포괄적인 실험 검증입니다. FM-Intent는 넷플릭스의 추천 생태계에 성공적으로 통합되어 있으며, 개인화된 UI 최적화, 분석 및 향상된 추천 신호와 같은 다양한 다운스트림 애플리케이션에 활용할 수 있습니다.
CdXz5zHNQW_QduYXjmsjM.png
넷플릭스는 광고 캠페인을 모니터링, 측정 및 최적화하기 위해 강력한 이벤트 처리 플랫폼을 구축했습니다. 광고 서빙 시스템은 의사결정, 빈도 제한, 페이싱 및 개인화를 조정하기 위해 꾸준한 광고 이벤트 스트림에 의존합니다. 초기 광고 이벤트 처리 시스템은 마이크로소프트 광고 서버, 넷플릭스 광고 관리자 및 광고 이벤트 핸들러라는 세 가지 주요 구성 요소로 구성되었습니다. 이 시스템은 노출 수, 빈도 제한 및 수익 창출 프로세스에 대한 통찰력을 제공하여 피드백 루프가 효과적으로 작동하도록 설계되었습니다. 사업이 확장됨에 따라 데이터 볼륨 증가 및 타사 추적 URL과 같은 과제를 해결하기 위해 키-값 추상화를 사용하는 새로운 지속성 계층이 도입되었습니다. 이벤트 처리 파이프라인은 빈도 제한, 가격 정보 및 강력한 보고 시스템과 같은 기능을 통합하여 자체 광고 기술을 지원하도록 더욱 발전했습니다. 소비자에게 단일 통합 데이터 계약을 제공하고 상위 시스템과 소비자 간의 우려 사항을 분리하는 중앙 집중식 광고 이벤트 수집 시스템이 계획되었습니다. 새로운 파이프라인은 측정, 재무/청구, 보고, 빈도 제한 및 광고 서버로의 필수 피드백 루프 유지와 같은 다양한 기능을 지원했습니다. 광고 이벤트 처리 시스템의 개발은 다양한 팀 간의 팀워크, 계획 및 조정을 보여주는 신중하게 조율된 여정이었습니다. 새로운 시스템은 프로그래매틱 구매 기능 지원, 옵트아웃 신호 공유 및 정확한 보고 및 측정 보장을 통해 비즈니스를 위한 새로운 기능을 출시하는 능력을 크게 향상시켰습니다.
CdXz5zHNQW_x4VyedRjxa.png
넷플릭스는 기술 파트너와의 협력을 통해 도구와 워크플로우를 개선함으로써 회원 경험 향상에 우선순위를 둡니다. 이 협력은 제작 과정 전반에 걸쳐 대화 명료성을 향상시키는 데 초점을 맞추고 있으며, 촬영 현장에서 스크린에 이르기까지 발생하는 문제를 해결합니다. 주요 이니셔티브는 대화 무결성 파이프라인(Dialogue Integrity Pipeline)으로, 시끄러운 환경 및 오디오 믹싱과 같이 명료성에 영향을 미치는 요인을 식별하고 완화합니다. 넷플릭스는 업계 표준 음량 측정기를 사용하고, 대화 명료성을 분석하기 위해 eSTOI 기반 측정 시스템을 개발했습니다. 사전 전달 최적화를 개선하기 위해 넷플릭스는 Fraunhofer IDMT 및 Nugen Audio와 파트너십을 맺고 DialogCheck 플러그인을 개발했습니다. 이 플러그인은 디지털 오디오 워크스테이션(DAW)에 통합되어 사운드 엔지니어에게 실시간 피드백을 제공합니다. 이 협력은 Fraunhofer의 머신러닝 기반 음성 명료성 솔루션과 Nugen Audio의 오디오 플러그인 전문 지식을 활용합니다. DialogCheck 플러그인을 통해 대화 명료성 문제를 조기에 감지하고 해결하여 예술적 의도가 훼손되지 않도록 보장합니다. 궁극적인 목표는 청취 환경에 관계없이 모든 시청자에게 몰입적이고 접근성 높은 스토리텔링을 제공하는 것입니다. 이러한 협력적 접근 방식은 넷플릭스의 오디오 우수성 및 스토리텔링 혁신에 대한 헌신을 강조합니다.
CdXz5zHNQW_u9iv4wSU0L.png
넷플릭스는 확장된 네트워크 통찰력을 위해 eBPF를 사용하여 대규모로 TCP 플로우 로그를 수집하지만, 플로우 IP 주소를 워크로드 ID에 정확하게 연결하는 것은 상당한 과제였습니다. 초기 연결 방식은 내부 IP 주소 추적 서비스인 Sonar에 의존했지만, 분산 시스템의 지연 및 장애로 인해 잘못된 연결이 발생했습니다. 잘못된 연결로 인해 플로우 데이터의 신뢰성이 떨어져 의사결정에 활용할 수 없었으며, 연결하기 전에 수신된 플로우를 15분 동안 보류하는 해결 방법으로도 문제가 해결되지 않았습니다. 이 문제를 해결하기 위해 넷플릭스는 로컬 워크로드 ID를 환경에서 판별하여 로컬 IP 주소를 연결하는 새로운 연결 방식을 개발했습니다. 컨테이너 워크로드의 경우, 넷플릭스는 컨테이너 IP 주소 할당 서비스인 IPMan을 활용하여 로컬 IP 주소를 연결했습니다. 로컬 IP 주소가 연결되면, 각 워크로드가 특정 IP 주소를 소유하는 시간 범위를 학습하여 원격 IP 주소를 연결할 수 있습니다. FlowCollector는 이러한 정보를 나타내는 인메모리 해시맵을 유지하고, Kafka를 사용하여 학습된 시간 범위를 다른 노드와 공유합니다. 이 새로운 방식은 정확한 연결을 달성하고 일시적인 문제를 효과적으로 처리하며, 단순성과 인메모리 조회 덕분에 비용 효율적입니다. 이 방식은 해당 지역의 노드로 플로우를 전달하여 지역 간 IP 주소 연결로 확장되었습니다. 마지막으로, 넷플릭스의 콘텐츠 전송 네트워크에 속한 것과 같은 비워크로드 IP 주소 연결로도 확장되었습니다.
CdXz5zHNQW_ODQpwXb03K.png
영화 산업이 클라우드 기반 워크플로우로 전환하는 데는 전 세계적인 구현에 어려움이 따릅니다. 넷플릭스는 영화 제작자를 위해 설계된 Media Production Suite (MPS)를 통해 이러한 문제점을 해결하고자 합니다. MPS는 미디어 관리를 간소화하여 지루한 작업을 없애고 창의적인 집중력을 높여줍니다. 물리적 테이프를 사용하는 기존 워크플로우는 느리고 번거로워 협업을 방해합니다. 디지털 워크플로우 또한 배포 및 표준화에 어려움을 겪습니다. 클라우드는 이러한 문제에 대한 해결책을 제시하지만 운영 및 기술적 장애물을 극복해야 합니다. 넷플릭스는 사람과 애플리케이션을 미디어에 가져오는 방식으로 이 문제를 해결합니다. 즉, 그 반대가 아닌 것이죠. MPS는 다양한 시장의 요구를 고려하여 기술 및 표준화의 글로벌 격차를 해소합니다. 이 스위트는 업계 표준을 사용하여 색상 관리 및 프레임 작업과 같은 프로세스를 자동화합니다. 인프라는 사용자 성능에 최적화된 클라우드 및 물리적 기능을 결합합니다. MPS에는 섭취(ingest), 미디어 라이브러리, 데일리, 원격 워크스테이션 등을 위한 도구가 포함되어 있습니다. 350개 이상의 작품이 MPS 도구를 활용했으며, 다양한 글로벌 지역에서 피드백을 받았습니다. 브라질 시리즈 "Senna"는 MPS를 채택하여 지리적 장벽을 극복하는 능력을 보여주었습니다.
넷플릭스는 회원 선호 학습을 중앙 집중화하고 다양한 추천 모델 전반의 효율성을 향상시키기 위해 추천을 위한 파운데이션 모델을 개발하고 있습니다. 현재 시스템은 유지 관리에 비용이 많이 들고 혁신을 공유하는 데 어려움을 겪는 특화된 모델을 가지고 있습니다. 파운데이션 모델은 광범위한 사용자 상호작용 기록과 콘텐츠 데이터를 학습하여 이러한 학습 내용을 다른 모델에 배포하는 것을 목표로 합니다. 대규모 언어 모델에서 영감을 얻어, 이 접근 방식은 반지도 학습을 사용하여 데이터 중심 전략으로 전환합니다. 넷플릭스는 사용자 상호작용을 토큰화하여 데이터 세분성과 시퀀스 압축의 균형을 맞춰 긴 상호작용 기록을 처리합니다. 희소 어텐션 메커니즘과 슬라이딩 윈도우 샘플링을 사용하여 훈련 중에 계산 효율성을 관리합니다. 각 토큰에는 액션 및 콘텐츠에 대한 풍부하고 이질적인 정보가 포함되어 있으며, 요청 시점 및 액션 후 기능을 활용합니다. 이 모델은 GPT와 유사하게 자기 회귀적 다음 토큰 예측 목표를 사용하지만, 다양한 상호작용 중요성을 고려하도록 수정되었습니다. 모델은 여러 토큰을 예측하고 보조 예측 목표를 사용하여 장기적인 종속성을 포착하고 정확도를 향상시킵니다. 엔티티 콜드 스타팅 문제를 해결하기 위해, 이 모델은 증분 훈련을 통해 구축되었으며, 엔티티와 입력의 메타데이터 정보를 사용하여 보이지 않는 엔티티로 추론할 수 있습니다.
CdXz5zHNQW_VZmJPzyqeS.png
넷플릭스가 AV1 지원 기기에서 HDR10+ 콘텐츠 스트리밍을 시작하여 인증된 HDR10+ 기기에서 더욱 향상된 시청 경험을 제공합니다. 이는 정적 메타데이터만 사용했던 기존 HDR10 콘텐츠를 개선한 것입니다. HDR10+의 동적 메타데이터는 화질과 정확도를 향상시킵니다. 넷플릭스는 HDR 기술 도입의 선구자였으며, 지난 5년간 HDR 스트리밍은 300% 이상 증가했습니다. 현재 넷플릭스는 11,000시간 이상의 HDR 콘텐츠를 제공하고 있습니다.넷플릭스는 가장 효율적인 코덱 중 하나인 AV1 비디오 코덱을 사용하여 HDR10+를 활성화했습니다. AV1은 이미 넷플릭스에서 두 번째로 많이 스트리밍되는 코덱이며, HDR10+ 스트림이 추가됨에 따라 곧 가장 많이 스트리밍되는 코덱이 될 것으로 예상됩니다. 넷플릭스는 새로운 출시작과 기존 인기 HDR 콘텐츠 모두에 HDR10+ 스트림을 추가하고 있으며, 연말까지 모든 HDR 콘텐츠에 HDR10+ 경험을 제공하는 것을 목표로 하고 있습니다.HDR10+는 돌비 비전, HDR10과 함께 널리 사용되는 세 가지 HDR 포맷 중 하나입니다. HDR10+와 돌비 비전은 프레임 단위로 콘텐츠 이미지 통계를 제공하는 동적 메타데이터를 사용하여 각 장면에 최적화된 톤 매핑 조정을 가능하게 합니다. 이를 통해 원본에 대한 더 높은 인지적 충실도를 달성하여 창작자의 의도를 보존합니다. HDR10+를 시청하려면 넷플릭스 프리미엄 요금제에 가입되어 있어야 하며, 해당 콘텐츠가 HDR10+ 포맷으로 제공되어야 하고, 회원 기기가 AV1과 HDR10+를 지원해야 합니다.HDR10+ 출시에는 넷플릭스의 여러 팀이 협력했으며, 이 아이디어를 현실로 만드는 데 기여한 모든 분들께 감사드립니다. 혁신과 품질에 대한 헌신은 모든 회원에게 몰입감 있고 진정한 시청 경험을 제공하려는 넷플릭스의 노력을 강조합니다.
CdXz5zHNQW_x7iQNmTXt1.png
넷플릭스는 포괄적인 타이틀 관찰성을 달성하기 위해 개인화 및 발견 스택 내 모든 서비스에 관찰성 엔드포인트를 도입했습니다. 스택에 포함된 각 마이크로서비스는 실제 동작을 정확하게 반영하고, 표준화하며, 인사이트 삼각형(Insight Triad)에 답하는 새로운 "타이틀 상태(Title Health)" 엔드포인트를 도입해야 했습니다. 인사이트 삼각형은 엔드포인트가 타이틀이 홍보에 적합한지 여부, 적합하지 않은 이유, 문제 해결 방법을 답해야 함을 의미합니다.관찰성 서비스와 개인화 스택의 관찰성 엔드포인트 간 통신을 표준화하기 위해 안정적인 프로토콜 요청/응답 형식이 개발되었습니다. 이 솔루션의 상위 아키텍처는 관찰성 엔드포인트 구축, 사전 예방적 모니터링, 실시간 타이틀 노출 추적, 최적화된 데이터 저장소에 데이터 저장, 대시보드를 위한 쉽게 통합 가능한 API 제공을 포함합니다.타이틀 상태 마이크로서비스는 30분마다 예약된 수집 작업을 실행하여 할당된 로우 서비스에서 관련 타이틀 상태 정보를 가져옵니다. 실시간 타이틀 노출 데이터는 Kafka 큐에서 처리되며, 2분마다 큐를 폴링하여 노출 데이터를 가져옵니다. 그런 다음 데이터가 집계되어 이해관계자에게 추가적인 상태 표시기로 표시됩니다.데이터는 각 수집기마다 전용 Hollow 피드에 저장됩니다. 이를 통해 고성능 읽기 전용 액세스가 가능하고 전반적인 상태 모니터링과 타이틀 기록 추적이 가능합니다. 관찰성 대시보드는 타이틀 상태 서비스를 사용하여 이해관계자에게 타이틀 상태를 표시하며, 시스템에는 문제가 회원에게 영향을 미치기 전에 문제를 파악하고 해결하기 위해 트래픽을 미리 시뮬레이션하는 "타임 트래블(Time Travel)" 기능도 있습니다.이 시스템의 아키텍처와 전략을 통해 넷플릭스는 타이틀 출시 관찰성을 향상시켜 흥미진진한 시청 경험을 보장하고 콘텐츠 제작자 및 파트너와의 신뢰를 구축했습니다. 또한 이 솔루션은 미래 혁신을 위한 기반을 마련하여 모든 스토리가 의도된 대상에게 도달하고 모든 회원이 넷플릭스에서 좋아하는 타이틀을 즐길 수 있도록 합니다.
CdXz5zHNQW_bbTwixEEHc.png
넷플릭스에서 플랫폼의 이미지들은 "노출"이라고 불리며 사용자 경험을 개인화하는 데 중요한 역할을 합니다. 이러한 노출을 캡처하고 처리하는 것은 복잡한 작업으로, 정교한 시스템이 필요합니다. 시스템은 일일로 수십억 개의 노출을 추적하고 처리하며, 각 프로필의 노출에 대한 자세한 기록을 유지합니다. 이 노출 기록은 향상된 개인화, 빈도 제한, 새로운 릴리스 강조, 분석적 통찰력을 얻는 데 필수적입니다. 노출을 관리하는 첫 번째 단계는 Source-of-Truth(SOT) 데이터셋을 생성하는 것입니다. 이는 다양한 다운스트림 워크플로우를 지원하고 여러 사용 사례를 가능하게 합니다. 원시 노출 이벤트는 클라이언트 측에서 수집되어 사용자 지정 이벤트 추출기, 아파치 카프카, 아파치 아이스버그를 통해 처리됩니다. 그런 다음 데이터는 아파치 플링크를 사용하여 필터링, 풍부화, 구조화되어 넷플릭스의 노출 데이터에 대한 확고한 진실의 근거가 됩니다. 시스템은 자세한 메트릭스를 수집하고 잠재적인 문제가 발생할 경우 팀에 경고를 보내며, 높은 품질의 노출을 보장합니다. 아키텍처는 대량의 노출 이벤트를 실시간으로 처리하는 데 설계되었으며, 확장성, 유연성, 높은 가용성을 중점으로 합니다. 향후 작업에는 비스키마 이벤트를 처리하는 것, 성능 튜닝을 자동화하는 것, 데이터 품질 경고를 개선하는 것이 포함됩니다.
넷플릭스에서 무결한 제목 출시와 검색 가능성을 보장하기 위해선, 솔루션에 뛰어들기 전에 더 넓은 맥락을 이해하는 것이 필수적입니다. 이러한 생각 있는 접근 방식은 미래의 탄력성과 확장성을 구축합니다. 첫 번째 단계는 더 큰 그림을 이해하는 것입니다. 즉, 이해 관계자, 현재의 경관, 핵심 문제, 비즈니스 우선순위를 확인하는 것입니다. 주요 이해 관계자는 제목 출시 운영자, 개인화 시스템 엔지니어, 제품 매니저, 크리에이티브 대 diện입니다.현재의 경관을 매핑하는 과정에서 제목 출시 관찰 가능성에 대한 확립된 솔루션이 없었음을 알게 되었습니다. 이는 cả 도전과 기회를 제시합니다. 핵심 문제는 개인화 스택에서 모든 제목이 공정하게 대우받는 것을 보장하는 것이었습니다. 이를 해결하기 위해 "제목 건강"이라는 공유된 이해를 도입했습니다. 이는 검색 가능성 및 회원 참여 측면에서 제목의 성과를 반영하는 다양한 지표와 지표를 포함합니다.제목 건강은 각 제목의 수명 주기 모니터링 및 최적화를 허용하여 파트너와 원칙 및 요구 사항에 대한 조정을 가능하게 했습니다. 제목 출시 관찰 가능성을 위한 강력한 계획을 구축하기 위해 문제를 세 가지 주요 영역으로 분류했습니다. 즉, 제목 설정, 개인화 시스템, 알고리즘입니다. 문제를 분류하면 도전을 체계적으로 해결할 수 있고, 모든 제목에 대한 신뢰할 수 있는 개인화 경험을 제공할 수 있습니다.문제 분석 결과, 설정 문제가 가장 일반적이나 가장 쉽게 해결할 수 있는 반면, 알고리즘 문제는 드물지만 해결하기 어려운 것으로 나타났습니다. 옵션 평가 결과, 첫 번째로 proactice 문제 감지에 초점을 두기로 결정했습니다. 즉, 출시 전에 문제를 잡아 더 매끄러운 출시, 더 나은 회원 경험, 더 강한 시스템 신뢰성을 보장하는 것입니다. 이러한 결정은 플랫폼의 복잡성이 증가하는 것에 따라 성장할 수 있는 확장 가능하고 강력한 시스템의 기초를 마련했습니다.
CdXz5zHNQW_aUcN7HOcn2.png
CdXz5zHNQW_x65HF2Cxou.png
넷플릭스는 매달 1,000개가 넘는 글로벌 콘텐츠 출시를 관리하는 것이 최우선 과제이며, 이를 위해서는 포괄적인 가시성을 제공하는 강력한 시스템이 필요합니다. 넷플릭스는 모든 콘텐츠를 적절한 시청자와 연결하는 것을 목표로 하지만, 오류율이나 CPU 사용률과 같은 기존 시스템 지표는 콘텐츠 성공의 뉘앙스를 포착하지 못합니다. 이러한 간극을 해소하기 위해 넷플릭스는 이러한 뉘앙스를 인식하고 모든 콘텐츠가 빛날 수 있도록 지원하는 시스템을 설계해야 했습니다.넷플릭스 오리지널 초기에는 출시팀이 수동으로 콘텐츠 배치를 확인했지만, 이러한 방식은 회사의 글로벌 확장과 함께 확장될 수 없었습니다. 그 결과 넷플릭스는 콘텐츠 성과 및 검색 가능성에 대한 복잡한 질문에 정확하고 시의적절한 답변을 제공하는 데 운영상의 어려움을 겪었습니다. 넷플릭스는 모든 콘텐츠가 메타데이터 및 자산이 정확하게 구성되고, 데이터가 원활하게 흐르며, 알고리즘이 의도대로 작동하도록 완벽하게 출시될 수 있도록 확장 가능한 솔루션이 필요했습니다.이러한 과제를 해결하기 위해 넷플릭스는 로그 처리와 개인화 시스템의 가시성 엔드포인트라는 두 가지 옵션을 고려했습니다. 로그 처리는 콘텐츠 출시 모니터링 및 분석을 위한 간단한 솔루션을 제공하지만, 문제를 미리 감지하고 정확성을 보장하는 데는 한계가 있습니다. 반면 가시성 엔드포인트는 실시간 모니터링, 사전 문제 감지 및 향상된 정확성을 제공하지만 상당한 초기 투자와 동기화 작업이 필요합니다.넷플릭스는 궁극적으로 실시간 모니터링, 사전 문제 감지 및 진실 출처 조정을 포함하는 포괄적인 가시성 전략을 채택했습니다. 이러한 접근 방식은 플랫폼 전반에서 콘텐츠의 성공적인 출시와 검색 가능성을 보장하는 회사의 역량을 크게 향상시켰습니다. 시리즈의 다음 부분에서는 넷플릭스가 이를 어떻게 달성했는지에 대한 주요 기술적 통찰력과 세부 정보를 공유할 것입니다.
넷플릭스는 대용량의 시간 이벤트 데이터를 효율적으로 저장하고 조회할 수 있는 TimeSeries Abstraction을 개발했습니다. 이 시스템은 높은 처리량의 쓰기, 대용량 데이터의 효율적인 조회, 글로벌 읽기 및 쓰기, 설정 가능한 구성, 비용 효율성을 지원하도록 설계되었습니다. TimeSeries Abstraction은 분할된 데이터, 유연한 저장소, 구성 가능성, 확장성 및 샤딩된 인프라스트럭처를 포함한 핵심 설계 원칙을 중심으로 구축되었습니다.데이터 모델은 이벤트 항목, 이벤트, 시간 시리즈 ID 및 네임스페이스로 구성됩니다. 이벤트 항목은 키-값 쌍으로 이벤트 데이터를 저장하며, 이벤트는 하나 이상의 이벤트 항목으로 구성된 구조화된 컬렉션입니다. 시간 시리즈 ID는 데이터셋의 보존 기간 동안의 이벤트 컬렉션이며, 네임스페이스는 시간 시리즈 ID 및 이벤트 데이터의 컬렉션입니다.TimeSeries Abstraction은 이벤트 데이터와 상호 작용하기 위한 API를 제공합니다. 여기에는 WriteEventRecordsSync, WriteEventRecords, ReadEventRecords, SearchEventRecords 및 AggregateEventRecords가 포함됩니다. 저장소 계층은 기본 데이터 저장소와 선택적 인덱스 데이터 저장소로 구성되며, Apache Cassandra와 Elasticsearch가 각각 데이터 저장소 및 인덱싱에 대한 선호되는 선택입니다.기본 데이터 저장소는 시간 간격에 따라 데이터를 관리 가능한 청크로 나누는 시간 분할 방식을 사용하여 특정 시간 범위의 효율적인 조회 및 저장소 및 조회 성능 최적화를 허용합니다. 데이터는 또한 시간 버킷 및 이벤트 버킷으로 나누어져 효과적인 범위 스캔 및 높은 처리량의 쓰기 작업을 관리할 수 있습니다.TimeSeries Abstraction은 대규모 시간 이벤트 데이터의 저장 및 조회에 대한 도전을 해결하도록 설계되었습니다. 여기에는 높은 처리량, 효율적인 조회, 글로벌 읽기 및 쓰기, 설정 가능한 구성 및 비용 효율성이 포함됩니다. 고유한 이벤트 데이터 모델 및 확장 가능한 저장소 계층을 사용하여 TimeSeries Abstraction은 시간 데이터를 관리하기 위한 유연하고 비용 효율적인 솔루션을 제공합니다.
넷플릭스의 키-값 데이터 추상화 계층 (KV DAL)은 데이터 접근을 단순화하고 인프라의 신뢰성을 향상시키는 기본적인 추상화 서비스입니다. 이는 개발자에게 일관된 인터페이스를 제공하며, 이는 데이터베이스의 종류에 관계없이 동일합니다.KV 추상화는 두 단계의 맵 아키텍처를 사용하여 단순하고 복잡한 데이터 모델을 모두 지원합니다. 다양한 사용 사례에 맞게 4개의 기본 CRUD API (PutItems, GetItems, DeleteItems)와 복잡한 MutateItems 및 ScanItems API를 제공합니다.네임스페이스는 데이터가 저장되는 위치와 방법을 정의하며, 논리적 및 물리적 분리를 제공합니다. 이는 다양한 성능, 내구성 및 일관성 요구에 따라 다른 사용 사례를 가장 적합한 저장 시스템으로 라우팅할 수 있도록 합니다.PutItems 및 DeleteItems API는 데이터 무결성을 보장하고 작업 순서를 올바르게 유지하기 위해 멱등성 토큰을 사용합니다. 클라이언트에서 생성한 단조 증가 토큰이 신뢰성을 위해 선호됩니다.대용량 blob을 처리하기 위해 KV 추상화는 청킹을 사용합니다. 이 기술은 대용량 데이터를 작은 청크로 나누어 적절한 메타데이터와 함께 스테이징 및 커밋합니다.페이징은 대용량 데이터 세트를 관리하는 데 중요한 기능입니다. GetItems API는 다음 페이지 토큰을 사용하여 페이징을 지원하여 여러 요청에 걸쳐 효율적인 데이터 검색을 보장합니다.삭제된 데이터를 나타내는 투명석은 성능에 영향을 미칠 수 있습니다. KV는 레코드 및 범위 삭제를 최적화하여 단일 투명석을 생성하여 부하 피크를 줄이고 일관된 성능을 유지합니다.아이템 수준 삭제는 TTL 기반 삭제와 지터를 사용하여 처리됩니다. 이 기술은 저장 엔진의 복잡성을 숨기고 삭제가 읽기 페이징에 미치는 영향을 최소화합니다.멱등성과 청킹은 꼬리 지연 시간을 처리하고 예측 가능한 저지연 성능을 보장하는 데 필수적입니다. 이러한 설계 철학은 넷플릭스의 글로벌 운영에 필요한 신뢰성과 성능에 기여합니다.
넷플릭스는 eBPF를 사용하여 지속적으로 런 큐 지연 시간을 모니터링합니다. 런 큐 지연 시간은 성능이 저하되는 인접 컨테이너에서 서버 리소스를 과도하게 사용하는 '시끄러운 이웃' (noisy neighbors) 컨테이너의 지표입니다.eBPF 훅 (sched_wakeup, sched_wakeup_new, sched_switch)은 런 큐 지연 시간을 캡처하고, cgroup ID와 관련시킵니다. kfuncs (커널 함수)를 사용하여 안전한 RCU 보호 데이터 액세스를 제공합니다.eBPF의 속도 제한기는 사용자 공간으로 전송되는 데이터 포인트를 제한하여 관찰 가능성과 성능을 균형을 맞춥니다.사용자 공간 프로세스는 eBPF 링 버퍼에서 이벤트를 처리하고, 런 큐 지연 시간 (runq.latency)과 선점 카운트 (sched.switch.out)를 포함한 메트릭을 Atlas에 전송합니다. 이러한 메트릭은 cgroup ID로 식별됩니다.런 큐 지연 시간과 선점 카운트 메트릭은 모두 시끄러운 이웃을 식별하는 데 필요합니다. 런 큐 지연 시간만으로는 CPU 제한에 도달한 컨테이너에서 오류가 발생할 수 있기 때문입니다.사례 연구에서는 새로운 컨테이너가 호스트 CPU를 완전히 사용하여 런 큐 지연 시간과 선점이 급증하는 시끄러운 이웃 문제를 보여줍니다.시스템 프로세스는 선점 카운트 메트릭을 사용하여 시끄러운 이웃으로 식별되었습니다.eBPF 코드 최적화, BPF_MAP_TYPE_HASH 사용, 직접 태스크 구조 멤버 액세스 및 커널 태스크 무시를 통해 오버헤드를 최소화했습니다.커널 통계 계산을 개선하기 위해 리눅스 커널 패치가 제출되어 승인되었습니다.BPFtop, 오픈 소스 eBPF 프로세스 모니터링 도구를 사용하여 eBPF 코드의 오버헤드를 측정했습니다.
넷플릭스는 회원의 만족도를 향상시키기 위해 개인화 알고리즘을 사용하여 콘텐츠 추천을 제공합니다. 추천은 회원의 피드백과 콘텍스트를 고려하는 컨텍스트 밴딧 문제로 간주됩니다. 전통적인 추천 시스템은 클릭수와 같은 단기 지표를 최적화하는 데 초점을 맞추고 있지만, 이는 장기 만족도를 완전히 포착하지 못할 수 있습니다. 단순히 유지율을 최적화하는 것만으로는 제약이 있으므로 넷플릭스는 장기 회원 만족도와 일치하는 프록시 보상 함수를 사용합니다. 클릭률은 간단한 프록시 보상이지만 넷플릭스는 회원의 다양한 행동과 그 행동이 만족도에 미치는 영향을 고려하여 그 너머로 확장합니다. 보상 공학은 프록시 보상 함수를 장기 회원 만족도와 일치하도록 개선하는 반복적인 과정입니다. 이는 가설 형성, 보상 정의, 밴딧 정책 훈련 및 A/B 테스트를 포함합니다. 넷플릭스는 지연된 피드백의 문제를 예측하여 모든 피드백을 프록시 보상 함수에 사용할 수 있도록 해결합니다. 오프라인 모델 개선에도 불구하고 온라인-오프라인 지표 차이가 발생할 수 있습니다. 넷플릭스는 프록시 보상 정의를 추가로 개선하여 이를 해결합니다. 여전히 풀어야 할 질문들도 있습니다. 예를 들어 프록시 보상 함수 학습을 자동화하는 방법, 지연된 피드백을 기다리는 최적의 시간을 결정하는 방법, 강화 학습을 통해 장기 만족도와의 일치를 향상시키는 방법 등입니다.