溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

YouTube是怎么保存巨量視頻文件的

發(fā)布時(shí)間:2023-04-10 11:31:55 來(lái)源:億速云 閱讀:114 作者:iii 欄目:編程語(yǔ)言

這篇文章主要介紹“YouTube是怎么保存巨量視頻文件的”,在日常操作中,相信很多人在YouTube是怎么保存巨量視頻文件的問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”YouTube是怎么保存巨量視頻文件的”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

1.引言

YouTube 的旅程開(kāi)始于 2005 年。隨著這家由風(fēng)險(xiǎn)資本資助的技術(shù)初創(chuàng)公司不斷取得成功,它于 2006 年 11 月被谷歌以 16.5 億美元收購(gòu)。

在被谷歌收購(gòu)之前,它們的團(tuán)隊(duì)由以下人員組成:

  • 兩名系統(tǒng)管理員

  • 兩名可擴(kuò)展性軟件架構(gòu)師

  • 兩名特性開(kāi)發(fā)人員

  • 兩名網(wǎng)絡(luò)工程師

  • 一名 DBA

2.后端基礎(chǔ)設(shè)施

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

主要的數(shù)據(jù)庫(kù)是由 Vitess 支撐的 MySQL,Vitess是一個(gè)數(shù)據(jù)庫(kù)集群系統(tǒng),用于 MySQL 的水平擴(kuò)展。另外,使用 Memcache 實(shí)現(xiàn)緩存并使用 Zookeeper 進(jìn)行節(jié)點(diǎn)的協(xié)調(diào)。

YouTube是怎么保存巨量視頻文件的

流行的視頻通過(guò) CDN 來(lái)提供,而一般的、較少播放的視頻則從數(shù)據(jù)庫(kù)中獲取。

每個(gè)視頻在上傳的時(shí)候,都會(huì)賦予一個(gè)唯一的標(biāo)識(shí)符并且會(huì)由一個(gè)批處理 job 進(jìn)行處理,該 job 會(huì)運(yùn)行多個(gè)自動(dòng)化的過(guò)程,比如生成縮略圖、元數(shù)據(jù)、視頻腳本、編碼、設(shè)置貨幣化狀態(tài)等。

VP9 & H.264/MPEG-4 AVC 高級(jí)視頻編碼(Advanced Video Coding codecs)會(huì)用于視頻壓縮,它能夠使用其他編碼器一半的帶寬來(lái)編碼 HD 和 4K 質(zhì)量的視頻。

視頻流則是使用基于HTTP協(xié)議的動(dòng)態(tài)自適應(yīng)流(Dynamic Adaptive Streaming),這是一種自適應(yīng)比特率的流媒體技術(shù),能夠從傳統(tǒng)的 HTTP Web 服務(wù)器上實(shí)現(xiàn)高質(zhì)量的視頻流。通過(guò)這種技術(shù),內(nèi)容可以按照不同的比特率提供給觀眾。YouTube 客戶端會(huì)根據(jù)觀看者的互聯(lián)網(wǎng)連接速度自動(dòng)適應(yīng)視頻渲染,從而盡可能減少緩沖時(shí)間。

我曾經(jīng)在一篇專門(mén)的文章中討論過(guò) YouTube 的視頻轉(zhuǎn)碼過(guò)程,參見(jiàn)“YouTube是如何以低延遲提供高質(zhì)量視頻的”。

所以,這里對(duì)平臺(tái)的后端技術(shù)有一個(gè)快速的介紹。YouTube 主要使用的數(shù)據(jù)庫(kù)是 MySQL?,F(xiàn)在,我們了解一下 YouTube 的工程團(tuán)隊(duì)為什么覺(jué)得有必要編寫(xiě) Vitess?他們?cè)谧畛醯?MySQL 環(huán)境中面臨的問(wèn)題是什么,使他們?cè)诖嘶A(chǔ)上實(shí)現(xiàn)了一個(gè)額外的框架?

3.為何需要 Vitess

網(wǎng)站最初只有一個(gè)數(shù)據(jù)庫(kù)實(shí)例。隨著網(wǎng)站的發(fā)展,為了滿足日益增長(zhǎng)的 QPS(每秒查詢次數(shù))需求,開(kāi)發(fā)人員不得不對(duì)數(shù)據(jù)庫(kù)進(jìn)行水平擴(kuò)展。

3.1 主-從副本

副本會(huì)添加到主數(shù)據(jù)庫(kù)實(shí)例中。讀取請(qǐng)求會(huì)被路由到主數(shù)據(jù)庫(kù)和副本上,以減少主數(shù)據(jù)庫(kù)的負(fù)載。添加副本有助于緩解瓶頸,增加讀取的吞吐量,并增加系統(tǒng)的持久性。

主節(jié)點(diǎn)處理寫(xiě)入的流量,主節(jié)點(diǎn)和副本節(jié)點(diǎn)同時(shí)處理讀取流量。

YouTube是怎么保存巨量視頻文件的

但是,在這種場(chǎng)景中,有可能會(huì)從副本中讀取到陳舊的數(shù)據(jù)。如果在主節(jié)點(diǎn)將信息更新到副本之前,一個(gè)請(qǐng)求讀取了副本的數(shù)據(jù),那么觀看者就會(huì)得到陳舊的數(shù)據(jù)。

此時(shí),主節(jié)點(diǎn)和副本節(jié)點(diǎn)的數(shù)據(jù)是不一致的。在這種情況下,不一致的數(shù)據(jù)是主節(jié)點(diǎn)和副本節(jié)點(diǎn)上特定視頻的觀看次數(shù)。

其實(shí),這完全沒(méi)有問(wèn)題。觀眾不會(huì)介意觀看次數(shù)上略微有點(diǎn)不一致,對(duì)吧?更重要的是,視頻能夠在他們的瀏覽器中渲染出來(lái)。

主節(jié)點(diǎn)和副本節(jié)點(diǎn)之間的數(shù)據(jù)最終會(huì)是一致的。

因此,工程師們覺(jué)得非常開(kāi)心,觀眾們也非常開(kāi)心。隨著副本的引入,事情進(jìn)展順利。

網(wǎng)站繼續(xù)受到歡迎,QPS 繼續(xù)上升。主-從副本策略現(xiàn)在很難跟上網(wǎng)站流量的增長(zhǎng)了。

那現(xiàn)在該怎么辦?

3.2 分片

下一個(gè)策略就是對(duì)數(shù)據(jù)庫(kù)進(jìn)行分片(shard)。分片是除了主-從副本、主-主副本、聯(lián)盟和反范式化(de-normalization) 之外,擴(kuò)展關(guān)系型數(shù)據(jù)庫(kù)的方式之一。

數(shù)據(jù)庫(kù)分片并不是一個(gè)簡(jiǎn)單的過(guò)程。它大大增加了系統(tǒng)的復(fù)雜性,并使得管理更加困難。

但是,數(shù)據(jù)庫(kù)必須要進(jìn)行分片,以滿足 QPS 的增長(zhǎng)。在開(kāi)發(fā)人員將數(shù)據(jù)庫(kù)分片后,數(shù)據(jù)會(huì)被分散到多臺(tái)機(jī)器上。這增加了系統(tǒng)寫(xiě)入的吞吐量。現(xiàn)在,不再是只有一個(gè)主實(shí)例處理寫(xiě)入,寫(xiě)入操作可以在多臺(tái)分片的機(jī)器上進(jìn)行。

同時(shí),每臺(tái)機(jī)器都創(chuàng)建了單獨(dú)的副本,以實(shí)現(xiàn)冗余和吞吐。

該平臺(tái)的受歡迎程度持續(xù)上升,大量的數(shù)據(jù)被內(nèi)容創(chuàng)作者不斷添加到數(shù)據(jù)庫(kù)中。

為了防止機(jī)器故障或者外部未知事件造成的數(shù)據(jù)丟失或服務(wù)不可用,此時(shí)需要在系統(tǒng)中添加災(zāi)難管理的功能了。

3.3 災(zāi)難管理

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

在世界范圍內(nèi)擁有多個(gè)數(shù)據(jù)中心也有助于 YouTube 減少系統(tǒng)延遲,因?yàn)橛脩粽?qǐng)求會(huì)被路由到最近的數(shù)據(jù)中心,而不是路由到位于不同大陸的原始服務(wù)器。

現(xiàn)在,你可以想象基礎(chǔ)設(shè)施會(huì)變得多復(fù)雜。

經(jīng)常會(huì)有未經(jīng)優(yōu)化的全表掃描導(dǎo)致整個(gè)數(shù)據(jù)庫(kù)癱瘓。數(shù)據(jù)庫(kù)必須進(jìn)行保護(hù),防止受到不良查詢的影響。所有的服務(wù)器都需要被跟蹤以確保服務(wù)的高效性。

開(kāi)發(fā)人員需要有一個(gè)系統(tǒng)來(lái)抽象系統(tǒng)的復(fù)雜性,能夠讓他們解決可擴(kuò)展性的挑戰(zhàn),并以最小的成本管理該系統(tǒng)。這一切促使 YouTube 開(kāi)發(fā)了 Vitess。

4.Vitess:用于水平擴(kuò)展 MySQL 數(shù)據(jù)庫(kù)集群的系統(tǒng)

Vitess是一個(gè)運(yùn)行于 MySQL 之上的數(shù)據(jù)庫(kù)集群系統(tǒng),能夠使 MySQL 進(jìn)行水平擴(kuò)展。它有內(nèi)置的分片特性,能夠讓開(kāi)發(fā)人員擴(kuò)展數(shù)據(jù)庫(kù),而不必在應(yīng)用中添加任何的分片邏輯。這類似于 NoSQL 的做法。

YouTube是怎么保存巨量視頻文件的

Vitess 還會(huì)自動(dòng)處理故障轉(zhuǎn)移和備份。它能夠管理服務(wù)器,通過(guò)智能重寫(xiě)資源密集型的查詢和實(shí)現(xiàn)緩存來(lái)提高數(shù)據(jù)庫(kù)性能。除了 YouTube,該框架還被業(yè)界的其他知名廠商使用,如 GitHub、Slack、Square、New Relic 等。

當(dāng)你需要 ACID 事務(wù)和強(qiáng)一致性的支持,同時(shí)又希望像 NoSQL 數(shù)據(jù)庫(kù)一樣快速擴(kuò)展關(guān)系型數(shù)據(jù)庫(kù)時(shí),Vitess 就會(huì)大顯身手。

在 YouTube,每個(gè) MySQL 連接都有 2MB 的開(kāi)銷。每一個(gè)連接都有可計(jì)算出來(lái)的成本,而且隨著連接數(shù)量的增加,還必須增加額外的 RAM。

通過(guò)基于 Go 編程語(yǔ)言并發(fā)支持構(gòu)建的連接池,Vitess 能夠以很低的成本管理這些連接。它使用 Zookeeper 來(lái)管理集群,并使其保持最新?tīng)顟B(tài)。

5.部署到云中

Vitess 是云原生的,很適合云中部署,因?yàn)榫拖裨频哪J揭粯?,容量是逐步添加到?shù)據(jù)庫(kù)的。它可以作為一個(gè) Kubernetes 感知(Kubernetes-aware)的云原生分布式數(shù)據(jù)庫(kù)運(yùn)行。

在 YouTube,Vitess 在容器化環(huán)境中運(yùn)行,并使用 Kubernetes 作為容器編排工具。

在如今的計(jì)算時(shí)代,每個(gè)大規(guī)模的服務(wù)都在分布式環(huán)境的云中運(yùn)行。在云中運(yùn)行服務(wù)有許多好處。

Google Cloud Platform是一套云計(jì)算服務(wù),它的基礎(chǔ)設(shè)施與谷歌內(nèi)部的終端用戶產(chǎn)品(如谷歌搜索和 YouTube)所用的基礎(chǔ)設(shè)施是相同的。

每個(gè)大規(guī)模的在線服務(wù)都有一個(gè)多樣化(polyglot)的持久性架構(gòu),因?yàn)槟骋环N數(shù)據(jù)模型,無(wú)論是關(guān)系型還是 NoSQL,都無(wú)法處理服務(wù)的所有使用場(chǎng)景。

在為本文展開(kāi)的研究中,我無(wú)法找到 YouTube 所使用的具體谷歌云數(shù)據(jù)庫(kù)的清單,但我非常肯定它會(huì)使用 GCP 的特有產(chǎn)品,如 Google Cloud Spanner、Cloud SQL、Cloud Datastore、Memorystore 等來(lái)運(yùn)行服務(wù)的不同特性。

這篇文章詳細(xì)介紹了其他谷歌服務(wù)所使用的數(shù)據(jù)庫(kù),如Google Adwords、Google Finance、Google Trends等。

6.CDN

YouTube 使用谷歌的全球網(wǎng)絡(luò)進(jìn)行低延遲、低成本的內(nèi)容傳輸。借助全球分布的 POP 邊緣點(diǎn),它能夠使客戶能夠更快地獲取數(shù)據(jù),而不必從原始服務(wù)器獲取。

所以,到此為止,我已經(jīng)談到了 YouTube 使用的數(shù)據(jù)庫(kù)、框架和技術(shù)。現(xiàn)在,該談一談存儲(chǔ)問(wèn)題了。

YouTube 是如何存儲(chǔ)如此巨大的數(shù)據(jù)量的呢(每分鐘上傳 500 小時(shí)的視頻內(nèi)容)?

7.數(shù)據(jù)存儲(chǔ):YouTube 是如何存儲(chǔ)如此巨大的數(shù)據(jù)量的呢?

視頻會(huì)存儲(chǔ)在谷歌數(shù)據(jù)中心的硬盤(pán)中。這些數(shù)據(jù)由 Google File System 和 BigTable 管理。

GFS Google File System是谷歌開(kāi)發(fā)的一個(gè)分布式文件系統(tǒng),用于管理分布式環(huán)境中的大規(guī)模數(shù)據(jù)。

BigTable是一個(gè)建立在 Google File System 上的低延遲分布式數(shù)據(jù)存儲(chǔ)系統(tǒng),用于處理分布在成千上萬(wàn)臺(tái)機(jī)器上的 PB 級(jí)別的數(shù)據(jù)。60 多個(gè)谷歌產(chǎn)品都使用了它。

因此,視頻被存儲(chǔ)在硬盤(pán)中。關(guān)系、元數(shù)據(jù)、用戶偏好、個(gè)人資料信息、賬戶設(shè)置、從存儲(chǔ)中獲取視頻所需的相關(guān)數(shù)據(jù)等都存儲(chǔ)在 MySQL 中。

YouTube是怎么保存巨量視頻文件的

7.1 即插即用的商用服務(wù)器

谷歌數(shù)據(jù)中心擁有同質(zhì)化的硬件,軟件則是內(nèi)部構(gòu)建的,管理成千上萬(wàn)的獨(dú)立服務(wù)器集群。

谷歌部署的服務(wù)器,能夠增強(qiáng)數(shù)據(jù)中心的存儲(chǔ)能力,它們都是商用服務(wù)器(commodity server),也被稱為商用現(xiàn)成的服務(wù)器(commercial off-the-shelf server)。這些服務(wù)器價(jià)格低廉,可廣泛使用和大量購(gòu)買(mǎi),并能以最小的成本和代價(jià)替換或配置數(shù)據(jù)中心的相同硬件。

隨著對(duì)額外存儲(chǔ)需求的增加,新的商用服務(wù)器會(huì)被插入到系統(tǒng)中。

出現(xiàn)問(wèn)題后,商用服務(wù)器通常會(huì)被直接替換,而不是進(jìn)行修理。它們不是定制的,與運(yùn)行定制的服務(wù)器相比,使用它們能夠使企業(yè)在很大程度上減少基礎(chǔ)設(shè)施成本。

7.2 為數(shù)據(jù)中心設(shè)計(jì)的存儲(chǔ)磁盤(pán)

YouTube 每天都需要超過(guò)一個(gè) PB 的新存儲(chǔ)。旋轉(zhuǎn)硬盤(pán)驅(qū)動(dòng)器是主要的存儲(chǔ)介質(zhì),因?yàn)槠涑杀镜?,可靠性高?/p>

SSD 固態(tài)硬盤(pán)比旋轉(zhuǎn)磁盤(pán)具有更高的性能,因?yàn)樗鼈兪腔诎雽?dǎo)體的,但大規(guī)模使用固態(tài)硬盤(pán)并不劃算。

它們相當(dāng)昂貴,也容易隨著時(shí)間的推移逐漸丟失數(shù)據(jù)。這使得它們不適合用于歸檔數(shù)據(jù)的存儲(chǔ)。

另外,谷歌正在開(kāi)發(fā)一個(gè)適用于大規(guī)模數(shù)據(jù)中心的新磁盤(pán)系列。

有五個(gè)關(guān)鍵指標(biāo)可用來(lái)判斷為數(shù)據(jù)存儲(chǔ)而構(gòu)建的硬件的質(zhì)量:

  • 硬件應(yīng)該有能力支持秒級(jí)的高速度輸入輸出操作。

  • 它應(yīng)該符合組織規(guī)定的安全標(biāo)準(zhǔn)。

  • 與普通存儲(chǔ)硬件相比,它應(yīng)該有更高的存儲(chǔ)容量。

  • 硬件采購(gòu)成本、電力成本和維護(hù)費(fèi)用應(yīng)該都是可以接受的。

  • 磁盤(pán)應(yīng)該是可靠的,并且延遲是穩(wěn)定的。

到此,關(guān)于“YouTube是怎么保存巨量視頻文件的”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI