온라인에서 시간을 보낸 적이 있다면 스트리밍했을 가능성이 상당히 높습니다.
스트리밍은 YouTube, Spotify, Netflix 또는 기타 수백 가지 앱을 통해 인터넷에서 가장 잘 알려진 앱의 가장 일반적인 용도 중 하나입니다.
그러나 스트리밍이 얼마나 흔한지 생각해보면 당연하게 받아들이기 쉽습니다. 예를 들어 스트리밍이란 정확히 무엇입니까?
인터넷을 통해 컴퓨터와 모바일 장치로 전송되고 실시간으로 재생되는 라이브 또는 녹음된 모든 미디어 자료를 스트리밍이라고 합니다.
일반적인 유형의 스트리밍 자료에는 팟캐스트, 웹캐스트, 영화, 텔레비전 쇼 및 뮤직 비디오가 포함됩니다.
음악, 비디오 및 기타 종류와 같은 미디어 항목은 연속 데이터 패킷으로 계획되고 전송되므로 즉시 스트리밍할 수 있습니다.
적절한 장치, 스트리밍 서비스 또는 앱에 대한 액세스, 빠르고 안정적인 고속 인터넷 연결만 있으면 스트리밍할 수 있습니다.
참고: 비디오 스트리밍 서비스를 예로 사용하겠습니다.
이 게시물에서는 스트리밍 서비스의 시스템 설계와 비디오 스트리밍 애플리케이션을 개발할 때 고려해야 할 주요 요소에 대해 자세히 살펴볼 것입니다.
시스템 요구 사항
세계에서 가장 인기 있는 비디오 스트리밍 서비스로는 YouTube와 Netflix가 있습니다. 사용자 경험을 개선하기 위해 아키텍처에는 여러 요소가 포함됩니다.
이러한 서비스에는 인기 영화, 인보이스, AI 기반 추천 시스템, 나중에 볼 기능이 포함되지만 필수 요소에 집중할 것입니다.
핵심 자질
우리는 다음과 같은 기능을 우리의 개념에 포함시켰습니다. 비디오 스트리밍 서비스:
- 콘텐츠 제작자는 동영상을 게시할 수 있습니다.
- 시청자는 다양한 장치를 사용하여 동영상(모바일, TV 등)을 시청할 수 있습니다.
- 동영상에서 사용자는 댓글을 달거나 좋아하거나 싫어할 수 있습니다.
- 동영상의 제목을 사용하여 검색할 수 있습니다.
- 이러한 통계를 사용자에게 표시하기 위해 시스템은 조회수, 좋아요 및 싫어요를 저장할 수 있습니다.
시스템 목표
- 시청자가 실시간으로 동영상을 볼 수 있도록 버퍼링이 없어야 합니다.
- 비디오용 스토리지는 신뢰할 수 있어야 합니다. 업로드한 동영상을 잃어버려서는 안 됩니다.
- 사용자가 증가하면 시스템을 확장할 수 있어야 합니다.
- 낮은 대기 시간과 높은 가용성은 시스템의 기능이어야 합니다. 이 상황에서는 사용자가 새로 제출된 영화를 보기 전에 잠시 기다려도 괜찮기 때문에 일관성은 그다지 중요하지 않습니다.
시스템은 정기적으로 강력한 트래픽을 관리해야 하기 때문에 단일 서버는 데이터 볼륨을 처리할 수 없습니다. 서버 그룹은 시스템을 서비스하는 데 사용됩니다.
한 서버가 충돌하더라도 클라이언트에 눈에 띄는 속도 영향이 없어야 합니다.
고급 아키텍처
비디오 스트리밍 프로그램은 세 가지 다른 종류의 요청 중 하나를 수락할 수 있습니다.
- 업로드(쓰기)
- 검색(읽기)
- 보기(읽기)
읽기 쿼리(검색 및 보기)는 종종 쓰기 요청(업로드)보다 몇 배 더 자주 발생하기 때문에 각 쿼리는 별도의 서버 클러스터에서 처리됩니다.
이 프로그램은 읽기 집약적이므로 업로드보다 읽기 요청을 처리하기 위해 더 많은 서버를 설정해야 합니다.
클라이언트가 만든 각 요청은 다음을 통해 적절한 마이크로 서비스로 라우팅됩니다. 로드 밸런서 받을 때.
업로드 서비스
비디오를 처리하는 업로드 서비스는 이를 Open Connect 서버에 업로드하고 모든 사용자가 액세스할 수 있도록 하고 업로드 요청을 이행합니다.
검색 서비스
로드 밸런서는 검색 요청을 검색 마이크로서비스로 보낸 다음 이를 Netflix의 Elastic search로 보냅니다. 클라이언트는 Elastic search의 답변을 받습니다.
엄청나게 확장 가능한 전체 텍스트 오픈 소스 검색 엔진인 Elastic Search는 Netflix에서 수백만 개의 동영상을 검색하는 데 사용합니다.
Elastic Search는 Netflix에서 고객 서비스 운영을 분석하는 데 사용됩니다.
서비스보기
대부분의 보기 요청은 로드 밸런서 또는 Netflix 서버로 전송되지 않습니다. 대신 사용자는 로컬 ISP에 연결하고 가장 가까운 Open Connect 서버에서 직접 정보를 제공받습니다.
그러나 요청된 비디오에 액세스할 수 없는 경우 로드 밸런서 및 보기 마이크로 서비스로 전송됩니다.
그런 다음 메타데이터 데이터베이스에서 비디오를 검색하고 메타데이터에 지정된 경로에서 검색하여 클라이언트로 전송합니다.
물론 이 기술에는 대기 시간이 포함되므로 거의 모든 보기 요청이 Open Connect를 통해 제공됩니다.
동영상 업로드
YouTube의 주요 목적은 영화나 동영상을 업로드하는 것입니다. 비디오 스트리밍 서비스는 소비자가 비디오에 액세스할 수 있도록 하기 전에 여러 장애물을 극복해야 합니다.
조각으로 유지
제출된 각 비디오는 하나의 거대한 파일로 보관되지 않고 여러 개의 작은 파일로 나뉩니다.
이는 콘텐츠 제작자가 방대한 동영상을 제출할 수 있기 때문에 필수적입니다. 하나의 큰 파일을 처리하거나 스트리밍하는 데 시간이 걸릴 수 있습니다.
뷰어는 전체 비디오가 저장되어 조각으로 제공되는 경우 재생하기 위해 전체 비디오를 다운로드할 필요가 없습니다.
청크 사이에 대기 시간이 거의 없고 사용자가 부드러운 시청 환경을 갖도록 하기 위해 클라이언트는 먼저 서버에서 첫 번째 청크를 요청한 다음 해당 청크가 재생되는 동안 다음 청크를 요청합니다.
처리 대기열
각 비디오에는 수많은 청크가 있으며 Netflix는 여러 동시 작업자를 사용하여 분석하므로 처리 대기열이 필요합니다. 대기열에 추가하면 이 작업이 더 간단해집니다.
작업은 작업자(또는 다음에 다룰 인코더)에 의해 수집되고 다양한 형식으로 인코딩된 다음 분산 파일 저장소에 저장됩니다.
비디오 인코딩
시청자가 자신에게 가장 적합한 기술과 인터넷 연결을 사용하여 액세스할 수 있도록 비디오 청크를 여러 형식으로 변환하고 저장하는 것이 중요합니다.
비디오는 시청자가 랩톱, 전화, TV 또는 기타 장치에서 볼 수 있습니다. 다양한 장치에 대한 최적의 형식은 서로 다릅니다.
비슷한 맥락에서 다양한 시청자가 다양한 대역폭을 활용하여 인터넷에 액세스할 수 있습니다.
일부 시청자는 인터넷 연결 속도나 대역폭에 따라 쉽게 고해상도 영화를 스트리밍할 수 있는 반면, 대역폭이 낮은 시청자는 저품질 비디오를 훨씬 더 쉽게 스트리밍할 수 있습니다.
연결 열기
브라우저를 사용하여 Netflix.com을 요청할 때 ISP(인터넷 서비스 제공업체)는 실제로 컴퓨터와 Netflix 서버 간의 연결을 설정하라는 요청을 받습니다.
귀하의 ISP가 귀하를 대신하여 Netflix IP 주소에 연락하고 결과를 귀하에게 반환합니다. 도쿄와 같은 외딴 국가의 청중은 이러한 서버가 미국에 집중되어 있기 때문에 신호 송수신에 상당한 지연이 발생합니다.
동영상의 경우 시청자에게 많은 데이터를 전송해야 하기 때문에 지연이 훨씬 더 큰 문제이며, 전송되는 경우 스트리밍이 지연되고 사용자 경험이 저하됩니다.
Netflix는 영리한 기술을 사용하여 문제를 해결합니다. OC(Open Connect)라고 합니다. Open Connect는 Netflix가 사용하는 CDN(Content Delivery Network)입니다.
사용자와 자료 사이의 물리적 거리를 줄여 온라인 정보를 캐시하고 소비자에게 신속하게 전달하기 위해 CDN은 분산된 서버 및 관련 데이터 센터의 네트워크입니다.
로드 균형 조정
A 단일 신청 서버는 매초 도착하는 요청의 양(업로드, 검색 및 보기 요청 포함)을 처리할 수 없습니다.
여러 서버가 관련되어 있으므로 여러 서버에 워크로드를 효과적으로 분산하려면 로드 밸런서가 있어야 합니다.
Netflix는 서버 장애를 처리하고 추가 서버 설치를 쉽게 수용할 수 있기 때문에 서버 간에 로드를 분산하기 위해 지속적인 해싱을 사용합니다.
각 비디오의 인기도가 다르기 때문에 이러한 영화를 호스팅하는 실제 서버의 로드가 동일하지 않을 수 있습니다. 바쁜 서버가 새 요청을 열린 서버로 전환할 수 있도록 하는 동적 HTTP 리디렉션을 사용하여 이 문제를 해결할 수 있습니다.
비디오 스트리밍 애플리케이션 개발 시 고려 사항
틈새 시장 찾기 및 개발
엔터테인먼트에서 교육, 피트니스에 이르기까지 다양한 종류의 자료를 사용할 수 있으므로 전문 분야의 차별화 요소를 구축하는 것이 중요합니다. 다큐멘터리나 독립영화를 위한 플랫폼을 만들 수 있습니다.
애플리케이션의 수익화
기존의 수익 창출 패턴을 방해하면 혁신과 성장이 가능합니다. 계획은 항상 대상 고객에 맞게 조정되어야 합니다.
기존 기업이 이미 시장을 독점했기 때문에 광고 또는 PPL로 무료 멤버십으로 수익을 창출할 수 있습니다.
이와 함께 글로벌 스트리밍 서비스 플랫폼을 구축하려면 다중 통화 요구 사항을 고려해야 합니다.
더 나은 경험
인터넷 속도가 느리거나 액세스가 제한된 사용자와 같은 엣지 환경에서는 프로그램의 성능이 향상되어야 합니다.
스트리밍 비디오
Netflix는 콘텐츠를 방송할 뿐만 아니라 사용자 엔지니어링 기술과 개인화된 제안을 사용하여 사용자가 서비스에 계속 빠져들 수 있도록 합니다.
데이터 분석 및 사용자 맞춤화에 중점을 둔 Netflix와 유사한 스트리밍 서비스를 구축할 계획입니다.
앱의 많은 역할 관리
Netflix 앱에서 사용자 보기는 단순히 여러 사용자 역할 중 하나입니다. 관리자, 동영상 소유자, 파트너, 중재자 등 다양한 사용자와 액세스에 대한 계획이 필요합니다.
결론
결론적으로 이것이 Netflix, YouTube 및 기타 온보드 비디오와 같은 비디오 스트리밍 서비스가 비디오를 추적하고 수백만 소비자에게 보여주는 방법입니다.
이러한 각 응용 프로그램에는 몇 가지 추가 기능이 있을 수 있지만 기본 기능은 동일한 알고리즘을 기반으로 합니다.
스트리밍 서비스 시스템 아키텍처에 대한 일반적인 개요를 제공하기 위해 최선을 다했지만 백그라운드에서 더 많은 일이 진행되고 있습니다.
여러분이 이 지식을 소중하게 여기고 활용하기를 진심으로 바랍니다.
댓글을 남겨주세요.