吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

YouTube數據庫如何保存巨量視頻文件?

jf_ro2CN3Fa ? 來源:芋道源碼 ? 2023-01-08 11:23 ? 次閱讀

YouTube 是僅次于谷歌的第二大熱門網站。在 2019 年 5 月,每分鐘會有超過 500 小時的視頻內容上傳到該平臺。

該視頻共享平臺有超過 20 億的用戶,每天有超過10億小時的視頻被播放,產生數十億的瀏覽量。這些都是令人難以置信的數字。

本文會對 YouTube 使用的數據庫和后端數據基礎設施進行深入講解,它們使得該視頻平臺能夠存儲如此巨量的數據,并能擴展至數十億的用戶。

那我們就開始吧。

1.引言

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

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

兩名系統管理員

兩名可擴展性軟件架構師

兩名特性開發人員

兩名網絡工程師

一名 DBA

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/ruoyi-vue-pro

視頻教程:https://doc.iocoder.cn/video/

2.后端基礎設施

YouTube 的后端微服務是由Python、數據庫、硬件、Java(使用了Guice框架)和 Go 編寫的。用戶界面是使用JavaScript編寫的。

主要的數據庫是由 Vitess 支撐的 MySQL,Vitess是一個數據庫集群系統,用于 MySQL 的水平擴展。另外,使用 Memcache 實現緩存并使用 Zookeeper 進行節點的協調。

64e97e7a-8ef9-11ed-bfe3-dac502259ad0.jpg

流行的視頻通過 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 環境中面臨的問題是什么,使他們在此基礎上實現了一個額外的框架?

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

項目地址:https://github.com/YunaiV/yudao-cloud

視頻教程:https://doc.iocoder.cn/video/

3.為何需要 Vitess

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

3.1 主-從副本

副本會添加到主數據庫實例中。讀取請求會被路由到主數據庫和副本上,以減少主數據庫的負載。添加副本有助于緩解瓶頸,增加讀取的吞吐量,并增加系統的持久性。

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

65057b5c-8ef9-11ed-bfe3-dac502259ad0.jpg

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

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

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

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

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

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

那現在該怎么辦?

3.2 分片

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

數據庫分片并不是一個簡單的過程。它大大增加了系統的復雜性,并使得管理更加困難。

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

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

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

為了防止機器故障或者外部未知事件造成的數據丟失或服務不可用,此時需要在系統中添加災難管理的功能了。

3.3 災難管理

災難管理指的是在面臨停電和自然災害(如地震、火災)時的應急措施。它需要進行冗余,并將用戶數據備份到世界不同地理區域的數據中心。丟失用戶數據或服務不可用是不允許的。

在世界范圍內擁有多個數據中心也有助于 YouTube 減少系統延遲,因為用戶請求會被路由到最近的數據中心,而不是路由到位于不同大陸的原始服務器。

現在,你可以想象基礎設施會變得多復雜。

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

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

4.Vitess:用于水平擴展 MySQL 數據庫集群的系統

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

651d133e-8ef9-11ed-bfe3-dac502259ad0.jpg

Vitess 架構,圖片來源

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是一套云計算服務,它的基礎設施與谷歌內部的終端用戶產品(如谷歌搜索和 YouTube)所用的基礎設施是相同的。

每個大規模的在線服務都有一個多樣化(polyglot)的持久性架構,因為某一種數據模型,無論是關系型還是 NoSQL,都無法處理服務的所有使用場景。

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

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

6.CDN

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

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

YouTube 是如何存儲如此巨大的數據量的呢(每分鐘上傳 500 小時的視頻內容)?

7.數據存儲:YouTube 是如何存儲如此巨大的數據量的呢?

視頻會存儲在谷歌數據中心的硬盤中。這些數據由 Google File System 和 BigTable 管理。

GFS Google File System是谷歌開發的一個分布式文件系統,用于管理分布式環境中的大規模數據。

BigTable是一個建立在 Google File System 上的低延遲分布式數據存儲系統,用于處理分布在成千上萬臺機器上的 PB 級別的數據。60 多個谷歌產品都使用了它。

因此,視頻被存儲在硬盤中。關系、元數據、用戶偏好、個人資料信息、賬戶設置、從存儲中獲取視頻所需的相關數據等都存儲在 MySQL 中。

653d8236-8ef9-11ed-bfe3-dac502259ad0.jpg

7.1 即插即用的商用服務器

谷歌數據中心擁有同質化的硬件,軟件則是內部構建的,管理成千上萬的獨立服務器集群。

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

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

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

7.2 為數據中心設計的存儲磁盤

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

SSD 固態硬盤比旋轉磁盤具有更高的性能,因為它們是基于半導體的,但大規模使用固態硬盤并不劃算。

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

另外,谷歌正在開發一個適用于大規模數據中心的新磁盤系列。

有五個關鍵指標可用來判斷為數據存儲而構建的硬件的質量:

硬件應該有能力支持秒級的高速度輸入輸出操作。

它應該符合組織規定的安全標準。

與普通存儲硬件相比,它應該有更高的存儲容量。

硬件采購成本、電力成本和維護費用應該都是可以接受的。

磁盤應該是可靠的,并且延遲是穩定的。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據存儲
    +關注

    關注

    5

    文章

    983

    瀏覽量

    51063
  • 數據庫
    +關注

    關注

    7

    文章

    3848

    瀏覽量

    64687
  • Youtube
    +關注

    關注

    0

    文章

    143

    瀏覽量

    15668

原文標題:YouTube 數據庫如何保存巨量視頻文件?

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    SqlServer數據恢復—SqlServer數據庫數據恢復案例

    一塊硬盤上存放的SqlServer數據庫,windows server操作系統+NTFS文件系統。由于誤操作導致分區損壞,需要恢復硬盤里的SqlServer數據庫數據
    的頭像 發表于 01-09 11:15 ?92次閱讀
    SqlServer<b class='flag-5'>數據</b>恢復—SqlServer<b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復案例

    數據庫是哪種數據庫類型?

    數據庫是一種部署在虛擬計算環境中的數據庫,它融合了云計算的彈性和可擴展性,為用戶提供高效、靈活的數據庫服務。云數據庫主要分為兩大類:關系型數據庫
    的頭像 發表于 01-07 10:22 ?142次閱讀

    數據庫加密辦法

    ,當我們聊到數據加密的時候,可以從這些角度入手來提高數據的安全性。 TDE手段 TDE也就是透明數據加密,是一種在數據庫級別進行加密的技術。它對整個
    的頭像 發表于 12-24 09:47 ?154次閱讀

    如何使用cmp進行數據庫管理的技巧

    使用 cmp 命令進行數據庫管理可能不是最直觀的方法,因為 cmp 通常用于比較兩個文件是否相同。然而,如果你的意圖是使用 cmp 來檢查數據庫文件或備份文件的一致性,以下是一些技巧和
    的頭像 發表于 12-17 09:31 ?180次閱讀

    數據庫數據恢復—MYSQL數據庫ibdata1文件損壞的數據恢復案例

    mysql數據庫故障: mysql數據庫文件ibdata1、MYI、MYD損壞。 故障表現:1、數據庫無法進行查詢等操作;2、使用mysqlcheck和myisamchk無法修復數據庫
    的頭像 發表于 12-09 11:05 ?224次閱讀

    數據庫數據恢復—通過拼接數據庫碎片恢復SQLserver數據庫

    一個運行在存儲上的SQLServer數據庫,有1000多個文件,大小幾十TB。數據庫每10天生成一個NDF文件,每個NDF幾百GB大小。數據庫
    的頭像 發表于 10-31 13:21 ?336次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—通過拼接<b class='flag-5'>數據庫</b>碎片恢復SQLserver<b class='flag-5'>數據庫</b>

    Oracle數據恢復—異常斷電后Oracle數據庫報錯的數據恢復案例

    Oracle數據庫的在線文件,需要恢復zxfg用戶的數據。 Oracle數據庫恢復方案: 檢測數據庫故障;嘗試掛起并修復
    的頭像 發表于 09-30 13:31 ?386次閱讀
    Oracle<b class='flag-5'>數據</b>恢復—異常斷電后Oracle<b class='flag-5'>數據庫</b>啟<b class='flag-5'>庫</b>報錯的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—Oracle數據庫文件system01.dbf損壞的數據恢復案例

    打開oracle數據庫報錯“system01.dbf需要更多的恢復來保持一致性,數據庫無法打開”。
    的頭像 發表于 09-21 14:25 ?523次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—Oracle<b class='flag-5'>數據庫文件</b>system01.dbf損壞的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—SQL Server數據庫出現823錯誤的數據恢復案例

    SQL Server數據庫故障: SQL Server附加數據庫出現錯誤823,附加數據庫失敗。數據庫沒有備份,無法通過備份恢復數據庫
    的頭像 發表于 09-20 11:46 ?410次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—SQL Server<b class='flag-5'>數據庫</b>出現823錯誤的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—SqlServer數據庫底層File Record被截斷為0的數據恢復案例

    SQL Server數據庫數據無法被讀取。 經過數據庫數據恢復工程師的初步檢測,發現SQL Server數據庫文件無法被讀取的原因是底層
    的頭像 發表于 07-26 11:27 ?449次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—SqlServer<b class='flag-5'>數據庫</b>底層File Record被截斷為0的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—SQL Server數據庫所在分區空間不足報錯的數據恢復案例

    Server數據庫故障: 存放SQL Server數據庫的D盤分區容量不足,管理員在E盤中生成了一個.ndf的文件并且將數據庫路徑指向E盤繼續使用。
    的頭像 發表于 07-10 13:54 ?579次閱讀

    數據庫數據恢復—raid5陣列上層Sql Server數據庫數據恢復案例

    數據庫故障: 數據庫文件丟失,主要涉及3個數據庫,數千張表。數據庫文件丟失原因未知,不能確定丟失的數據庫文件的存放位置。
    的頭像 發表于 05-08 11:43 ?579次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—raid5陣列上層Sql Server<b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—ndf文件大小變為0KB的數據恢復案例

    存儲設備損壞導致存儲中SQL Server數據庫崩潰。對數據庫文件進行恢復后,用戶發現有4個ndf文件的大小變為0KB。該SQL Server數據庫每10天生成一個大小相同的NDF
    的頭像 發表于 05-07 11:19 ?454次閱讀

    MongoDB數據恢復—MongoDB數據庫文件損壞的數據恢復案例

    的情況下,將數據庫文件拷貝到其他分區。拷貝完成后將原MongoDB數據庫所在分區進行了格式化操作,然后將數據庫文件拷回原分區,重新啟動MongoDB服務,服務無法啟動。
    的頭像 發表于 04-23 14:48 ?456次閱讀
    MongoDB<b class='flag-5'>數據</b>恢復—MongoDB<b class='flag-5'>數據庫文件</b>損壞的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—Sql Server數據庫文件丟失的數據恢復案例

    。存儲空間LUN劃分了兩個邏輯分區。 服務器故障&初檢: 由于未知原因,Sql Server數據庫文件丟失,丟失數據涉及到3個,表的數量有3000左右。數據庫文件丟失原因還沒
    的頭像 發表于 04-11 15:38 ?965次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—Sql Server<b class='flag-5'>數據庫文件</b>丟失的<b class='flag-5'>數據</b>恢復案例
    巴黎人百家乐的玩法技巧和规则| 澳门百家乐真人斗地主| 网络百家乐玩法| 大发888娱乐城下载lm0| 老虎机作弊器| 博彩e天上人间| 百家乐官网视频游戏道具| 摩纳哥百家乐官网的玩法技巧和规则| 百家乐博彩金| 大发888官网 官方| 亚洲百家乐官网新全讯网| 百家乐官网官方网站| 全讯网直播| 真人百家乐官网开户须知| 988百家乐官网娱乐| 北京百家乐网上投注| 百家乐博彩通网| 济州岛娱乐场cns| 新锦江百家乐官网娱乐网| 粤港澳百家乐娱乐平台| 516棋牌游戏补丁| 百家乐官网稳赚秘籍| 24山入宅择日| 大发888手机登录平台| 诚信百家乐官网平台| 平注打百家乐的方法| 安塞县| 网上百家乐官网解密| 休闲百家乐的玩法技巧和规则| 双桥区| 百家乐输了100万| 赛马会娱乐城| 老牌百家乐娱乐城| 银河国际娱乐城| 利来百家乐官网娱乐| 大发888登陆| 汇丰百家乐官网的玩法技巧和规则| 威尼斯人娱乐平台官网| 百盛百家乐官网软件| 百家乐发牌| 安阳百家乐官网赌博|