스트리밍 저장 비디오 - 넷플릭스
- 넷플릭스 비디오 배포에는 2가지 주요 구성요소
- 아마존 클라우드
- 자체 CDN 인프라가 있음
아마존 클라우드
- 웹사이트는 아마존 클라우드에서 모든 것이 실행된다.
- 넷플릭스에서의 웹사이트
- 사용자 등록 및 로그인, 결제, 영화 장르 검색, 영화 추천 서비스 등 다양한 기능 처리
- 사용자 등록 및 로그인, 결제, 영화 장르 검색, 영화 추천 서비스 등 다양한 기능 처리
- 넷플릭스에서의 웹사이트
아마존 클라우드의 주요한 기능
콘텐츠 수집(contetent ingestion)
- 넷플릭스는 고객들에게 비디오 분배 전, 먼저 영화를 수집하고 처리해야 한다.
- 영화의 스튜디오 마스터 버전을 받아서 클라우드 시스템의 호스트에 업로드함
콘텐츠 처리(content processing)
- 아마존 클라우드 시스템의 기기에서는 각 영화의 여러 가지 형식의 비디오를 생성
← 고객들의 다양한 플레이어 기기 사양에 적합하기 위해 - 각 형식별로 다양한 비트율의 여러 가지 버전을 생성
← DASH를 이용한 HTTP 적응적 스트리밍 서비스를 위해
- 아마존 클라우드 시스템의 기기에서는 각 영화의 여러 가지 형식의 비디오를 생성
CDN으로의 버전 업로드
- 영화의 다양한 버전이 생성되면 이러한 버전을 CDN으로 업로드
자체 CDN 인프라 구축
- 자사의 모든 비디오를 스트리밍 할 수 있는 자체 프라이빗 클라우드를 구축
- 처음 넷플릭스의 경우(2007년), 3개의 CDN 회사가 비디오 콘텐츠를 배포
- 처음 넷플릭스의 경우(2007년), 3개의 CDN 회사가 비디오 콘텐츠를 배포
- 자체 CDN 구축을 위해 넷플릭스는 IXP 및 거주용 ISP 자체에서 서버 랙 설치
- 현재 IXP 위치에 200대 이상의 서버 랙과 서버 랙 수용을 위해 ISP 장소도 보유
- 넷플릭스는 잠재적인 ISP 파트너에게 무료 랙 설치 지침을 제공
- IXP 설치에는 수십 개의 서버와 DASH를 지원하는 여러 버전의 비디오 포함
랙
- 각각의 랙 서버에는 10 Gbps 이더넷 포트와 100TB 이상의 스토리지가 존재
- 랙에 있는 서버의 수는 다양함
넷플릭스가 서버를 채우는 방식
- 넷플릭스는
풀 캐싱(pull-caching)
을 사용하여 IXP 및 ISP의 CDN 서버를 채운다. - 대신 사용량이 적은 시간에 비디오를 CDN 서버에 푸시하여 배포
- 전체 라이브러리를 보유할 수 없는 위치의 경우
→ 가장 많이 결정되는 비디오만 푸시
영화 전송에 관련된 서버와 클라이언트 간의 동작
- 사용자가 재생할 영화를 선택
- 넷플릭스 소프트웨어가 해당 영화 사본을 갖고 있는 CDN 서버를 결정
- 넷플릭스 소프트웨어는 아마존 클라우드에서 실행 중임
- 넷플릭스 소프트웨어는 아마존 클라우드에서 실행 중임
- 영화가 있는 서버 중, 소프트웨어는 클라이언트 요청에 최적의 서버를 결정
- 서버 선택 방식
- 랙 서버를 선택할 때의 조건 → 일반적인 선택
- 클라이언트가 해당 ISP에 설치된 CDN 서버 랙에 있는 로컬 ISP를 사용
- 해당 랙에 요청된 사본이 있는 경우
- 그렇지 않은 경우, 근처에 있는 IXP 서버가 선택됨
- 랙 서버를 선택할 때의 조건 → 일반적인 선택
- 서버 선택 방식
- CDN 서버 결정 후, 클라이언트는 요청된 영화의 매니페스트 파일과 특정 서버의 IP 주소를 전송
- 매니페스트 파일은 요청 영화의 다른 버전에 대한 URL을 가진다.
- 매니페스트 파일은 요청 영화의 다른 버전에 대한 URL을 가진다.
- 클라이언트와 해당 CDN 서버는 독점 버전의 DASH를 이용하여 직접 상호작용
- 클라이언트는 HTTP GET 요청 메시지의 byte-range 헤더를 이용
→ 각기 다른 버전의 비디오 조각 단위(chunk) 데이터를 요청
- 넷플릭스는 대략 4초 분량의 chunk를 사용
- 넷플릭스는 대략 4초 분량의 chunk를 사용
- 클라이언트는 chunk 데이터를 다운로드하는 동안,
수신 처리율을 측정하고 전송률 결정 알고리즘을 사용- 전송률 결정 알고리즘을 통해 다음에 요청할 chunk의 품질을 결정
- 클라이언트는 HTTP GET 요청 메시지의 byte-range 헤더를 이용
이외의 넷플릭스 특징
- 넷플릭스는 적응적 스트리밍과 CDN을 포함하여 여러 가지 기술을 사용
- 넷플릭스는 비디오만 배포(웹 페이지 제외)하는 자체 CDN을 사용
→ CDN 디자인을 단순화하고 조정할 수 있다.- 특정 클라이언트를 CDN 서버에 연결하기 위해 DNS 리다이렉션을 사용할 필요 X
- 대신, 넷플릭스 소프트웨어가 클라이언트에게 특정 CDN 서버 사용을 알려줌
- 대신, 넷플릭스 소프트웨어가 클라이언트에게 특정 CDN 서버 사용을 알려줌
- 특정 클라이언트를 CDN 서버에 연결하기 위해 DNS 리다이렉션을 사용할 필요 X
- 넷플릭스 CDN은 풀 캐싱(pull-caching) 보다 푸시 캐싱(push-caching)을 사용
- 콘텐츠는 캐시 미스(cache miss) 중에 동적으로 사용되는 것이 아닌,
사용량이 적은 시간 중 예약된 시간에 서버에 푸시
유튜브
넷플릭스와의 유사점
- 비디오의 분배에 CDN을 적극적으로 활용
- 구글은 자체 비공개 CDN을 사용하여 유튜브 동영상을 배포
- 자체적으로 수백 가지의 IXP 및 ISP 위치에 서버 클러스터를 설치
→ 이러한 위치에서 거대 데이터 센터로 직접 동영상을 배포 - 사용자를 특정 서버 클러스터와 연결하는데 DNS를 사용
구글의 클러스터 선택 정책
- 클라이언트와 클러스터 간의 RTT(왕복 시간)이 가장 적은 곳을 연결
- 가끔씩, 클라이언트가 DNS를 통해 좀 더 멀리 있는 클러스터에 연결되기도 함
← 클러스터들 간의 균형 있는 작업 부하를 위해
유튜브의 HTTP 스트리밍 채용
- 유튜브는 보유한 비디오에 대해 각기 다른 비트율과 품질을 갖는 여러 버전을 생성하여 제공
- 유튜브는 DASH 같은 적응적 스트리밍 대신에 사용자가 스스로 버전을 선택하게 함
- HTTP byte-range 헤더를 이용해 목표한 분량의 선인출 데이터 이후에
추가로 전송되는 데이터 흐름을 제한
사용자로부터 서버로의 비디오 업로드
- 서버 → 클라이언트로의 비디오 전송뿐만 아니라,
클라이언트 → 서버로의 비디오 업로드에도 HTTP 스트리밍 사용 - 유튜브는 업로드된 각각의 비디오를 자신들의 형식으로 변환하고 여러 개 버전 생성
- 이러한 과정은 구글 데이터 센터 내에서 이루어짐