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