호우동의 개발일지

Today :

스트리밍 저장 비디오 - 넷플릭스

  • 넷플릭스 비디오 배포에는 2가지 주요 구성요소
    1. 아마존 클라우드
    2. 자체 CDN 인프라가 있음

 

 

 

아마존 클라우드

  • 웹사이트는 아마존 클라우드에서 모든 것이 실행된다.
    • 넷플릭스에서의 웹사이트
      • 사용자 등록 및 로그인, 결제, 영화 장르 검색, 영화 추천 서비스 등 다양한 기능 처리

 

 

아마존 클라우드의 주요한 기능

  • 콘텐츠 수집(contetent ingestion)
    • 넷플릭스는 고객들에게 비디오 분배 전, 먼저 영화를 수집하고 처리해야 한다.
    • 영화의 스튜디오 마스터 버전을 받아서 클라우드 시스템의 호스트에 업로드함

  • 콘텐츠 처리(content processing)
    • 아마존 클라우드 시스템의 기기에서는 각 영화의 여러 가지 형식의 비디오를 생성
      ← 고객들의 다양한 플레이어 기기 사양에 적합하기 위해

    • 각 형식별로 다양한 비트율의 여러 가지 버전을 생성
      ← DASH를 이용한 HTTP 적응적 스트리밍 서비스를 위해

  • CDN으로의 버전 업로드
    • 영화의 다양한 버전이 생성되면 이러한 버전을 CDN으로 업로드

 

 

 

 

자체 CDN 인프라 구축

  • 자사의 모든 비디오를 스트리밍 할 수 있는 자체 프라이빗 클라우드를 구축
    • 처음 넷플릭스의 경우(2007년), 3개의 CDN 회사가 비디오 콘텐츠를 배포

  • 자체 CDN 구축을 위해 넷플릭스는 IXP 및 거주용 ISP 자체에서 서버 랙 설치
    • 현재 IXP 위치에 200대 이상의 서버 랙과 서버 랙 수용을 위해 ISP 장소도 보유
    • 넷플릭스는 잠재적인 ISP 파트너에게 무료 랙 설치 지침을 제공
    • IXP 설치에는 수십 개의 서버와 DASH를 지원하는 여러 버전의 비디오 포함

 

 

  • 각각의 랙 서버에는 10 Gbps 이더넷 포트와 100TB 이상의 스토리지가 존재
  • 랙에 있는 서버의 수는 다양함

 

 

 

넷플릭스가 서버를 채우는 방식

  • 넷플릭스는 풀 캐싱(pull-caching)을 사용하여 IXP 및 ISP의 CDN 서버를 채운다.
  • 대신 사용량이 적은 시간에 비디오를 CDN 서버에 푸시하여 배포
  • 전체 라이브러리를 보유할 수 없는 위치의 경우
    → 가장 많이 결정되는 비디오만 푸시

 

 

 

 

영화 전송에 관련된 서버와 클라이언트 간의 동작

  1. 사용자가 재생할 영화를 선택
  2. 넷플릭스 소프트웨어가 해당 영화 사본을 갖고 있는 CDN 서버를 결정
    • 넷플릭스 소프트웨어는 아마존 클라우드에서 실행 중임

  3. 영화가 있는 서버 중, 소프트웨어는 클라이언트 요청에 최적의 서버를 결정
    • 서버 선택 방식
      • 랙 서버를 선택할 때의 조건 → 일반적인 선택
        • 클라이언트가 해당 ISP에 설치된 CDN 서버 랙에 있는 로컬 ISP를 사용
        • 해당 랙에 요청된 사본이 있는 경우

      • 그렇지 않은 경우, 근처에 있는 IXP 서버가 선택됨

  4. CDN 서버 결정 후, 클라이언트는 요청된 영화의 매니페스트 파일과 특정 서버의 IP 주소를 전송
    • 매니페스트 파일은 요청 영화의 다른 버전에 대한 URL을 가진다.

  5. 클라이언트와 해당 CDN 서버는 독점 버전의 DASH를 이용하여 직접 상호작용
    • 클라이언트는 HTTP GET 요청 메시지의 byte-range 헤더를 이용
      → 각기 다른 버전의 비디오 조각 단위(chunk) 데이터를 요청
      • 넷플릭스는 대략 4초 분량의 chunk를 사용

    • 클라이언트는 chunk 데이터를 다운로드하는 동안,
      수신 처리율을 측정하고 전송률 결정 알고리즘을 사용
      • 전송률 결정 알고리즘을 통해 다음에 요청할 chunk의 품질을 결정

 

 

 

 

이외의 넷플릭스 특징

  • 넷플릭스는 적응적 스트리밍과 CDN을 포함하여 여러 가지 기술을 사용
  • 넷플릭스는 비디오만 배포(웹 페이지 제외)하는 자체 CDN을 사용
    → CDN 디자인을 단순화하고 조정할 수 있다.
    • 특정 클라이언트를 CDN 서버에 연결하기 위해 DNS 리다이렉션을 사용할 필요 X
      • 대신, 넷플릭스 소프트웨어가 클라이언트에게 특정 CDN 서버 사용을 알려줌

  • 넷플릭스 CDN은 풀 캐싱(pull-caching) 보다 푸시 캐싱(push-caching)을 사용


  • 콘텐츠는 캐시 미스(cache miss) 중에 동적으로 사용되는 것이 아닌,
    사용량이 적은 시간 중 예약된 시간에 서버에 푸시

 

 

 

 

유튜브

 

넷플릭스와의 유사점

  • 비디오의 분배에 CDN을 적극적으로 활용
  • 구글은 자체 비공개 CDN을 사용하여 유튜브 동영상을 배포
  • 자체적으로 수백 가지의 IXP 및 ISP 위치에 서버 클러스터를 설치
    → 이러한 위치에서 거대 데이터 센터로 직접 동영상을 배포

  • 사용자를 특정 서버 클러스터와 연결하는데 DNS를 사용

 

 

 

 

구글의 클러스터 선택 정책

  • 클라이언트와 클러스터 간의 RTT(왕복 시간)이 가장 적은 곳을 연결
  • 가끔씩, 클라이언트가 DNS를 통해 좀 더 멀리 있는 클러스터에 연결되기도 함
    ← 클러스터들 간의 균형 있는 작업 부하를 위해

 

 

 

 

유튜브의 HTTP 스트리밍 채용

  • 유튜브는 보유한 비디오에 대해 각기 다른 비트율과 품질을 갖는 여러 버전을 생성하여 제공
  • 유튜브는 DASH 같은 적응적 스트리밍 대신에 사용자가 스스로 버전을 선택하게 함
  • HTTP byte-range 헤더를 이용해 목표한 분량의 선인출 데이터 이후에
    추가로 전송되는 데이터 흐름을 제한

 

 

 

 

사용자로부터 서버로의 비디오 업로드

  • 서버 → 클라이언트로의 비디오 전송뿐만 아니라,
    클라이언트 → 서버로의 비디오 업로드에도 HTTP 스트리밍 사용


  • 유튜브는 업로드된 각각의 비디오를 자신들의 형식으로 변환하고 여러 개 버전 생성
    • 이러한 과정은 구글 데이터 센터 내에서 이루어짐