您好,登錄后才能下訂單哦!
這篇文章主要介紹“YouTube是怎么保存巨量視頻文件的”,在日常操作中,相信很多人在YouTube是怎么保存巨量視頻文件的問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”YouTube是怎么保存巨量視頻文件的”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
YouTube 的旅程開始于 2005 年。隨著這家由風險資本資助的技術初創公司不斷取得成功,它于 2006 年 11 月被谷歌以 16.5 億美元收購。
在被谷歌收購之前,它們的團隊由以下人員組成:
兩名系統管理員
兩名可擴展性軟件架構師
兩名特性開發人員
兩名網絡工程師
一名 DBA
YouTube 的后端微服務是由Python、數據庫、硬件、Java(使用了Guice框架)和 Go 編寫的。用戶界面是使用JavaScript編寫的。
主要的數據庫是由 Vitess 支撐的 MySQL,Vitess是一個數據庫集群系統,用于 MySQL 的水平擴展。另外,使用 Memcache 實現緩存并使用 Zookeeper 進行節點的協調。
流行的視頻通過 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 環境中面臨的問題是什么,使他們在此基礎上實現了一個額外的框架?
網站最初只有一個數據庫實例。隨著網站的發展,為了滿足日益增長的 QPS(每秒查詢次數)需求,開發人員不得不對數據庫進行水平擴展。
副本會添加到主數據庫實例中。讀取請求會被路由到主數據庫和副本上,以減少主數據庫的負載。添加副本有助于緩解瓶頸,增加讀取的吞吐量,并增加系統的持久性。
主節點處理寫入的流量,主節點和副本節點同時處理讀取流量。
但是,在這種場景中,有可能會從副本中讀取到陳舊的數據。如果在主節點將信息更新到副本之前,一個請求讀取了副本的數據,那么觀看者就會得到陳舊的數據。
此時,主節點和副本節點的數據是不一致的。在這種情況下,不一致的數據是主節點和副本節點上特定視頻的觀看次數。
其實,這完全沒有問題。觀眾不會介意觀看次數上略微有點不一致,對吧?更重要的是,視頻能夠在他們的瀏覽器中渲染出來。
主節點和副本節點之間的數據最終會是一致的。
因此,工程師們覺得非常開心,觀眾們也非常開心。隨著副本的引入,事情進展順利。
網站繼續受到歡迎,QPS 繼續上升。主-從副本策略現在很難跟上網站流量的增長了。
那現在該怎么辦?
下一個策略就是對數據庫進行分片(shard)。分片是除了主-從副本、主-主副本、聯盟和反范式化(de-normalization) 之外,擴展關系型數據庫的方式之一。
數據庫分片并不是一個簡單的過程。它大大增加了系統的復雜性,并使得管理更加困難。
但是,數據庫必須要進行分片,以滿足 QPS 的增長。在開發人員將數據庫分片后,數據會被分散到多臺機器上。這增加了系統寫入的吞吐量。現在,不再是只有一個主實例處理寫入,寫入操作可以在多臺分片的機器上進行。
同時,每臺機器都創建了單獨的副本,以實現冗余和吞吐。
該平臺的受歡迎程度持續上升,大量的數據被內容創作者不斷添加到數據庫中。
為了防止機器故障或者外部未知事件造成的數據丟失或服務不可用,此時需要在系統中添加災難管理的功能了。
災難管理指的是在面臨停電和自然災害(如地震、火災)時的應急措施。它需要進行冗余,并將用戶數據備份到世界不同地理區域的數據中心。丟失用戶數據或服務不可用是不允許的。
在世界范圍內擁有多個數據中心也有助于 YouTube 減少系統延遲,因為用戶請求會被路由到最近的數據中心,而不是路由到位于不同大陸的原始服務器。
現在,你可以想象基礎設施會變得多復雜。
經常會有未經優化的全表掃描導致整個數據庫癱瘓。數據庫必須進行保護,防止受到不良查詢的影響。所有的服務器都需要被跟蹤以確保服務的高效性。
開發人員需要有一個系統來抽象系統的復雜性,能夠讓他們解決可擴展性的挑戰,并以最小的成本管理該系統。這一切促使 YouTube 開發了 Vitess。
Vitess是一個運行于 MySQL 之上的數據庫集群系統,能夠使 MySQL 進行水平擴展。它有內置的分片特性,能夠讓開發人員擴展數據庫,而不必在應用中添加任何的分片邏輯。這類似于 NoSQL 的做法。
Vitess 還會自動處理故障轉移和備份。它能夠管理服務器,通過智能重寫資源密集型的查詢和實現緩存來提高數據庫性能。除了 YouTube,該框架還被業界的其他知名廠商使用,如 GitHub、Slack、Square、New Relic 等。
當你需要 ACID 事務和強一致性的支持,同時又希望像 NoSQL 數據庫一樣快速擴展關系型數據庫時,Vitess 就會大顯身手。
在 YouTube,每個 MySQL 連接都有 2MB 的開銷。每一個連接都有可計算出來的成本,而且隨著連接數量的增加,還必須增加額外的 RAM。
通過基于 Go 編程語言并發支持構建的連接池,Vitess 能夠以很低的成本管理這些連接。它使用 Zookeeper 來管理集群,并使其保持最新狀態。
Vitess 是云原生的,很適合云中部署,因為就像云的模式一樣,容量是逐步添加到數據庫的。它可以作為一個 Kubernetes 感知(Kubernetes-aware)的云原生分布式數據庫運行。
在 YouTube,Vitess 在容器化環境中運行,并使用 Kubernetes 作為容器編排工具。
在如今的計算時代,每個大規模的服務都在分布式環境的云中運行。在云中運行服務有許多好處。
Google Cloud Platform是一套云計算服務,它的基礎設施與谷歌內部的終端用戶產品(如谷歌搜索和 YouTube)所用的基礎設施是相同的。
每個大規模的在線服務都有一個多樣化(polyglot)的持久性架構,因為某一種數據模型,無論是關系型還是 NoSQL,都無法處理服務的所有使用場景。
在為本文展開的研究中,我無法找到 YouTube 所使用的具體谷歌云數據庫的清單,但我非常肯定它會使用 GCP 的特有產品,如 Google Cloud Spanner、Cloud SQL、Cloud Datastore、Memorystore 等來運行服務的不同特性。
這篇文章詳細介紹了其他谷歌服務所使用的數據庫,如Google Adwords、Google Finance、Google Trends等。
YouTube 使用谷歌的全球網絡進行低延遲、低成本的內容傳輸。借助全球分布的 POP 邊緣點,它能夠使客戶能夠更快地獲取數據,而不必從原始服務器獲取。
所以,到此為止,我已經談到了 YouTube 使用的數據庫、框架和技術。現在,該談一談存儲問題了。
YouTube 是如何存儲如此巨大的數據量的呢(每分鐘上傳 500 小時的視頻內容)?
視頻會存儲在谷歌數據中心的硬盤中。這些數據由 Google File System 和 BigTable 管理。
GFS Google File System是谷歌開發的一個分布式文件系統,用于管理分布式環境中的大規模數據。
BigTable是一個建立在 Google File System 上的低延遲分布式數據存儲系統,用于處理分布在成千上萬臺機器上的 PB 級別的數據。60 多個谷歌產品都使用了它。
因此,視頻被存儲在硬盤中。關系、元數據、用戶偏好、個人資料信息、賬戶設置、從存儲中獲取視頻所需的相關數據等都存儲在 MySQL 中。
谷歌數據中心擁有同質化的硬件,軟件則是內部構建的,管理成千上萬的獨立服務器集群。
谷歌部署的服務器,能夠增強數據中心的存儲能力,它們都是商用服務器(commodity server),也被稱為商用現成的服務器(commercial off-the-shelf server)。這些服務器價格低廉,可廣泛使用和大量購買,并能以最小的成本和代價替換或配置數據中心的相同硬件。
隨著對額外存儲需求的增加,新的商用服務器會被插入到系統中。
出現問題后,商用服務器通常會被直接替換,而不是進行修理。它們不是定制的,與運行定制的服務器相比,使用它們能夠使企業在很大程度上減少基礎設施成本。
YouTube 每天都需要超過一個 PB 的新存儲。旋轉硬盤驅動器是主要的存儲介質,因為其成本低,可靠性高。
SSD 固態硬盤比旋轉磁盤具有更高的性能,因為它們是基于半導體的,但大規模使用固態硬盤并不劃算。
它們相當昂貴,也容易隨著時間的推移逐漸丟失數據。這使得它們不適合用于歸檔數據的存儲。
另外,谷歌正在開發一個適用于大規模數據中心的新磁盤系列。
有五個關鍵指標可用來判斷為數據存儲而構建的硬件的質量:
硬件應該有能力支持秒級的高速度輸入輸出操作。
它應該符合組織規定的安全標準。
與普通存儲硬件相比,它應該有更高的存儲容量。
硬件采購成本、電力成本和維護費用應該都是可以接受的。
磁盤應該是可靠的,并且延遲是穩定的。
到此,關于“YouTube是怎么保存巨量視頻文件的”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。