nowwater 2023. 9. 12. 22:03
728x90

주어진 시간에 적절한 기술을 골라 설계를 마치는 것이, 그 기술 각각이 어떻게 동작하는지 상세히 설명하는 것보다 중요하다. 예를 들어 비디오를 저장하기 위해 BLOB 저장소를 쓸 것이라면 그 사실만 언급해도 충분하다. 다른 빅 테크 기업들도 모든 것을 스스로 구축하지는 않는다.

 

유튜브 시스템을 개략적으로 보면 세 개 컴포넌트로 구성된다.

CDN: 비디오는 CDN 에 저장되고, 재생 버튼을 누르면 CDN으로부터 스트리밍이 이루어진다.

API 서버: 비디오 스트리밍을 제외한 모든 요청은 API 서버가 처리

  • 피드 추천
  • 비디오 업로드 URL 생성
  • 메타데이터 데이터베이스와 캐시 갱신
  • 사용자 가입

개략적 설계

비디오 업로드 절차

메타데이터 캐시: 비디오의 메타데이터와 사용자 객체는 캐시

원본 저장소: 원본 비디오를 보관할 대형 이진 파일 저장소(BLOB)

  • BLOB: 이진 데이터를 하나의 개체로 보관하는 데이터베이스 관리 시스템

트랜스코딩 서버: 비디오 인코딩이라고도 부르며, 비디오의 포맷을 변환하는 과정을 거쳐 단말이나 대역폭 요구사항에 맞는 최적의 비디오 스트림을 제공

트랜스코딩 비디오 저장소: 트랜스코딩이 완료된 비디오를 저장하는 BLOB 저장소

CDN: 비디오를 캐시하는 역할

트랜스코딩 완료 큐: 비디오 트랜스코딩 완료 이벤트들을 보관할 메시지 큐

트랜스코딩 완료 핸들러: 트랜스코딩 완료 큐에서 이벤트 데이터를 꺼내어 메타데이터 캐시와 데이터베이스를 갱신할 작업 서버들

 

비디오 업로드 시 다음의 두 프로세스가 병렬적으로 수행된다.

프로세스 a: 비디오 업로드

  • 1. 비디오를 원본 저장소에 업로드
  • 2. 트랜스코딩 서버는 원본 저장소에서 해당 비디오를 가져와 트랜스코딩 시작
  • 3. 트랜스코딩이 완료되면 아래 두 절차가 병렬 수행
    • 3a. 완료된 비디오를 트랜스코딩 비디오 저장소로 업로드
      • 3a.1트랜스코딩이 끝난 비디오를 CDN 에 올린다.
    • 3b. 트랜스코딩 완료 이벤트를 트랜스코딩 완료 큐에 넣는다.
      • 3b.1완료 핸들러가 이벤트 데이터를 큐에서 꺼낸다.
        • 3b.1.a, 3b.1.b 완료 핸들러가 메타데이터 데이터베이스와 캐시를 갱신한다.
  • 4. API 서버가 단말에게 비디오 업로드가 끝나서 스트리밍 준비가 되었음을 알린다.

 

프로세스 b: 메타데이터 갱신

원본 저장소에 파일이 업로드되는 동안, 단말은 병렬적으로 비디오 메타데이터 갱신 요청을 API 서버에 보낸다.

이 정보로 메타데이터 캐시와 데이터베이스를 업데이트한다.

 

비디오 스트리밍 절차

스트리밍: 원격지의 비디오로부터 지속적으로 비디오 스트림을 전송 받아 영상을 재생하는 것

스트리밍 프로토콜: 비디오 스트리밍을 위해 데이터를 전송할 때 쓰이는 표준화된 통신 방법

  • e.g. MPEG-DASH, Apple HLS, Adobe HDS ...

기억해야 하는 것은 프로토콜마다 지원하는 비디오 인코딩이 다르고 플레이어도 다르다는 사실

따라서 비디오 스트리밍 서비스를 설계할 때는 서비스의 용례에 맞는 프로토콜을 잘 골라야 한다.

 

비디오는 CDN 에서 바로 스트리밍 되고, 사용자의 단말에서 가장 가까운 CDN 에지 서버가 비디오 전송을 담당한다.

따라서 전송 지연을 낮출 수 있다.

 

 

상세 설계

비디오 트랜스코딩

비디오 녹화 시 단말은 해당 비디오를 특정 포맷으로 저장하며, 다른 단말과 호환되는 비트레이트와 포맷으로 저장한다.

  • 비트레이트: 비디오를 구성하는 비트가 얼마나 빨리 처리되어야 하는지 나타내는 단위, 높으면 고화질 비디오
  • 높은 비트레이트의 비디오 스트림 재생 시 높은 성능의 컴퓨팅 파워, 빠른 인터넷 회선 속도가 필요함

 

비디오 트랜스코딩이 중요한 이유

  • 가공되지 않는 원본 비디오는 많은 저장공간 차지
  • 상당수의 단말과 브라우저는 특정 종류의 비디오 포맷만 지원하므로 여러 포맷으로 인코딩 해두는 것이 필요
  • 비디오가 끊김없이 재생되기 위해 비디오 화질을 자동으로 변경하거나 수동 변경이 가능해야 함

 

인코딩 포맷

  • 컨테이너: 비디오 파일, 오디오, 메타데이터를 담는 바구니 역할 (e.g. .avi, .mov, .mp4)
  • 코덱: 비디오 화질은 보존하면서 파일 크기를 줄일 목적으로 고안된 압축/압축 해제 알고리즘

 

유향 비순환 그래프(DAG) 모델

비디오 트랜스코딩은 컴퓨팅 자원, 시간을 많이 필요로 함

각기 다른 유형의 비디오 프로세싱 파이프라인을 지원하는 한편 처리 과정의 병렬성을 높이기 위해서는 적절한 수준의 추상화를 도입하여 클라이언트 프로그래머로 하여금 실행할 작업을 손수 정의할 수 있도록 해야 한다.

이때 DAG 를 통해 작업을 단계별로 배열할 수 있도록 하여 해당 작업들이 순차적/병렬적으로 실행될 수 있도록 할 수 있음

 

원본 비디오는 비디오, 오디오, 메타데이터 로 나뉘어 처리된다.

 

비디오에 처리되는 작업

  • 검사: 좋은 품질의 비디오인지, 손상은 없는지 확인
  • 비디오 인코딩: 비디오를 다양한 해상도, 코덱, 비트레이트 좋바으로 인코딩
  • 섬네일: 업로드한 이미지나 비디오에서 자동 추출된 이미지로 섬네일 생성
  • 워터마크: 식별 정보를 이미지 위에 오버레이 형태로 표시

 

비디오 트랜스코딩 아키텍쳐

전처리기

1. 비디오 분할: 비디오 스트림을 GOP(Group of Pictures) 라 불리는 단위로 쪼갠다.

2. DAG 생성

3. 데이터 캐시

 

DAG 스케줄러

DAG 그래프를 몇 개 단계(stage)로 분할한 다음, 그 각각을 자원 관리자의 작업 큐에 넣는다.

2개 stage 로 쪼갠 사례

첫 번째 단계에서는 비디오, 오디오, 메타데이터 분리

두 번째 단계에서는 비디오 파일을 인코딩하고, 섬네일 추출, 오디오 파일 인코딩을 수행

 

자원 관리자

자원 배분을 효과적으로 수행하는 역할

 

세 개의 큐와 작업 스케쥴러로 구성

  • 작업 큐: 실행할 작업이 보관되어 있는 우선순위 큐
  • 작업 서버 큐: 작업 서버의 가용 상태 정보가 보관되어 있는 우선순위 큐
  • 실행 큐: 현재 실행 중인 작업 및 작업 서버 정보가 보관되어 있는 큐
  • 작업 스케쥴러: 최적의 작업/서버 조합을 골라, 해당 작업 서버가 작업을 수행하도록 지시하는 역할 수행

 

작업 서버

작업 서버는 DAG 에 정의된 작업을 수행하며, 작업 종류에 따라 작업 서버도 구분하여 관리한다.

 

임시 저장소

어떤 시스템을 선택할 것이냐는 저장할 데이터의 유형, 크기, 이용 빈도, 데이터 유효기간 등에 따라 달라진다.

 

 

인코딩된 비디오

인코딩 파이프라인의 최종 결과물

 

 

시스템 최적화

속도 최적화: 비디오 병렬 업로드

비디오 전부를 한 번의 업로드로 올리는 것은 비효율적임. 따라서 하나의 비디오를 작은 GOP 들로 분할하여 병렬적으로 업로드하면, 일부가 실패하더라도 빠르게 업로드를 재개할 수 있다.

비디오를 GOP 경계에 맞춰 분할하는 작업을 단말이 수행하면 업로드 속도를 높일 수 있음

 

속도 최적화: 업로드 센터를 사용자 근거리에 지정

업로드 센터를 여러 곳에 두고, 가까운 곳으로 보내도록 한다.

 

속도 최적화: 모든 절차를 병렬화

느슨하게 결합된 시스템을 반들어서 병렬성을 높이기 -> 메시지 큐 도입

 

안전성 최적화: 미리 사인된 업로드 URL

허가받은 사용자만이 올바른 장소에 비디오를 업로드할 수 있도록 하기 위해 미리 사인된 업로드 URL 사용

 

안전성 최적화: 비디오 보호

  • 디지털 저작권 관리 시스템 도입
  • AES 암호화
  • 워터마크

 

비용 최적화

유튜브의 비디오 스트리밍은 롱테일 분포를 따른다. 즉, 인기있는 비디오는 빈번히 재생되는 반면 나머지는 거의 보는 사람이 없다. 따라서 몇 가지 최적화를 시도해볼 수 있다.

1. 인기 비디오는 CDN 을 통해 재생하되, 다른 비디오는 비디오 서버를 통해 재생

2. 인기가 별로 없는 비디오는 인코딩 자체를 안하고, 짧은 비디오라면 필요할 때 인코딩해 재생

3. 특정 지역에서만 인기가 높은 비디오는 다른 CDN 에 복사할 필요 없음

4. CDN 을 직접 구축하고 인터넷 서비스 제공자와 제휴

 

이 모든 최적화는 콘텐츠 인기도, 이용 패턴, 비디오 크기 등의 데이터에 근거해야 함. 따라서 시청 패턴을 분석하는 것이 중요하다.

 

오류 처리

회복 가능 오류

  • 특정 비디오 세그먼트를 트랜스코딩하다 실패했다든가 하는 오류는 회복 가능한 오류
  • 일반적으로 몇 번 재시도하면 해결됨
  • 계속 실패한다면 클라이언트에게 적절한 오류코드 반환

회복 불가능 오류

  • 비디오 포맷이 잘못되었다거나하는 오류는 회복 불가능 오류
  • 해당 오류가 발견되면 시스템은 비디오에 대한 작업을 중단하고 클라잉너트에게 적절한 오류코드 반환