https://product.kyobobook.co.kr/detail/S000001033116

 

가상 면접 사례로 배우는 대규모 시스템 설계 기초 | 알렉스 쉬 - 교보문고

가상 면접 사례로 배우는 대규모 시스템 설계 기초 | “페이스북의 뉴스 피드나 메신저,유튜브, 구글 드라이브 같은 대규모 시스템은 어떻게 설계할까?” IT 경력자라도 느닷없이 대규모 시스템

product.kyobobook.co.kr

1장 사용자 수에 따른 규모 확장성 : https://inhyeok-blog.tistory.com/40
2장 개략적인규모추정 : https://inhyeok-blog.tistory.com/41
3장 시스템 설계 면접 공략법 : https://inhyeok-blog.tistory.com/42
4장 처리율제한장치의설계 : https://inhyeok-blog.tistory.com/43
5장 안정해시설계 : https://inhyeok-blog.tistory.com/44
6장 키-값저장소설계 : https://inhyeok-blog.tistory.com/45
7장 분산시스템을위한유일 ID 생성기설계 : https://inhyeok-blog.tistory.com/46
8장 URL 단축기설계 : https://inhyeok-blog.tistory.com/47
9장 웹크롤러설계 : https://inhyeok-blog.tistory.com/48
10장알림시스템설계 : https://inhyeok-blog.tistory.com/49
11장뉴스피드시스템설계 : https://inhyeok-blog.tistory.com/50
12장채팅시스템설계 : https://inhyeok-blog.tistory.com/51
13장검색어자동완성시스템 : https://inhyeok-blog.tistory.com/52
14장유튜브설계 : https://inhyeok-blog.tistory.com/53
15장구글드라이브설계 : https://inhyeok-blog.tistory.com/54

 

 

사실 필자는 유튜브가 없으면 10배는 괜찮은 사람이었을 것이라고 확신한다. 유튜브는 너무 재밌고 자극적이며, 의도를 가지고 행동하는 것을 방해한다. 하지만 우린 엔지니어니 이런 사견은 접어두고 유튜브 설계를 공부해 보는 로 하자.

 

요구사항

- 비디오를 올리고 시청하는 기능을 구현한다.

- 모바일 앱, 웹 브라우저, 스마트 TV를 지원한다.

- DAU는 5백만이다.

- 평균적으로 30분 사용한다.

- 다국어 지원을 해야 한다.

- 현존하는 비디오 종류와 해상도를 대부분 지원한다

- 암호화가 필요하다.

- 비디오는 작거나 중간 크기에 중점을 두자. 최대 크기는 1GB이다.

- 클라우드 서비스를 사용할 수 있다.

이번 장에는 아래와 같은 기능에 초점을 맞춘다.

- 빠른 비디오 업로드

- 원활한 비디오 재생

- 재생 품질 선택 기능

- 낮은 인프라 비용

- 높은 가용성과 규모 확장성, 그리고 안정성

- 지원 클라이언트: 모바일 앱, 웹브라우저, 그리고 스마트 TV

 

개략적 규모 추정

- DAU : 5백만

- 1인당 하루 평균 5개의 비디오 시청

- 10%의 사용자가 하루에 1 비디오 업로드

- 비디오 평균 크기는 300MB

- 비디오 저장을 위해 매일 새로 요구되는 저장 용량 = 5백만 * 0.1 * 300MB = 150TB

- CDN 비용 $0.02 * 5백만 * 5 * 0.3GB  = $150,000

 

개략적 설계안

이제 비디오 업로드 절차와 비디오 스트리밍 절차를 살펴보자.

 

비디오 업로드 절차

위의 그림에서 우리가 익숙하지 않은 트랜스코딩 서버만 살펴보자.

- 트랜스코딩 서버

비디오 트랜스코딩은 비디오 인코딩이라 부기도 하는 절차로, 비디오의 포맷을 변환하는 절차이다.

- 트랜스코딩 비디오 저장소

트랜스코딩이 완료된 비디오를 저장하는 BLOB 저장소다.

- 트랜스코딩 완료 큐

트랜스코딩이 완료되었다는 이벤트를 트랜스코딩 완료 핸들러에게 전달하기 위한 큐다.

- 트랜스코딩 완료 핸들러

메타데이터 캐시와 DB를 갱신하기 위한 작업 서버다.

 

비디오가 업로드 프로세스

1. 비디오 원본 저장소에 업로드 한다.

2. 트랜스코딩 서버는 원본 저장소에서 해당 비디오를 가져와 트랜스코딩을 시작한다.

3. 트랜스코딩이 완료되면 아래 두 절차가 병렬적으로 수행된다.

    3a. 완료된 비디오를 트랜스코딩 비디오 저장소로 업로드한다.

    3b. 트랜스코딩 완료 이벤트를 트랜스코딩 비디오 저장소로 업로드한다.

        3a.1. 트랜스코딩이 끝난 비디오를 CDN에 올린다.

        3b.1. 완료 핸들러가 이벤트 데이터를 큐에서 꺼낸다.

        3b.1.a, 3b.1.b. 완료 핸들러가 메타데이터 데이터베이스와 캐시를 갱신한다.

4. API 서버가 달말에게 비디오 업로드가 끝나서 스트리밍 준비가 되었음을 알린다.

 

메타데이터 갱신 프로세스

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

 

비디오 스트리밍 절차

유튜브에서 비디오 재생을 하면 비디오를 전부 다운받아야 재생이 되는 불편함은 없다. 이는 스트리밍 프로토콜을 활용했기 때문에 가능하다. 스트리밍 프로토콜은 다양한데, 각각은 지원하는 비디오 인코딩이 다르고 플레이어도 다르다.

비디오는 CDN에서 바로 스트리밍 된다. 이때 사용자의 단말에서 가장 가까운 CDN edge Server가 비디오 전송을 담당한다.

 

상세 설계

상세 설계에서는 최적화 방안과 함께 오류 처리 메커니즘에 대해 소개한다.

 

비디오 트랜스코딩

비디오를 생성하면 단말에 따라 특정 포맷으로 저장된다. 이 비디오는 다른 단말과의 호환성을 위해 특정 비트레이트(비디오를 구성하는 비트가 얼마나 빨리 처리되어야 하는지 나타내는 단위)로 저장되어야 한다. 그리고 이 과정을 비디오 트랜스코딩이라 부른다. 그리고 다음과 같은 이유로도 비디오 트랜스코딩은 중요하다.

- 원본 비디오는 저장 공간을 많이 차지한다.

- 상당수의 단말과 브랑우저는 특정 포맷만 지원한다. 따라서 하나의 비디오를 여러 포맷으로 인코딩 해둬야 한다.

- 사용자의 네트워크 상황에 따라 비디오의 화질을 구분해서 보내줘야 한다.

- 네트워크 상황이 수시로 변경되기 떄문에 비디오 화질을 자동으로 변경하거나 수동으로 변경할 수 있어야 한다.

 

유향 비순환 그래프(DAG) 모델

콘텐츠 제작자는 다양한 요구사항을 가지고 있다. 예컨데 워터마크를 표시하거나, 썸네일을 직접 만들거나, 화질을 다르게 할 수도 있을 것이다. 이처럼 각기 다른 비디 오프세싱 파이프라인을 지원하고, 처리 과정의 병렬성을 높이기 ㅎ위해서 유향 비순한 그래프(DAG) 프로그래밍 모델을 도입할 필요가 있다.

 

비디오 트랜스코딩 아키텍쳐

DAG를 활용한 실제 설계안은 다음과 같다.

 

- 전처리기

전처리기는 비디오를 분할하고, DAG를 생성한다.(적절한 작업을 조립하는 과정이다) 그리고 분할된 비디오 데이터를 캐시한다.

- DAG 스케줄러

스케줄러는 DAG 그래프를 몇 단계로 분할한 후 각각을 자원 관리자의 작업 큐에 집어넣는다. 아래의 그림에선 DG를 2개 작업 단계로 쪼갠 사례다. 여기서 실제 작업이 이루어 지는 것은 아니고 단지 DAG를 정의해주는 과정이라 이해하면 좋다.

- 자원 관리자

자원 관리자는 자원 배분을 효과적으로 수행하는 역할을 담당한다. 자원 관리자는 작업 큐(우선순위 큐)에서 작업을 꺼내서 작업 서버를 고른 후에 해당 작업 서버에게 작업 실행을 지시하고, 해당 작업이 어떤 서버에 할당되었는지에 관한 정보를 실행 큐에 넣는다. 그리고 작업 완료 시점에 해당 작업을 실행큐에서 제거한다.

- 작업 서버

DAG에서 정의된 작업을 수행한다.

 

- 임시 저장소

비디오 프로세싱이 진행되는 동안 캐시로 사용된다. 여기엔 비디오/오디오, 메타데이터 등일 담길 수 있다.

 

시스템 최적화

속도, 안정성, 비용 측면에서 이 시스템을 최적화 해보자.

 

속도 최적화

비디오를 GOP들로 분할해서 병렬적으로 업로드 하면 일부가 실패해도 빠르게 업로드를 재개할 수 있다.

업로드 센터를 사용자 근거리에 지정하면 속도의 최적화를 달성할 수 있다.

마지막으로 모든 절차를 느슨하게 결합되도록 해서 병렬성을 높이는 것이 가능하다. 이를 위해서 각 컴포넌트의 통신을 메시지 큐로 결합도를 낮추자.

 

안정성 최적화

허가받은 사용자만 비디오를 업로드 하기 위해 인증된 URL을 이용하자.

비디오의 저작권 보호를 위해 다음 3가지 선택지 중 하나를 선택할 수 있다.

- 디지털 저작권 관리 시스템 도입: 애플의 페어플레이, 구글의 와이드바인, MS의 플레이레디가 있다.

- AES 암호화: 비디오를 암호화하고 접근 권한을 설정하는 방식

- 워터마크: 비디오 위에 소유자 정보를 포함하는 이미지 오버레이를 올리는 방식

 

비용 최적화

- 인기 비디오는 CDN에서, 다른 비디오는 비디오 서버를 통해 재생하기

- 인기 없는, 또는 짧은 비디오는 필요할 때 인코딩 해서 재생

- 특정 지역에서만 인기있는 비디오는 다른 지역에 옮기지 않기

- CDN을 직접 구축하고 ISP와 제휴

 

오류처리

시스템 오류는 두 가지 종류가 있다.

- 회복 가능 오류: 특정 세그먼트를 트랜스코딩하다 실패 하는 등의 문제는 재시도. 하지만 반복되면 오류코드를 반환.

- 회복 불가능 오류: 포맷이 잘못되는 등의 오류는 작업을 중단하고 클라이언트에게 오류코드를 반환.

 

+ Recent posts