14장. 유튜브 설계
- 아래는 유튜브 설계에 대한 내용입니다.
유튜브의 2020년 통계자료는 다음과 같습니다.
- 월간 능동 사용자 수: 2십 억
- 매일 재생되는 비디오 수: 5십 억
- 미국 성인 가운데 73%가 유튜브 이용
- 5천만 명의 창작자
- 유튜브의 광고 수입은 증가 중
- 모바일 인터넷 트래픽 가운데 37%를 유튜브가 점유
- 80개의 언어로 이용 가능
#
1단계 문제 이해 및 설계 범위 확정- 다음의 설계에 초점을 맞춥니다.
- 빠른 비디오 업로드
- 원활한 비디오 재생
- 재생 품질 선택 기능
- 낮은 인프라 비용
- 높은 가용성과 규모 확장성, 그리고 안정성
- 지원 클라이언트: 모바일 앱, 웹브라우저, 그리고 스마트 TV
#
개략적 규모 추정- 일간 능동 사용자(DAU, Daily Activie User) 수는 5백만
- 한 사용자는 하루에 평균 5개의 비디오를 시청
- 10% 사용자가 하루에 1비디오 업로드
- 비디오 평균 크기는 300MB
- 비디오 저장을 위해 매일 새로 요구되는 저장용량 : 5백만 10% 300MB = 150TB
- CDN 비용(아마존 사용시) : 5백만 X 5비디오 0.3GB 0.2 = $150,000
#
2단계 개략적 설계안 제시 및 동의 구하기- 시스템 설계 면접은 모든 것을 밑바닥부터 만드는 것과는 관계가 없습니다. 주어진 시간 안에 적절한 기술을 골라 설계를 마치는 것이 그 기굴 각각이 어떻게 동작하는지 상세히 설명하는 것보다 중요합니다.
- 시스템은 세 개의 컴포넌트로 구성됩니다.
- 단말(client) : 컴퓨터, 모바일 폰, 스마트 TV를 통해 유튜브 시청 가능
- CDN: 비디오는 CDN에 저장합니다.
- API 서버: 비디오 스트리밍을 제외한 모든 요청은 API 서버가 처리합니다.
#
비디오 업로드 절차- 트랜스코딩 서버: 비디오 트랜스코딩은 비디오 인코딩이라 부르는 절차입니다.
- 트랜스코딩 비디오 저장소: 트랜스코딩이 완료된 비디오를 저장하는 BLOB 저장소입니다.
- CDN: 비디오를 캐싱하는 역할을 담당합니다.
- 트랜스코딩 완료 큐: 비디오 트랜스코딩 완료 이벤트를 보관할 메시지 큐
- 트랜스코딩 완료 핸들러: 트랜스코딩 완료 큐에서 이벤트 데이터를 꺼내어 메타데이터 캐시와 데이터베이스를 갱신할 작업 서버들입니다.
#
비디오 스트리밍 절차- 비디오는 CDN에서 바로 스트리밍됩니다.
#
3단계 상세 설계#
비디오 트랜스코딩- 비디오를 녹화하면 단말은 해당 비디오를 특정 포맷으로 저장합니다.
- 비디오가 다른 단말에서도 순조롭게 재생되려면 다른 단말과 호환되는 비트레이트와 포맷으로 저장되어야 합니다.
- 비디오 트랜스코딩은 다음과 같은 이유로 중요합니다.
- 가공되지 않은 원본 비디오는 저장 공간을 많이 차지합니다.
- 상당수의 단말과 브라우저는 특정 종류의 비디오 포맷만 지원합니다.
- 사용자에게 끊김 없는 고화질 비디오 재생을 보장하려면, 네트워크 대역폭에 따라 영상의 퀄리티를 보내는 것이 바람직합니다.
- 모바일 단말의 경우 네트워크가 수시로 달라질 수 있습니다.
- 인코딩 포맷은 대부분 다음과 같습니다.
- 컨테이너 : 메타 데이터를 담는 바구니, 확장자를 보면 알 수 있습니다.
- 코덱: 비디오 화질은 보존하며 파일 크기를 죽일 목적으로 고안된 압축 및 압축 해제 알고리즘입니다.
#
유향 비순환 그래프 모델- 각기 다른 유형의 비디오 프로세싱 파이프라인을 지원하는 한편의 처리 과정의 병렬성을 높이기 위해서는 적절한 수준의 추상화가 필요합니다.
#
비디오 트랜스코딩 아키텍처- 전처리기
- 비디오 분할
- DAG 생성
- 데이터 캐시
- DAG 스케줄러
- 자원 관리자
- 세 개의 큐(작업 큐, 작업 서버 큐, 실행 큐)와 작업 스케줄러로 구성됩니다.
- 작업 관리자는 작업 큐에서 가장 높은 우선순위의 작업을 꺼내고 작업 실행을 지시합니다.
- 작업 서버
- 임시 저장소
- 어떤 시스템을 선택할 것이냐는 저장할 데이터의 유형, 크기, 이용 빈도, 데이터 유효기간 등에 따라 달라집니다.
- 인코딩된 비디오
#
시스템 최적화- 속도 최적화: 비디오 병렬 업로드
- 속도 최적화: 업로드 센터를 사용자 근거리에 지정
- 속도 최적화: 모든 절차를 병렬화
- 안전성 최적화: 미리 사인된 업로드 URL
- 안전성 최적화: 비디오 보호
- 비용 최적화
#
오류 처리- 시스템 오류는 두 가지 종류가 있습니다.
- 회복 가능 오류
- 회복 불가능 오류
#
4단계 마무리아래의 내용을 논의하는 것도 좋습니다.
- API 계층의 규모 확장성 확보 방안 : API 서버는 무상태 서버이므로 수평적 규모 확장이 가능합니다.
- 데이터베이스 계층의 규모 확장성 확보 방안 : 데이터베이스의 다중화와 샤딩 방법에 대해 이야기합니다.
- 라이브 스트리밍 : 라이브 스트리밍은 비디오를 실시간으로 녹화하고 방송하는 절차를 의미합니다.
- 비디오 삭제: 저작권을 위반한 비디오, 선정적 비디오, 불법적 행위에 관계된 비디오는 내려야 합니다.