1단계 문제 이해 및 설계 범위 확정
•
유튜브와 같은 스트리밍 서비스를 설계할 때, 다음의 질문을 해볼 수 있다.
◦
주요 기능은 무엇인가?
◦
어떤 클라이언트를 지원해야 하는가?
◦
DAU, MAU는 몇인가?
◦
사용자의 평균 사용 시간은 어느정도인가?
◦
다국어 지원이 필요한가?
◦
제공하는 미디어의 특성이 있나? 특정 해상도라던가, 비디오 코텍이라던가
◦
암호화가 필요한가?
◦
비디오 파일 크기에 제한이 있나?
◦
클라우드 서비스를 활용해도 되는가?
개략적 규모 측정
•
위 질문들을 토대로 규모를 개략적으로 측정하고 이를 바탕으로 설계에 임하기에 앞서 면접관에게 동의를 구해야 한다.
•
설계에 활용할 데이터는 다음과 같다.
◦
일간 능동 사용자
◦
한 사용자가 하루 평균 몇 개의 비디오를 시청하는지
◦
어느정도 비율의 사용자가 주, 일 평균 몇 개의 비디오를 업로드하는지
◦
비디오의 평균 크기
▪
비디오 저장을 위해 요구되는 저장 용량
◦
CDN 비용
2단계 개략적 설계안 제시 및 동의 구하기
•
개략적으로 봤을 때, 이 시스템은 세 개 컴포넌트로 구성된다.
◦
단말 : 컴퓨터, 모바일 폰, 스마트 TV 등을 이용해 서비스를 이용한다.
◦
CDN : 비디오는 CDN에 저장한다. 재생 버튼을 누르면 CDN으로부터 스트리밍이 이루어진다.
◦
API 서버 : 비디오 스트리밍을 제외한 모든 요청은 API 서버가 처리한다.
▪
피드 추천, 비디오 업로드 URL 생성, 메타데이터 데이터베이스와 캐시 갱신, 사용자 가입 등등이 처리된다.
•
면접관이 다음 두 주요 기능에 대해서 설계를 요청했다고 가정하자.
비디오 업로드 절차
•
이 설계안은 다음의 컴포넌트들로 구성되어 있다.
◦
사용자 : 컴퓨터나 모바일 폰, 혹은 스마트 TV를 통해 유튜브를 시청하는 이용자다.
◦
로드밸런서 : API 서버 각각으로 고르게 요청을 분산하는 역할을 담당한다.
◦
메타데이터 데이터베이스 : 비디오의 메타데이터를 보관한다. 샤딩, 다중화를 적용하여 성능 및 가용성 요구사항을 충족한다.
◦
메타데이터 캐시 : 성능을 높이기 위해 비디오 메타데이터와 사용자 객체를 캐시한다.
◦
원본 저장소 : 원본 비디오를 보관할 대형 이진 파일 저장소 시스템이다. BLOB 저장소는 이진 데이터를 하나의 객체로 보관하는 데이터베이스 관리 시스템이다.
◦
트랜스코딩 서버 : 비디오 트랜스코딩은 비디오 인코딩이라고도 부르며 비디오의 포맷을 변환하는 절차다.
◦
트랜스코딩 비디오 저장소 : 트랜스코딩이 완료된 비디오를 저장하는 BLOB 저장소다.
◦
CDN: 비디오를 캐시하는 역할을 담당한다. 사용자가 재생 버튼을 누르면 비디오 스트리밍은 CDN을 통해 이루어진다.
◦
트랜스코딩 완료 큐: 비디오 트랜스코딩 완료 이벤트를 보관할 메시지 큐다.
◦
트랜스코딩 완료 핸들러: 트랜스 완료 큐에서 이벤트 데이터를 꺼내어 메타데이터 캐시와 데이터베이스를 갱신할 작업 서버들이다.
비디오 스트리밍 절차
•
비디오 스트리밍에 있어서 중요한 부분은 스트리밍 프로토콜이다.
◦
널리 사용되는 프로토콜로는 다음이 있다.
▪
MPEG-DASH
▪
Aple HLS
▪
Microsoft Smooth Streaming
▪
Adobe HTTP Dynamic Streaming
3단계 상세 설계
비디오 트랜스코딩
•
비디오 트랜스 코딩은 다음과 같은 이유로 중요하다.
◦
가공되지 않은 원본 비디오는 저장 공간을 많이 차지한다.
◦
상당수의 단말과 브라우저는 특정 종류의 비디오 포맷만 지원한다. 따라서 호환성 문제 해결을 위해 여러 포맷으로 인코딩해두는 것이 좋다.
◦
사용자에게 끊김 없는 비디오 재생을 보장하려면 네트워크 대역폭에 따라 적절한 화질로 인코딩된 영상을 보내는 것이 바람직하다.
◦
모바일 단말의 경우, 네트워크 상황이 수시로 달라질 수 있으므로 화질을 선택할 수 있도록 다양한 인코딩을 제공하는 것이 좋다.
•
인코딩 포맷은 아주 다양하나 큰 틀에서 두 부분으로 구성된다.
◦
컨테이너 : 비디오 파일, 오디오, 메타데이터를 담는 바구니같은 것이다.
◦
코덱 : 비디오 화질은 보존하면서 파일 크기를 줄일 목적으로 고안된 압축 및 압축 해제 알고리즘이다.
유향 비순환 그래프 모델
•
각기 다른 유형의 비디오 프로세싱 파이프라인 지원, 처리과정의 병렬성 향상을 위해 적절히 추상화하는 과정에서 사용 가능한 도구다.
•
예를 들어 페이스북의 스트리밍 비디오 엔진은 해당 모델을 도입하여 작업을 단계별로 배열하게끔 한 후, 해당 작업들이 순차적, 병렬적으로 처리될 수 있도록 지원한다.
비디오 트랜스코딩 아키텍처
•
해당 설계안에서는 클라우드 서비스를 활용해, 비디오 트랜스코딩 아키텍처를 다음, 다섯 개의 주요 컴포넌트를 이용해 설계한다.
◦
전처리기, DAG 스케줄러, 자원 관리자, 작업 실행 서버, 임시 저장소
•
전처리기
◦
비디오 분할
▪
비디오 스트림을 GOP(Group of Pictures)라 불리는 단위로 쪼갠다.
▪
GOP는 특정 순서로 배열된 프레임 그룹이다. 하나의 GOP는 독립적으로 재생 가능하며, 길이는 보통 몇 초 정도다.
◦
DAG 생성
▪
클라이언트 프로그래머가 작성한 설정 파일에 따라 DAG를 만들어낸다.
◦
데이터 캐시
▪
전처리기는 분할된 비디오의 캐시이기도 하다.
▪
안정성을 높이기 위해 전치리기는 GOP와 메타데이터를 임시 저장소에 보관한다.
▪
비디오 인코딩이 실패하면 시스템은 이렇게 보관된 데이터를 활용해 인코딩을 재개한다.
•
DAG 스케줄러
◦
DAG 스케줄러는 DAG 그래프를 몇 개 단계로 분할한 다음에 그 각각을 자원 관리자의 작업 큐에 집어 넣는다.
◦
하나의 DAG는 여러 단계로 쪼갤 수 있는데, 하나는 비디오, 오디오, 메타데이터 추출, 두 번째 단계에서는 해당 비디오 파일 인코딩, 썸네일 추출 등을 수행한다.
•
자원 관리자
◦
자원 관리자는 자원 배분을 효과적으로 수행하는 역할을 담당한다.
◦
이는, 세 개의 큐와 작업 스케줄러로 구성된다.
▪
작업 큐 : 실행할 작업이 보관되더 있는 우선순위 큐이다.
▪
작업 서버 큐 : 작업 서버의 가용 상태 정보가 보관되어 있는 우선순위 큐다.
▪
실행 큐 : 현재 실행 중인 작업 및 작업 서버 정보가 보관되어 있는 큐다.
▪
작업 스케줄러 : 최적의 작업/서버 조합을 골라, 해당 작업 서버가 작업을 수행하도록 지시하는 역할을 담당한다.
◦
자원 관리자는 다음과 같은 역할을 수행한다.
▪
작업 큐에서 가장 높은 우선순위의 작업을 꺼낸다.
▪
해당 작업을 실행하기 적합한 작업 서버를 고른다.
◦
작업 스케줄러는 다음와 같은 역할을 수행한다.
▪
해당 작업 서버에게 작업 실행을 지시한다.
▪
해당 작업이 어떤 서버에게 할당되었는지에 관한 정보를 실행 큐에 넣는다.
▪
자겅ㅂ이 완료되면 해당 작업을 실행 큐에서 제거한다.
•
작업 서버
◦
작업 서버는 DAG에 정의된 작업을 수행한다. 작업 종류에 따라 작업 서버도 구분하여 관리한다.
시스템 최적화
•
속도
◦
비디오 병렬 업로드 : 비디오 전부를 하나의 업로드로 올리는 것보다 여러 GOP로 분할하여 병렬적으로 업로드하는 것이 더 빠르게 데이터를 전달할 수 있다.
◦
업로드 센터를 사용자 근거리에 지정
◦
모든 지점마다 병렬화를 고려
•
안정성
◦
비디오 보호 : 디지털 저작권 관리, AES 암호화, 워터마크 등을 이용해 디지털 자산을 보완할 수 있다.
오류 처리
•
이런 거대한 시스템은 오류가 발생할 지점도 엄청 많다. 이런 시스템의 오류 관용성을 향상시킬려면 오류를 우아하게 처리하고 빠르게 회복할 수 있어야 한다.
•
시스템 오류에는 다음과 같은 두 종류가 있다.
◦
회복 가능 오류 : 특정 비디오를 트랜스코딩하다 실패한다든가의 오류는 회복 가능한 오류에 속한다. 이런 오류는 보통 몇 번 재시도하면 해결되기 때문이다.
◦
회복 불가능 오류 : 비디오 포맷이 잘못되었다던가 하는 회복 불가능한 오류의 경우, 시스템은 해당 비디오에 대한 작업을 중지하고 클라이언트에게 오류 코드를 제공해야 한다.
•
각 지점 별로 발생할 가능성이 있는 오류를 체크한 후, 이에 대한 처리로직까지 제안한다면 더 나은 시스템 면접 결과가 될 것이다.
4단계 마무리
•
이렇게 설명하고도 시간이 남았다면 다음 사항들을 추가적으로 논의해볼 수 있다.
◦
API 계층의 규모 확장성 확보 방안
◦
데이터베이스 계층의 규모 확장성 확보 방안
◦
라이브 스트리밍 기능 추가 제공
▪
이는 응답지연이 더 낮은 서비스여야 하며 스트리밍 프로토콜 선정에 더 주의를 기울여야 한다.
◦
비디오 삭제 절차
▪
불법적인 비디오, 선정적 비디오는 지워야 한다. 내릴 비디오는 관리자가 임의로 선정할 수도 있지만 사용자의 신고 절차를 통해 제거되어야할 수도 있다.