네트워크 하향식 접근

[컴퓨터 네트워킹 하향식 접근] 2.6 비디오 스트리밍과 컨텐츠 분배 네트워크

김치진주 2023. 3. 18. 16:12

 

인터넷 비디오

녹화된 비디오는 서버에 저장되어 사용자가 비디오 시청을 서버에게 on-demand로 요청한다.

 

비디오는 이미지의 연속으로, 일반적으로 초당 24개 또는 30개의 이미지로 일정한 속도로 표시된다. 비디오 품질과 비트 전송률은 서로 반비례한다.

사용자에게 연속 재생을 제공하기 위해 네트워크는 압축된 비디오의 전송률 이상의 스트리밍 애플리케이션에 대한 평균 처리량을 제공해야 한다.

또, 압축을 사용하여 동일한 비디오를 여러 버전의 품질로 만들 수 있다. 사용자는 현재 사용 가능한 대역폭을 선택하여 보고 싶은 버전을 결정할 수 있다.

 

 

HTTP 스트리밍 및 DASH

HTTP 스트리밍에서 비디오는 HTTP 서버 내의 특정 URL을 갖는 일반적인 파일로 저장된다.

사용자는 HTTP GET 요청으로 비디오 URL에 대한 요청을 발생시키면, 프로토콜 및 트래픽 조건이 허용되는 대로 HTTP 응답메시지에 비디오 파일을 전송한다.

클라이언트는 받은 데이터를 애플리케이션 버퍼에 저장한다. 버퍼의 바이트 수가 미리 정해진 임계값(Threshold)을 초과하면 재생을 시작한다.

 

HTTP 스트리밍은 문제점을 가지고 있다. 모든 클라이언트들의 대역폭이 다름에도 똑같은 인코딩이 된 비디오를 받는다. 이 문제점을 해결하기 위해 HTTP 기반 스트리밍인 DASH(Dynamic Adaptive Streaming over HTTP)이 개발되었다.

 

DASH는 클라이언트에게 네트워크 품질에 따라 다른 인코딩을 가진 비디오를 전송할 수 있도록 한다.

HTTP 서버는 비트율에 따른 각 버전의 URL을 제공하는데, 이것을 매니패스트(manifest) 파일을 통해 가지고 있다.

클라이언트는 먼저 매니패스트파일을 요청하여 서버가 제공하는 매니패스트 파일 버전 목록을 알게된다.

그 후 측정된 대역폭과 비트율 결정 알고리즘을 통해 다음 전송받을 데이터 조각을 결정한다.

 

콘텐츠 분배 네트워크(CDN)

비디오 자료를 단일 데이터센터에만 두고 직접 전송하게 된다면 문제가 발생한다.

1. 클라이언트가 데이터 센터로부터 너무 멀리 있다면 많은 ISP를 거쳐가게 될 것인데, 링크 중 하나라도 비디오 소비율보다 낮은 전송용량을 갖게 된다면 종단간 처리율이 낮아진다.

2. 인기 있는 비디오는 같은 통신 링크를 통해 여러 번 반복적으로 전송될 것이다. 회선을 제공하는 ISP들에게 중복 비용을 지불하게 된다.

3. 한 번의 장애로 전체 서비스가 중단될 수 있는 위험이 있다.

 

따라서 콘텐츠 분배 네트워크(Contents Distribution Network, CDN)를 이용한다.

CDN은 다수의 지점에 분산된 서버를 운영하며, 컨텐츠 데이터의  복사본을 분산 서버에 저장한다.

CDN은 컨텐츠 제공자의 사설 CDN일수도 있고, 제3자가 운영하는 CDN을 빌려 사용할 수 있다.

 

CDN은 일반적으로 서버의 위치에 대해 다음 두 철학 중 하나를 채용하고 있다.

 

Enter Deep : 많은 수의 작은 서버 클러스터를 세계 곳곳의 접속 네트워크에 구축한다. (ISP 주변에 배치한다)

이 방법은 사용자 경험이 좋아지지만, 고도로 분산된 설계로 인해 서버 클러스터를 유지하는 관리 비용이 커진다.

 

Bring Home : 적은 수의 핵심 지점에 큰 규모의 서버 클러스터를 구축한다.(IXP 주변에 배치한다) 

Enter Deep에 비해 관리 비용이 작아지는 대신, 사용자가 느끼는 지연시간과 처리율은 상대적으로 나빠진다.

 

 

CDN은 클러스터에 대해 push 방식이 아닌 pull방식을 사용한다. 사용자가 클러스터에 없는 비디오를 요청하면 해당 비디오를 다른 클러스터로부터 전송받아 사용자에게 서비스하는 동시에 사본을 만든다. (캐싱)

 

 

CDN은 어떻게 동작하는가?

사용자의 웹 브라우저가 URL을 지정함으로써 특정 비디오의 재생을 요청하면, CDN은 그 요청을 가로채

1. 클라이언트에게 가장 적당한 CDN 클러스터를 선택한다.

2. 클라이언트의 요청을 해당 클러스터의 서버로 연결한다.

대부분의 CDN은 사용자의 요청을 가로채고 다른 곳으로 연결하는 데 DNS를 활용한다.