비디오 플랫폼을 설계 해보자
주요 기능 :
1. 빠른 비디오 업로드
2. 원활한 비디오 재생
3. 재생 품질 선택 기능
4. 낮은 인프라 비용
5. 높은 가용성과 규모 확장성, 그리고 안정성
6. 지원 클라이언트: 모바일 앱, 웹 브라우저 , 그리고 스마트 TV
너무 비싸! 비용을 줄이는 방법을 생각해봐야 해
개략적으로 보면 이 시스템은 다음의 세 개 컴포넌트로 구성된다.
다음 두 영역을 설계해보자
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 동적 스트리밍
더 논의 하면 좋을 점