搜尋
首頁後端開發Python教學YouTube 是如何保存巨量影片檔案的?

YouTube 是如何保存巨量影片檔案的?

Apr 10, 2023 am 11:21 AM
文件影片儲存

大家好,我是不才陳某~

YouTube 是僅次於Google的第二大熱門網站。在 2019 年 5 月,每分鐘會有超過 500 小時的影片內容上傳到該平台。

這個影片分享平台有超過 20 億的用戶,每天有超過10億小時的影片被播放,產生數十億的瀏覽量。這些都是令人難以置信的數字。

本文將對 YouTube 使用的資料庫和後端資料基礎設施進行深入講解,它們使得該影片平台能夠儲存如此巨量的數據,並能擴展至數十億的用戶。

那我們就開始吧。

1.引言

YouTube 的旅程開始於 2005 年。隨著這家由風險資本資助的技術新創公司不斷取得成功,它於 2006 年 11 月被谷歌以 16.5 億美元收購。

在被Google收購之前,它們的團隊由以下人員組成:

  • 兩名系統管理員
  • 兩名可擴展性軟體架構師
  • 兩名特性開發人員
  • 兩名網路工程師
  • 一名DBA

#2.後端基礎設施

YouTube的後端微服務是由Python、資料庫、硬體、Java(使用了Guice框架)和Go 編寫的。使用者介面是使用JavaScript編寫的。

主要的資料庫是由 Vitess 支撐的 MySQL,Vitess是一個資料庫叢集系統,用於 MySQL 的水平擴展。另外,使用 Memcache 實作快取並使用 Zookeeper 進行節點的協調。

YouTube 是如何保存巨量影片檔案的?

流行的影片透過 CDN 來提供,而一般的、較少播放的影片則從資料庫中取得。

每個視頻在上傳的時候,都會賦予一個唯一的標識符並且會由一個批處理job 進行處理,該job 會運行多個自動化的過程,比如生成縮圖、元數據、視頻腳本、編碼、設定貨幣化狀態等。

VP9 & H.264/MPEG-4 AVC 高級視訊編碼(Advanced Video Coding codecs)會用於視訊壓縮,它能夠使用其他編碼器一半的頻寬來編碼 HD 和 4K 品質的視訊。

視訊串流則是使用基於HTTP協定的動態自適應串流(Dynamic Adaptive Streaming),這是一種自適應位元速率的串流技術,能夠從傳統的HTTP Web 伺服器上實現高品質的視訊串流。透過這種技術,內容可以按照不同的比特率提供給觀眾。 YouTube 用戶端會根據觀看者的網路連線速度自動適應影片渲染,從而盡可能減少緩衝時間。

我曾經在一篇專門的文章中討論過 YouTube 的影片轉碼過程,請參閱「YouTube是如何以低延遲提供高品質的影片」。

所以,這裡對平台的後端技術有一個快速的介紹。 YouTube 主要使用的資料庫是 MySQL。現在,我們來了解一下 YouTube 的工程團隊為什麼覺得有必要寫 Vitess?他們在最初的 MySQL 環境中面臨的問題是什麼,使他們在此基礎上實現了一個額外的框架?

3.為何需要 Vitess

網站最初只有一個資料庫實例。隨著網站的發展,為了滿足日益增長的 QPS(每秒查詢次數)需求,開發人員不得不對資料庫進行水平擴展。

3.1 主-從副本

副本會加入到主資料庫實例。讀取請求會被路由到主資料庫和副本上,以減少主資料庫的負載。新增副本有助於緩解瓶頸,增加讀取的吞吐量,並增加系統的持久性。

主節點處理寫入的流量,主節點和副本節點同時處理讀取流量。

YouTube 是如何保存巨量影片檔案的?

但是,在這種場景中,有可能會從副本中讀取到陳舊的資料。如果在主節點將資訊更新到副本之前,一個請求讀取了副本的數據,那麼觀看者就會得到陳舊的數據。

此時,主節點和副本節點的資料是不一致的。在這種情況下,不一致的資料是主節點和副本節點上特定影片的觀看次數。

其實,這完全沒有問題。觀眾不會介意觀看次數上略微有點不一致,對吧?更重要的是,影片能夠在他們的瀏覽器中渲染出來。

主節點和副本節點之間的資料最終會是一致的。

因此,工程師們覺得非常開心,觀眾們也非常開心。隨著副本的引入,事情進展順利。

網站繼續受到歡迎,QPS 繼續上升。主-從副本策略現在很難跟上網站流量的增長了。

那現在該怎麼辦?

3.2 分片

下一個策略就是對資料庫進行分片(shard)。分片是除了主-從副本、主-主副本、聯盟和反範式化(de-normalization) 之外,擴展關係型資料庫的方式之一。

資料庫分片並不是一個簡單的過程。它大大增加了系統的複雜性,並使得管理更加困難。

但是,資料庫必須要進行分片,以滿足 QPS 的成長。在開發人員將資料庫分片後,資料會被分散到多台機器上。這增加了系統寫入的吞吐量。現在,不再是只有一個主實例處理寫入,寫入操作可以在多台分片的機器上進行。

同時,每台機器都創建了單獨的副本,以實現冗餘和吞吐。

該平台的受歡迎程度持續上升,大量的數據被內容創作者不斷添加到資料庫中。

為了防止機器故障或外部未知事件造成的資料遺失或服務不可用,此時需要在系統中新增災難管理的功能了。

3.3 災難管理

災難管理指的是面臨停電和自然災害(如地震、火災)時的緊急措施。它需要進行冗餘,並將用戶資料備份到世界不同地理區域的資料中心。遺失使用者資料或服務不可用是不允許的。

在世界範圍內擁有多個資料中心也有助於 YouTube 減少系統延遲,因為使用者請求會被路由到最近的資料中心,而不是路由到位於不同大陸的原始伺服器。

現在,你可以想像基礎架構會變得多複雜。

經常會有未經最佳化的全表掃描導致整個資料庫癱瘓。資料庫必須進行保護,防止受到不良查詢的影響。所有的伺服器都需要被追蹤以確保服務的高效性。

開發人員需要有一個系統來抽象系統的複雜性,能夠讓他們解決可擴展性的挑戰,並以最小的成本管理該系統。這一切促使 YouTube 開發了 Vitess。

4.Vitess:用於水平擴展 MySQL 資料庫叢集的系統

Vitess是一個運行於 MySQL 之上的資料庫叢集系統,能夠使 MySQL 進行水平擴展。它有內建的分片特性,能夠讓開發人員擴展資料庫,而不必在應用中添加任何的分片邏輯。這類似於 NoSQL 的做法。

YouTube 是如何保存巨量影片檔案的?

Vitess 也會自動處理故障轉移和備份。它能夠管理伺服器,透過智慧重寫資源密集的查詢和實現快取來提高資料庫效能。除了 YouTube,該框架也被其他業界的知名廠商使用,如 GitHub、Slack、Square、New Relic 等。

當你需要 ACID 事務和強一致性的支持,同時又希望像 NoSQL 資料庫一樣快速擴展關係型資料庫時,Vitess 就會大顯身手。

在 YouTube,每個 MySQL 連線都有 2MB 的開銷。每一個連線都有可計算出來的成本,而且隨著連線數量的增加,還必須增加額外的 RAM。

透過基於 Go 程式語言並發支援建置的連接池,Vitess 能夠以很低的成本管理這些連接。它使用 Zookeeper 來管理叢集,並使其保持最新狀態。

5.部署到雲端

Vitess 是雲端原生的,很適合雲端中部署,因為就像雲端的模式一樣,容量是逐步新增到資料庫的。它可以作為一個 Kubernetes 感知(Kubernetes-aware)的雲端原生分散式資料庫運作。

在 YouTube,Vitess 在容器化環境中運行,並使用 Kubernetes 作為容器編排工具。

在現今的運算時代,每個大規模的服務都在分散式環境的雲端中運作。在雲端運行服務有許多好處。

Google Cloud Platform是一套雲端運算服務,它的基礎設施與Google內部的終端用戶產品(如Google搜尋和 YouTube)所使用的基礎設施是相同的。

每個大規模的線上服務都有一個多樣化(polyglot)的持久性架構,因為某一種資料模型,無論是關係型或 NoSQL,都無法處理服務的所有使用情境。

在為本文展開的研究中,我無法找到YouTube 所使用的具體谷歌雲端資料庫的清單,但我非常肯定它會使用GCP 的特有產品,如穀歌 Cloud Spanner、Cloud SQL、Cloud Datastore 、Memorystore 等來運作服務的不同特性。

這篇文章詳細介紹了其他Google服務所使用的資料庫,如Google Adwords、Google Finance、Google Trends等。

6.CDN

YouTube 使用Google的全球網路進行低延遲、低成本的內容傳輸。借助全球分佈的 POP 邊緣點,它能夠使客戶能夠更快地獲取數據,而不必從原始伺服器獲取。

所以,到此為止,我已經談到了 YouTube 使用的資料庫、框架和技術。現在,該談一談儲存問題了。

YouTube 是如何儲存如此龐大的資料量的呢(每分鐘上傳 500 小時的影片內容)?

7.資料儲存:YouTube 是如何儲存如此龐大的資料量的呢?

影片會儲存在Google資料中心的硬碟中。這些資料由 Google File System 和 BigTable 管理。

GFS Google File System是Google開發的分散式檔案系統,用於管理分散式環境中的大規模資料。

BigTable是一個建立在 Google File System 上的低延遲分散式資料儲存系統,用於處理分佈在成千上萬台機器上的 PB 層級的資料。 60 多個谷歌產品都使用了它。

因此,影片被儲存在硬碟中。關係、元資料、使用者偏好、個人資料資訊、帳戶設定、從儲存中取得影片所需的相關資料等都儲存在 MySQL 中。

YouTube 是如何保存巨量影片檔案的?

7.1 即插即用的商用伺服器

Google資料中心擁有同質化的硬件,軟體則是內部構建的,管理成千上萬的獨立伺服器叢集。

Google部署的伺服器,能夠增強資料中心的儲存能力,它們都是商用伺服器(commodity server),也被稱為商用現成的伺服器(commercial off-the-shelf server)。這些伺服器價格低廉,可廣泛使用和大量購買,並能以最小的成本和代價替換或配置資料中心的相同硬體。

隨著對額外儲存需求的增加,新的商用伺服器會被插入到系統中。

出現問題後,商用伺服器通常會直接被替換,而不是進行修理。它們不是客製化的,與運行客製化的伺服器相比,使用它們能夠使企業在很大程度上減少基礎設施成本。

7.2 為資料中心設計的儲存磁碟

YouTube 每天需要超過一個 PB 的新儲存空間。旋轉硬碟驅動器是主要的儲存介質,因為其成本低,可靠性高。

SSD 固態硬碟比旋轉磁碟具有更高的效能,因為它們是基於半導體的,但大規模使用固態硬碟並不划算。

它們相當昂貴,也容易隨著時間的推移逐漸失去資料。這使得它們不適合用於歸檔資料的儲存。

另外,Google正在開發一個適用於大規模資料中心的新磁碟系列。

有五個關鍵指標可用來判斷為資料儲存而建構的硬體的品質:

  • 硬體應該有能力支援秒級的高速度輸入輸出操作。
  • 它應該符合組織規定的安全標準。
  • 與普通儲存硬體相比,它應該有更高的儲存容量。
  • 硬體採購成本、電力成本和維護費用應該都是可以接受的。
  • 磁碟應該是可靠的,並且延遲是穩定的。

以上是YouTube 是如何保存巨量影片檔案的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:51CTO.COM。如有侵權,請聯絡admin@php.cn刪除
Python vs. C:了解關鍵差異Python vs. C:了解關鍵差異Apr 21, 2025 am 12:18 AM

Python和C 各有優勢,選擇應基於項目需求。 1)Python適合快速開發和數據處理,因其簡潔語法和動態類型。 2)C 適用於高性能和系統編程,因其靜態類型和手動內存管理。

Python vs.C:您的項目選擇哪種語言?Python vs.C:您的項目選擇哪種語言?Apr 21, 2025 am 12:17 AM

選擇Python還是C 取決於項目需求:1)如果需要快速開發、數據處理和原型設計,選擇Python;2)如果需要高性能、低延遲和接近硬件的控制,選擇C 。

達到python目標:每天2小時的力量達到python目標:每天2小時的力量Apr 20, 2025 am 12:21 AM

通過每天投入2小時的Python學習,可以有效提升編程技能。 1.學習新知識:閱讀文檔或觀看教程。 2.實踐:編寫代碼和完成練習。 3.複習:鞏固所學內容。 4.項目實踐:應用所學於實際項目中。這樣的結構化學習計劃能幫助你係統掌握Python並實現職業目標。

最大化2小時:有效的Python學習策略最大化2小時:有效的Python學習策略Apr 20, 2025 am 12:20 AM

在兩小時內高效學習Python的方法包括:1.回顧基礎知識,確保熟悉Python的安裝和基本語法;2.理解Python的核心概念,如變量、列表、函數等;3.通過使用示例掌握基本和高級用法;4.學習常見錯誤與調試技巧;5.應用性能優化與最佳實踐,如使用列表推導式和遵循PEP8風格指南。

在Python和C之間進行選擇:適合您的語言在Python和C之間進行選擇:適合您的語言Apr 20, 2025 am 12:20 AM

Python適合初學者和數據科學,C 適用於系統編程和遊戲開發。 1.Python簡潔易用,適用於數據科學和Web開發。 2.C 提供高性能和控制力,適用於遊戲開發和系統編程。選擇應基於項目需求和個人興趣。

Python與C:編程語言的比較分析Python與C:編程語言的比較分析Apr 20, 2025 am 12:14 AM

Python更適合數據科學和快速開發,C 更適合高性能和系統編程。 1.Python語法簡潔,易於學習,適用於數據處理和科學計算。 2.C 語法複雜,但性能優越,常用於遊戲開發和系統編程。

每天2小時:Python學習的潛力每天2小時:Python學習的潛力Apr 20, 2025 am 12:14 AM

每天投入兩小時學習Python是可行的。 1.學習新知識:用一小時學習新概念,如列表和字典。 2.實踐和練習:用一小時進行編程練習,如編寫小程序。通過合理規劃和堅持不懈,你可以在短時間內掌握Python的核心概念。

Python與C:學習曲線和易用性Python與C:學習曲線和易用性Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境