Share
Sign In

유튜브

규모 추청
Given
DAU = 5,000,000명
사용자당 일일 시청 비디오 수 : 5개
10%의 사용자가 일일 비디오 1개 업로드
비디오 평균 크기 = 300MB
CDN 비용 : 1GB당 $0.02
Derived
매일 필요한 추가 용량 = 5,000,000명 x 10% x 300MB = 150TB
일일 CDN 요금 = 5,000,000명 x 5개 x 0.3GB x $0.02 = $150,000
개략적인 설계안
컴포넌트
💡
트랜스코딩을 TC라고 줄인다.
메타데이터 DB/캐시
원본 저장소 : 원본 비디오를 저장하는 BLOB 저장소
TC 서버 : 비디오의 포맷을 바꾸는 인코딩 작업을 한다.
TC 저장소 : TC가 완료된 비디오를 저장하는 BLOB 저장소
TC 완료 큐 : TC 완료 이벤트를 보관하는 큐
TC 완료 핸들러 : 완료 큐에서 이벤트를 꺼내 메타데이터 DB/캐시를 갱신한다.
CDN 서버 : 비디오가 저장되는 곳
API 서버 : 비디오 스트리밍을 제외한 모든 요청을 처리
프로세스 - 비디오 업로드와 메타데이터 갱신
1.
비디오를 원본 저장소에 업로드
2.
TC 서버는 원본 저장소에서 비디오를 가져와 TC
3a.1. 완료된 비디오를 TC 저장소에 업로드
3a.2. TC된 비디오를 CDN에 업로드
3b.1. TC 완료 이벤트를 큐에 넣는다.
3b.2. 완료 핸들러가 이벤트를 가져다 메타데이터 DB/캐시를 갱신한다.
1.
API 서버가 단말에게 비디오 스트리밍 준비가 완료되었음을 알린다.
스트리밍 프로토콜
MPEG-DASH : Moving Picture Experts Group - Dynamic Adaptive Streaming over HTTP
Apple HLS : HTTP Live Streaming
Microsoft Smooth Streaming
HDS : Adobe HTTP Dynamic Streaming
상세 설계
비디오 트랜스코딩
이유
여러 화질의 비디오를 지원해야 한다. (480p, 1080p60, …)
대부분의 스트리밍 프로토콜과 비디오 포맷을 지원해야 한다.
포맷
컨테이너 : .avi, .mov 같은 인코딩 방식
코덱 : 압축 및 압축 해제 알고리즘. H.264, VP9, HEVC 등이 있다.
DAG(Directed Acyclic Graph) 모델
이유
사용자는 각기 다른 비디오 파이프라인 요구사항이 있다. (워터마크, 화질, 자막 등)
비디오 트랜스코딩에는 오랜 시간이 걸린다.
해결
각 작업을 DAG 모델로 만들어 그래프로 정의한다.
이렇게 하면 병렬로 실행될 수 있는 부분을 최대로 활용해 속도를 높일 수 있다.
비디오 트랜스코딩 아키텍쳐
전처리기
비디오 분할 : 비디오 스트림을 몇 초 단위의 GOP(Group of Pictures) 단위로 나눈다.
DAG 생성
데이터 캐시 : GOP와 메타데이터를 임시 저장소에 저장해서 인코딩이 실패할 경우 다시 재개할 수 있도록 한다.
DAG 스케줄러 : 앞서 사용자가 정의한 파이프라인을 따라 인코딩한다.
자원 관리자
작업 큐 : 실행할 작업을 보관하는 우선순위 큐
작업 서버 큐 : 가용할 수 있는 서버가 담긴 큐
실행 큐 : 현재 실행 중인 작업 및 서버 정보가 담긴 큐
작업 스케줄러 : 적절한 작업과 서버를 고르고 작업을 지시하는 역할
작업 서버 : DAG에 정의된 작업을 작업 스케줄러의 지시를 받아 수행한다. 역할 별로 서버 풀을 구분할 수 있다.
임시 저장소
메타데이터 : 빈번히 참조하기 때문에 메모리 저장소가 좋다.
비디오/오디오 : BLOB 저장소
인코딩된 비디오 : 최종 결과물
시스템 최적화
속도 - 비디오 병렬 업로드 : 비디오를 GOP 단위로 업로드한다. 패킷 같은 느낌?
속도 - 가까운 데이터센터에 업로드 : CDN을 업로드 센터로 활용
속도 - 작업 병렬화 : 메시지 큐를 사용하여 단계별 결합도를 줄이고 병렬성을 높인다.
안전성 - 미리 사인된 업로드 URL : 일정 기간만 유지되는 URL을 발급하여 해당 URL로만 동영상을 업로드할 수 있도록 한다.
안전성 - 비디오 보호
디지털 저작권 권리(DRM) : 허용되지 않은 접근 및 불법 복제를 제한하는 프로그램
AES 암호화
워터마크
비용 : 지역별 인기 비디오만 해당 지역 CDN에 저장한다. 또는 CDN을 직접 구축하고 ISP와 제휴한다.
오류 처리
회복 가능한 오류 : 트랜스코딩 실패 같은 문제는 몇 번 재시도하면 된다.
회복 불가능한 오류 : 포맷 문제 등은 회복 불가능하기 때문에 적절한 오류 코드를 반환해야 한다.
추가 논의
API 계층의 규모 확장성 확보 방안 : stateless이기 때문에 수평 확장 가능
DB 계층의 규모 확장성 확보 방안 : DB 다중화 및 샤딩
라이브 스트리밍 : 응답 지연시간이 낮아야 하며 작은 데이터를 빠르게 처리해야 한다.
비디오 삭제
https://medium.com/@narengowda/netflix-system-design-dbec30fede8d
출처
How To Build Recommendation Algorithms And System Designs - https://www.theinsaneapp.com/2021/03/system-design-and-recommendation-algorithms.html