[지식창고]/네트워크

[ 컴퓨터 네트워크 ] 2.7 vedio streaming and content distribution networks

개발새발주발 2023. 4. 2. 12:47
728x90

이번 장에서는 비디오 스트리밍과 CDN (Content Distribution Networks)에 대해 알아본다 ! 

유튜브, 넷플릭스 등 우리가 자주 사용하는 플랫폼에서 어떻게 수많은 영상들을 수많은 사용자에게 제공하는지에 대해 알아보자 ~ ! 


1. Video Streaming and CDNs - context 

우선 기술적으로 배우기에 앞서 비디오 스트리밍과 CDN의 배경, 문맥에 대해 알아보자! 

 

  • 비디오 트래픽 : 인터넷 대역폭의 주 사용자인 video traffic 
    → 넷플릭스, 유튜브는 각각 ISP트래픽의 37%, 16%를 사용한다 ! 
    하지만 문제점이 있는데 .. 
  • 문제점1.  ~1Billion에 달하는 수많은 사용자들에게 도달하는 방법
    • 하나의 대형 비디오 서버는 이러한 트래픽을 감당할 수 없음
  • 문제점 2 . heterogeneity - 사용자의 다양성 
    •  서로 다른 사용자는 서로 다른 capabilities을 가짐 (  사용자의 대역폭이 모두 다름 ! ) 
  • 해결방법 : 분산형 응용 프로그램 수준의 인프라가 필요함 

 

2. Multimedia : Video

비디오에 관한 개념들 

  • 비디오 : 일정한 속도로 표시되는 이미지의 연속 (ex. 1초당 24개의 이미지) 
  • 디지털 이미지 : 픽셀의 배열 ! 
    각 픽셀은 bits로 나타낸다 
  • 코딩(coding) : 이미지 내부 및 이미지 간 중복을 활용하여 이미지 인코딩에 사용되는 비트 수를 줄이는 것 
    • 공간(within image)
    • 시간 (from one image to next) 

  • CBR (Constant Bit Rate) : 고정된 비디오 인코딩 속도 
  • VBR (Variable Bit Rate) : 공간 및 시간 코딩의 양에 따라 비디오 인코딩 속도가 변화
  • 예시 : 
    • MPEG 1 (CD-ROM) 1.5Mbps
    • MPEG2 (DVD) 3-6 Mbps
    • MPEG4 (인터넷에서 주로 사용 <1Mbps) 

 

 

3. Streaming stored video 

유튜브, 넷플릭스를 보면 '비디오 스트리밍'에 관한 이해가 바로 될 것이다.이러한 비디오 스트리밍 서비스는 저장된 비디오를 스트리밍하여 사용자가 인터넷에 연결된 장치에서 즉시 재생할 수 있도록 한다. 

즉 ,stored video는 인터넷을 통해 비디오 파일을 다운로드 하지 않고 실시간으로 재생할 수 있도록 하는 기술이다 ~~ ! 



이 글을 보는 우리는 (대부분) 전산학도(우리학교 송 교수님의 말을 빌려보았다)기 때문에 아 스트리밍이 이거구나 ~~ 라고 이해하고 넘어갈 것이 아니라 어떻게 네트워크에서 스트리밍을 할 수 있는가와 그에 관한 프로토콜을 알아보아야한다.. 그렇기에 DASH에 대해 알아보자 ! 

 

Streaming multimedia : DASH 

Dynamic, Adaptive Streaming over HTTP , 동적 적응형 스트리밍

네트워크 대역폭에 따라 자동으로 비디오 품질을 조정하여 사용자에게 최적의 스트리밍 경험을 제공할 수 있게 하는 HTTP기반 스트리밍 프로토콜이다. 

유튜브, 넷플릭스를 사용하다보면 네트워크가 좋지 않을 때 영상이 바로 끊기기 보다 1080 → 720 이런 식으로 화질이 낮아지는 경험이 있었을 것이다 ! 이러한 내용을 생각해보면 쉽다 ~~ 

서버와 클라이언트의 역할

 → 서버는 동영상 파일을 청크단위로 나누고 각각을 다른 속도로 인코딩하여 저장하고, 클라이언트는 서버와의 대역폭을 측정하고 매니페스트를 통해 동영상 파일의 각 청크를 요청하면서 현재 대역폭에 따라 최적의 코딩 속도를 선택한다 ! 

 

- server : 

  • 비디오 파일을 여러개의 청크로 나눈다
  • 각각의 청크는 다른 속도로 인코딩되고 저장된다. 
  • manifest file: 서로 다른 청크들의 URL제공 

 

- client : 

  • 일정 주기로 서버에서 클라이언트로의 대역폭을 측정한다. 
  • manifest를 확인하여 한 time 마다 한 청크씩 요청한다. 
    • 현재 대역폭에 따라 지속가능한 최대 코딩 속도를 선택한다. 
    • 다양한 시간에 다른 코딩 속도를 선택할 수 있다. (해당 시점에서 사용 가능한 대역폭에 따라 ! ) 
  • 'Intelligence at client' :클라이언트가 결정(determine)한다 
    • 1. when : 언제 청크를 요청할 것인가
      클라이언트는 현재 버퍼 상태를 계속 모니터링하여, 버퍼가 공백(Starvation)에 빠지거나 오버플로(Overflow) 상태가 되지 않도록 청크를 요청할 시기를 결정한다. 
    • 2. what encoding rate : 어떤 인코딩 속도로 요청할 것인가
      클라이언트는 현재 대역폭을 특정하여, 가능한 최대 인코딩 속도로 청크를 요청한다. 대역폭이 증가하면 더 높은 인코딩 속도로 청크를 요청하여 더 높은 화질의 비디오를 볼 수 있다. 
    • 3. where : 어디서 청크를 요청할 것인가
      클라이언트는 서버와의 거리나 대역폭 등을 고려하여, 클라이언트와 가까운 서버 또는 대역폭이 높은 서버에서 청크를 요청한다, 이를 통해 클라이언트는 최적의 성능으로 동영상을 스트리밍할 수 있다. 

 

- Progressive Download 

- Adaptive HTTP Streaming 

 

 

4. CDN : Content Distribution networks 

콘텐츠 전송 네트워크 , 동영상 파일을 더 빠르고 안정적으로 전송하기 위한 기술 

😱 비디오를 보낼 때 우리는 문제점에 직면한다. 

: 수백만개의 비디오 중에서 선택된 콘텐츠를 동시에 수십만명의 사용자에게 스트리밍하는 문제점 🥺

 

✅ Option I : 하나의 대형 메가 서버 

 

하지만 이러한 방식에도 여러 문제점이 존재하는데 .. 

 1. 단일 장애 지점 

: 한 서버가 다운되면 모든 사용자들이 서비스를 이용할 수 없음 .. ! 

 2. 네트워크 병목 현상

: 모든 사용자들이 대형 서버로부터 비디오를 받아야하기 때문

 3. 먼 거리에 있는 클라이언트

: 서버와의 연결 경로가 길어져 지연시간이 높아질 가능성이 높다 ! 

 4. 서버에서 나가는 링크의 대역폭이 쉽게 과부화될 수 있음 

: 모든 사용자들이 비디오의 복사본을 받아야하기 때문에 ~ ! 

 

이러한 문제점들이 존재하기 때문에 하나의 대형 메가 서버를 해결책으로 삼기에는 좀 에바인 것 같다. 

 

 

✅ Option II : 콘텐츠를 여러 지리적 위치에 저장하고 서비스하는 방법 (CDN) 

 

1. enter dpeep : CDN서버를 다양한 엑세스 네트워크에 분산 배치하는 것

  • 사용자들과 가까이 위치
  • ex. Akamai : 1700개 이상의 위치에서 서비스를 제공 

2. bring home : 적은 수의(10개 정도)의 대형 클러스터를 엑세스 네트워크 근처의 POPs에 배치하는 것 → Limelight와 같은 기업에서 사용 

** 액세스 네트워크 : ISP나 통신사와 같은 서비스 제공자가 일반 사용자들에게 제공하는 인터넷 연결 수단 (ex. 가정이나 사무실에서 사용하는 인터넷 연결 = 브로드밴드 인터넷 서비스를 말함) 

** 클러스터 : 여러 대의 컴퓨터나 서버를 묶어서 하나의 시스템처럼 동작하게 만든 것

** POPs : 인터넷 서비스 제공자나 CDN이 사용자에게 제공하기 위해 사용하는 지리적으로 분산된 위치 (POP3와 헷갈리지말것 ! ) 

 

이제 ~ CDN을 사용하는 이유를 알게 되었다  동영상 스트리밍을 할 때 문제점이 생기는데 그 문제점을 하나의 단일 서버로 하는 것이 힘드니까 CDN을 사용하는 것 ! 그럼 이제 본격적으로 CDN에 대해 알아보러 가자 ~ 

 

CDN이란 

CDN은 앞서 살~짝 말한 것처럼 콘텐츠를 여러 지리적 위치에 분산하여 저장하는 시스템이다. 

 

- CDN : 콘텐츠의 복사본을 CDN nodes에 저장하는 것 

   ex. 넷플릭스는 복사본을 MadMen에 저장한다. 

- 구독자는 콘텐츠를 CDN에게 요청한다. 

    → directed to nearby copy, retrieves content : CDN에서 콘텐츠를 요청하는 해당 콘텐츠의 복사본이 저장되어 있는 가장 가까운 CDN노드로 리디렉션된 다음, 해당 복사본을 검색하고 다운로드하는 과정 !

     → 만약 네트워크 경로가 혼잡하다면, 다른 복사본을 선택함 

넷플릭스에서 MADMEN 예시를 자세히 보자

넷플릭스가 MADMEN이라는 콘텐츠의 다수의 복사본을 여러 지리적 위치의 CDN 노드에 저장할 수 있다. 사용자가 MADMEN을 시청하려면 CDN에 요청하고, 해당 콘텐츠가 저장되어 있는 가장 가까운 노드로 리디렉션된다. 네트워크 경로에 혼잡이 발생할 경우, 사용자는 다른 CDN노드에서 해당 콘텐츠를 검색할 수도 있다. 이렇게 함으로써 CDN은 더 나은 엑세스 속도와 더 적은 네트워크 혼잡을 제공한다 ~~ 

 

 

 

⚠️ 하지만 이런 CDN에서도 문제점이 발생하는데 .. 

바로 OTT(over the top)문제이다. 

OTT 문제 : 혼잡한 인터넷 환경에서의 콘텐츠 문제 

  • 어떤 CDN노드에서 콘텐츠를 검색해야할까 ? 
    OTT서비스는 가까운 CDN노드에서 콘텐츠를 검색함으로써 더 나은 시청 경험을 제공할 수 있다. 따라서 CDN노드의 위치 및 네트워크 상태에 대한 실시간 정보를 수집하고 분석하여 사용자가 현재 위치안 지역에 가장 가까운 CDN노드에서 콘텐츠를 검색할 수 있도록 해야한다.
  • 혼잡한 인터넷에서의 사용자의 행동 ? 
    OTT 서비스를 이용하는 사용자가 인터넷 네트워크의 혼잡과 같은 문제를 겪으면 시청 경험이 저하될 수 있다 = 소비량이 준다! 이를 방지하기 위해 사용자가 네트워크 혼잡 문제를 감지할 수 있도록 하는 기능을 제공해야함. 또한 이러한 상황에서 사용자에게 적극적으로 대처할 수 있는 다양한 옵션을 제공하여 사용자가 적절한 조치를 취할 수 있도록 해야한다. 
  • 어떤 콘텐츠를 어떤 CDN노드에 배치해야할까? 
    OTT 서비스에서는 다양한 콘텐츠를 제공하는 경우가 많음 그렇기에 어떤 콘텐츠를 어떤 CDN노드에 배치할지 결정하는 것이 중요하다! CDN 노드에 배치되는 콘텐츠의 특성, 노드의 지역 및 성능, 그리고 콘텐프의 인기도 등을 고려하여 최적의 배치를 결정해야한다. 

 

CDN content access : a closer look 

자세히 보자 ~ 오늘은 Alice대신 Bob이 등장했다 ! 

Bob(클라이언트)가 비디오 http://netcinema.com/6Y7B23V를 요청했다 (들어가봤자 아무것도 안나온다)

 - 비디오는 http://KingCDN.com/NetC6y&B23V CDN에 저장되어 있다.  

1-6번까지 따라가다보면 이해가 잘 될 것이다 ~ ! 

 

Case Study (사례 분석) : Netflix 


[요약 및 정리]

항상 주변에서 접하지만 ~ 그 원리는 잘 몰랐던 비디오 스트리밍 서비스에 대해 네트워크의 관점에서 찬찬히뜯어 살펴 보았다 ! 

 

 

비디오는 인코딩, 디코딩 과정을 통해 서버에 업로드 & 다운로드 하고 스트리밍 서비스에서는 DASH방식을 사용하여 서버가 비디오 파일을 여러개의 청크로 나누어 저장한 것을 클라이언트가 네트워크 상태(대역폭)에 맞게 time마다 한 청크를 가지고 온다 ! 

그리고 수많은 유저에게 수많은 영상을 스트리밍하기 위해 콘텐츠를 여러 지리적 위치에 분상하여 저장하는 기술인 CDN을 이용한다. 

그리고 Bob의 시나리오까지 보았다 ~ 


[출처 및 참고]

 

한국항공대학교 「컴퓨터 네트워크」 강의 자료 

정기훈, 「원리로 이해하는 네트워크 입문」 정보문화사 ,2003 

https://ko.wikipedia.org/wiki/%EB%A9%80%ED%8B%B0%EB%AF%B8%EB%94%94%EC%96%B4