[아키텍처] 비디오 플랫폼 설계

JIN·2022년 7월 8일
0
post-custom-banner

비디오 플랫폼을 설계 해보자

주요 기능 :
1. 빠른 비디오 업로드
2. 원활한 비디오 재생
3. 재생 품질 선택 기능
4. 낮은 인프라 비용
5. 높은 가용성과 규모 확장성, 그리고 안정성
6. 지원 클라이언트: 모바일 앱, 웹 브라우저 , 그리고 스마트 TV

1. 개략적 규모 추정

  • 일간 능동 사용자 : 5백만(5million)
  • 한 사용자는 하루에 평균 5개의 비디오를 시청
  • 10%의 사용자가 하루에 1비디오 업로드
  • 비디오의 평균 크기는 300MB
  • 비디오 저장을 위해 매일 새로 요구되는 저장용량 = 5백만 10% 300 MB = 150TB
  • CDN 비용
    - 클라우드 CDN을 통해 비디오를 서비스할 경우 CDN에서 나가는 데이터의 양에 따라 과금한다.
    - 아마존의 클라우드프론트를 CDN 솔루션으로 사용할 결루 , 100% 트래픽이 미국에서 발생한다고 가정하면 1GB 당 $0.02의 요금이 발생
    - 따라서 매일 발생하는 요금은 5백만 5비디오 0.3GB * $0.02 = $150,000

    너무 비싸! 비용을 줄이는 방법을 생각해봐야 해

2. 개략적 설계안 제시 및 동의 구하기

개략적으로 보면 이 시스템은 다음의 세 개 컴포넌트로 구성된다.

  • 단말 : 컴퓨터, 모바일 폰 , 스마트 TV를 통해서 유튜브를 시청할 수 있다.
  • CDN: 비디오는 CDN에 저장한다. 재생 버튼을 누르면 CDN으로부터 스트리밍이 이루어진다.
  • API 서버: 비디오 스트리밍을 제외한 모든 요청은 API서버가 처리한다.
    피드 추천, 비디오 업로드 URL생성, 메타 데이터 데이터베이스와 캐시 갱신, 사용자 가입 등등이 API서버가 처리하는 작업이다.

다음 두 영역을 설계해보자
1. 비디오 업로드 절차
2. 비디오 스트리밍 절차


비디오 업로드 절차

1. 사용자: 컴퓨터나 모바일 폰, 혹은 스마트 TV를 통해 유튜브를 시청하는 이용자다.
2. 로드밸런서: API 서버 각각으로 고르게 요청을 분산하는 역할을 담당한다.
3. API 서버: 비디오 스트리밍을 제외한 다른 모든 요청을 처리한다.
4. 메타데이터 데이터베이스: 비디오의 메타데이터를 보관한다. 샤딩과 다중화를 적용하여 성능 및 가용성 요구사항을 충족한다.
5. 메타데이터 캐시: 성능을 높이기 위해 비디오 메타데이터와 사용자 객체는 캐시한다. 
6. 원본 저장소: 원본 비디오를 보관할 대형 이진 파일 저장소 시스템이다. BLOB 저장소는 "이진 데이터를 하나의 객체로 보관하는 데이터베이스 관리 시스템"이다.
7. 트랜스코딩 서버: 비디오 트랜스코딩은 비디오 인코딩이라 부르기도 하는 절차로, 비디오의 포맷을 변환하는 절차다. 단말이나 대역폭 요구사항에 맞는 최적의 비디오 스트림을 제공하기 위해 필요하다.
8. 트랜스코딩 비디오 저장소: 트랜스코딩이 완료된 비디오를 저장하는 BLOB 저장소다.
9. CDN: 비디오를 캐시하는 역할을 담당한다. 사용자가 재생 버튼을 누르면 비디오 스트리밍은 CDN을 통해 이루어진다. 
10. 트랜스코딩 완료 큐: 비디오 트랜스코딩 완료 이벤트들을 보관할 메시지 큐이다.
11. 트랜스코딩 완료 핸들러: 트랜스코딩 완료 큐에서 이벤트 데이터를 꺼내어 메타데이터 캐시와 데이터베이스를 갱신할 작업서버이다. 

**프로세스 a. 비디오 업로드**

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


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

비디오 스트리밍 절차

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

  • MPEG-DASH
  • 애플 HLS
  • 마이크로 소프트 스무드 스트리밍
  • 어도비 HTTP 동적 스트리밍

3 마무리

더 논의 하면 좋을 점

  • API 계층의 규모 확장성 확보 방안: API 서버는 무상태 서버이므로 수평적 규모 확장이 가능하다
  • 데이터베이스의 다중화와 샤딩
  • 라이브 스트리밍: 응답 지연 개선
  • 비디오 삭제: 저작권 위반, 선정적 비디오, 불법적 비디오 삭제
profile
배우고 적용하고 개선하기
post-custom-banner

0개의 댓글