안녕하세요 여러분, 저는 부카이 첸입니다~
YouTube는 Google에 이어 두 번째로 인기 있는 웹사이트입니다. 2019년 5월에는 매분 500시간 이상의 비디오 콘텐츠가 플랫폼에 업로드되었습니다.
동영상 공유 플랫폼에는 20억 명 이상의 사용자가 있으며 매일 10억 시간 이상의 동영상이 재생되고 수십억 건의 조회수가 발생합니다. 이것은 놀라운 숫자입니다.
이 기사에서는 비디오 플랫폼이 엄청난 양의 데이터를 저장하고 수십억 명의 사용자로 확장할 수 있도록 하는 YouTube에서 사용하는 데이터베이스 및 백엔드 데이터 인프라에 대해 심층적으로 설명합니다.
그럼 시작해 보겠습니다.
YouTube의 여정은 2005년에 시작되었습니다. 벤처 캐피털이 자금을 지원한 이 기술 스타트업은 계속해서 성공을 거두면서 2006년 11월 Google에 16억 5천만 달러에 인수되었습니다.
Google에 인수되기 전 팀은 다음으로 구성되었습니다.
주요 데이터베이스는 Vitess에서 지원하는 MySQL입니다. Vitess는 MySQL의 수평 확장에 사용되는 데이터베이스 클러스터 시스템입니다. 또한 캐싱에는 Memcache를 사용하고 노드 조정에는 Zookeeper를 사용합니다.
인기 동영상은 CDN을 통해 제공되는 반면, 일반적이고 재생 횟수가 적은 동영상은 데이터베이스에서 가져옵니다.각 동영상이 업로드되면 고유 식별자가 부여되고 일괄 작업으로 처리됩니다. 이 작업은 썸네일 생성, 메타데이터, 동영상 스크립트, 인코딩, 수익 창출 상태 설정 등과 같은 여러 자동화된 프로세스를 실행합니다.
VP9 및 H.264/MPEG-4 AVC 고급 비디오 코딩 코덱은 비디오 압축에 사용되며 다른 인코더 대역폭의 절반을 사용하여 HD 및 4K 품질 비디오를 인코딩할 수 있습니다.
비디오 스트리밍은 기존 HTTP 웹 서버에서 고품질 비디오 스트리밍을 달성할 수 있는 적응형 비트 전송률 스트리밍 기술인 HTTP 프로토콜 기반의 동적 적응형 스트리밍을 사용합니다. 이 기술을 사용하면 다양한 비트 전송률로 콘텐츠를 시청자에게 제공할 수 있습니다. YouTube 클라이언트는 시청자의 인터넷 연결 속도에 맞게 비디오 렌더링을 자동으로 조정하여 버퍼링 시간을 최소화합니다.
저는 관련 기사에서 YouTube의 비디오 트랜스코딩 프로세스에 대해 논의한 적이 있습니다. "YouTube가 짧은 지연 시간으로 고품질 비디오를 제공하는 방법"을 참조하세요.
이제 플랫폼의 백엔드 기술을 간단히 소개하겠습니다. YouTube에서 사용하는 기본 데이터베이스는 MySQL입니다. 이제 YouTube 엔지니어링 팀이 Vitess를 작성할 필요성을 느낀 이유를 알아볼까요? 원래 MySQL 환경에서 어떤 문제에 직면하여 그 위에 추가 프레임워크를 구현하게 되었습니까?
3. Vitess가 필요한 이유
3.1 마스터-슬레이브 복제본
마스터 노드는 쓰기 트래픽을 처리하고, 마스터 노드와 레플리카 노드는 읽기 트래픽을 동시에 처리합니다.
그러나 이 시나리오에서는 복제본에서 오래된 데이터를 읽을 수 있습니다. 마스터가 복제본에 대한 정보를 업데이트하기 전에 요청이 복제본의 데이터를 읽는 경우 최종 사용자는 오래된 데이터를 받게 됩니다.이때 마스터 노드와 레플리카 노드의 데이터가 일치하지 않습니다. 이 경우 일치하지 않는 데이터는 기본 노드와 복제본 노드의 특정 동영상 조회수입니다.
사실 이건 전혀 문제가 되지 않습니다. 시청자들은 조회수에 약간의 불일치가 있어도 개의치 않을 것입니다. 그렇죠? 게다가 브라우저에서 비디오를 렌더링할 수도 있습니다.
마스터 노드와 레플리카 노드 사이의 데이터는 결국 일관성을 갖게 됩니다.
그래서 엔지니어들도 매우 기뻤고 관객들도 매우 기뻤습니다. 레플리카 도입으로 일이 순조롭게 진행되고 있습니다.
웹사이트는 계속해서 인기를 얻고 있으며 QPS는 계속해서 상승하고 있습니다. 마스터-슬레이브 복제 전략은 이제 웹사이트 트래픽의 증가를 따라잡는 데 어려움을 겪고 있습니다.
이제 무엇을 해야 할까요?
다음 전략은 데이터베이스를 샤딩하는 것입니다. 샤딩은 마스터-슬레이브 복제본, 마스터-마스터 복제본, 페더레이션 및 비정규화 외에도 관계형 데이터베이스를 확장하는 방법 중 하나입니다.
데이터베이스 샤딩은 간단한 프로세스가 아닙니다. 이는 시스템의 복잡성을 크게 증가시키고 관리를 더욱 어렵게 만듭니다.
그러나 QPS의 성장에 맞춰 데이터베이스를 샤딩해야 합니다. 개발자가 데이터베이스를 분할한 후 데이터는 여러 시스템에 분산됩니다. 이는 시스템의 쓰기 처리량을 증가시킵니다. 이제 쓰기를 처리하는 하나의 마스터 인스턴스 대신 여러 샤딩된 머신에서 쓰기 작업이 발생할 수 있습니다.
또한 중복성과 처리량을 위해 각 시스템마다 별도의 복사본이 생성됩니다.
콘텐츠 제작자가 데이터베이스에 대량의 데이터를 추가하면서 플랫폼의 인기가 계속 높아지고 있습니다.
기계 고장이나 알 수 없는 외부 사건으로 인한 데이터 손실이나 서비스 불가를 방지하기 위해서는 시스템에 재난 관리 기능을 추가해야 합니다.
재난관리란 정전이나 자연재해(지진, 화재 등)에 대비한 응급조치를 말합니다. 이는 중복되어야 하며 세계의 다양한 지리적 영역에 있는 데이터 센터에 사용자 데이터를 백업해야 합니다. 사용자 데이터 손실 또는 서비스 이용 불가능은 허용되지 않습니다.
전 세계에 여러 데이터 센터가 있으면 사용자 요청이 다른 대륙에 있는 원본 서버로 라우팅되는 대신 가장 가까운 데이터 센터로 라우팅되므로 YouTube의 시스템 지연 시간을 줄이는 데도 도움이 됩니다.
이제 인프라가 얼마나 복잡해질 수 있는지 상상할 수 있습니다.
최적화되지 않은 전체 테이블 스캔으로 인해 전체 데이터베이스가 충돌하는 경우가 많습니다. 데이터베이스는 잘못된 쿼리로부터 보호되어야 합니다. 효율적인 서비스를 보장하려면 모든 서버를 추적해야 합니다.
개발자에게는 시스템의 복잡성을 추상화하고, 확장성 문제를 해결하고, 최소한의 비용으로 시스템을 관리할 수 있는 시스템이 필요합니다. 이 모든 것이 YouTube가 Vitess를 개발하게 만들었습니다.
Vitess는 MySQL을 수평 확장할 수 있도록 해주는 MySQL에서 실행되는 데이터베이스 클러스터 시스템입니다. 개발자가 애플리케이션에 샤딩 논리를 추가하지 않고도 데이터베이스를 확장할 수 있는 샤딩 기능이 내장되어 있습니다. 이는 NoSQL이 수행하는 작업과 유사합니다.
Vitess는 장애 조치 및 백업도 자동으로 처리합니다. 리소스 집약적인 쿼리를 지능적으로 다시 작성하고 캐싱을 구현하여 서버를 관리하고 데이터베이스 성능을 향상시킵니다. YouTube 외에도 GitHub, Slack, Square, New Relic 등과 같이 업계에서 잘 알려진 다른 업체에서도 프레임워크를 사용합니다.
Vitess는 ACID 트랜잭션 및 강력한 일관성에 대한 지원이 필요하고 동시에 관계형 데이터베이스를 NoSQL 데이터베이스만큼 빠르게 확장하려는 경우에 사용됩니다.
YouTube에서 각 MySQL 연결에는 2MB의 오버헤드가 있습니다. 각 연결에는 계산된 비용이 있으며, 연결 수가 증가하면 RAM을 추가해야 합니다.
Vitess는 Go 프로그래밍 언어의 동시성 지원을 기반으로 구축된 연결 풀을 통해 매우 저렴한 비용으로 이러한 연결을 관리할 수 있습니다. Zookeeper를 사용하여 클러스터를 관리하고 최신 상태로 유지합니다.
Vitess는 클라우드 기반이며 클라우드 모델과 마찬가지로 데이터베이스에 용량이 점진적으로 추가되므로 클라우드 배포에 매우 적합합니다. Kubernetes를 인식하는 클라우드 기반 분산 데이터베이스로 실행될 수 있습니다.
YouTube에서 Vitess는 컨테이너화된 환경에서 실행되며 Kubernetes를 컨테이너 조정 도구로 사용합니다.
오늘날의 컴퓨팅 시대에는 모든 대규모 서비스가 분산 환경의 클라우드에서 실행됩니다. 클라우드에서 서비스를 실행하면 많은 이점이 있습니다.
Google Cloud Platform은 Google 검색, YouTube 등 Google 내부 최종 사용자 제품에서 사용하는 것과 동일한 인프라를 기반으로 하는 클라우드 컴퓨팅 서비스 집합입니다.
모든 대규모 온라인 서비스에는 다언어 지속성 아키텍처가 있습니다. 관계형이든 NoSQL이든 하나의 데이터 모델이 서비스의 모든 사용 시나리오를 처리할 수 없기 때문입니다.
이 기사를 조사하는 동안 YouTube에서 사용하는 특정 Google Cloud 데이터베이스 목록을 찾을 수 없었지만 Google Cloud Spanner, Cloud SQL, Cloud Datastore, Memorystore, 등. 서비스 실행의 다양한 기능.
이 문서에서는 Google Adwords, Google Finance, Google Trends 등과 같은 다른 Google 서비스에서 사용되는 데이터베이스에 대해 자세히 설명합니다.
YouTube는 지연 시간이 짧고 비용이 저렴한 콘텐츠 전송을 위해 Google의 글로벌 네트워크를 사용합니다. 전 세계적으로 분산된 POP 엣지 포인트를 통해 고객은 원본 서버에서 데이터를 가져올 필요 없이 더 빠르게 데이터를 얻을 수 있습니다.
지금까지 유튜브에서 사용하는 데이터베이스, 프레임워크, 기술에 대해 이야기해봤습니다. 이제 스토리지에 대해 이야기할 차례입니다.
YouTube는 어떻게 그렇게 많은 양의 데이터(1분마다 업로드되는 500시간의 동영상 콘텐츠)를 저장하나요?
동영상은 Google 데이터 센터의 하드 드라이브에 저장됩니다. 이 데이터는 Google File System과 BigTable에서 관리됩니다.
GFS Google File System은 분산 환경에서 대용량 데이터를 관리하기 위해 Google이 개발한 분산 파일 시스템입니다.
BigTable은 수천 대의 시스템에 분산된 PB 수준의 데이터를 처리하는 데 사용되는 Google 파일 시스템을 기반으로 구축된 지연 시간이 짧은 분산 데이터 저장 시스템입니다. 60개 이상의 Google 제품에서 사용됩니다.
그래서 동영상은 하드 드라이브에 저장됩니다. 관계, 메타데이터, 사용자 기본 설정, 프로필 정보, 계정 설정, 스토리지에서 비디오를 가져오는 데 필요한 관련 데이터 등은 모두 MySQL에 저장됩니다.
Google 데이터 센터에는 동질적인 하드웨어가 있으며 소프트웨어는 수천 개의 독립적인 서버 클러스터를 관리하기 위해 자체적으로 구축되었습니다.
Google에서 배포하는 서버는 데이터 센터의 저장 기능을 향상시킬 수 있습니다. 이들은 모두 상용 서버(상용 서버)이며 상용 서버(상용 기성 서버)라고도 합니다. 이러한 서버는 가격이 저렴하고 널리 사용 가능하며 대량 구매가 가능하며 최소한의 비용과 비용으로 데이터 센터의 동일한 하드웨어를 교체하거나 구성할 수 있습니다.
추가 스토리지에 대한 필요성이 증가함에 따라 새로운 상용 서버가 시스템에 연결됩니다.
문제 발생 후 상용 서버는 수리가 아닌 직접 교체하는 경우가 많습니다. 이는 맞춤형이 아니며 이를 사용하면 기업은 맞춤형 서버를 실행하는 것에 비해 인프라 비용을 크게 줄일 수 있습니다.
YouTube에는 매일 페타바이트가 넘는 새로운 저장소가 필요합니다. 회전식 하드 드라이브는 저렴한 비용과 높은 신뢰성으로 인해 기본 저장 매체입니다.
SSD 솔리드 스테이트 드라이브는 반도체를 기반으로 하기 때문에 회전 디스크보다 성능이 뛰어나지만 SSD를 대규모로 사용하는 것은 비용 효율적이지 않습니다.
가격이 상당히 비싸고 시간이 지나면서 데이터가 손실되기 쉽습니다. 이로 인해 아카이브 데이터 저장에 적합하지 않습니다.
또한 Google은 대규모 데이터 센터에 적합한 새로운 디스크 시리즈를 개발 중입니다.
데이터 저장용으로 제작된 하드웨어의 품질을 판단하는 데 사용할 수 있는 5가지 주요 지표가 있습니다.
위 내용은 YouTube는 대용량 동영상 파일을 어떻게 저장하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!