土豆網(wǎng)現(xiàn)在以云計(jì)算為基礎(chǔ),給大家提供視頻云的服務(wù),土豆網(wǎng)是怎么做這件事的。下面我們來(lái)詳細(xì)的介紹一下?,F(xiàn)在我們看到的新浪SAE最老的前身叫新浪的動(dòng)態(tài)研發(fā)平臺(tái)。在那個(gè)時(shí)候,新浪認(rèn)為他要做一個(gè)能夠隨時(shí)都把新的業(yè)務(wù)很容易的部署進(jìn)去,并且隨時(shí)都可以像新浪網(wǎng)的新聞一樣,能夠面向全國(guó)的用戶,動(dòng)態(tài)、高速、可擴(kuò)容的平臺(tái),所以出現(xiàn)了一個(gè)基礎(chǔ)的服務(wù)平臺(tái)。在土豆來(lái)講,比較不一樣的是,它更多還是以視頻為基礎(chǔ),所以它的存儲(chǔ)、計(jì)算和交付都會(huì)有所不同。

土豆網(wǎng)一個(gè)核心的思想就是,每個(gè)人都是生活的導(dǎo)演。每個(gè)人都是生活的導(dǎo)演帶來(lái)的狀況是我們每天有差不多兩億次的視頻播放量,這個(gè)數(shù)據(jù)老了一點(diǎn),不過(guò)還好,每天有3500萬(wàn)的獨(dú)立訪問(wèn),每個(gè)月有2.3億的用戶覆蓋?,F(xiàn)在的總視頻數(shù)超過(guò)7500萬(wàn),有超過(guò)一個(gè)億的注冊(cè)用戶。這是一些簡(jiǎn)單的數(shù)據(jù),這個(gè)數(shù)據(jù)是平臺(tái)支持的整體流量。

每個(gè)人都是生活的導(dǎo)演里面核心的三步,一個(gè)是不久大家會(huì)在美國(guó)上市公司里面看到優(yōu)酷土豆有限公司,我們會(huì)和優(yōu)酷合并,優(yōu)酷土豆這家公司將會(huì)是中國(guó)唯一一個(gè)把UGC,把專(zhuān)業(yè)版權(quán)內(nèi)容和自制劇做到了的平臺(tái)。UGC是每一個(gè)用戶可以在任何地方把視頻分享給互聯(lián)網(wǎng)任何地點(diǎn)任何設(shè)備上的人,專(zhuān)業(yè)版權(quán)最大的單位就是單個(gè)視頻會(huì)被極大的人群在短時(shí)間內(nèi)集中性的觀看。最后一個(gè)是自制劇,自制劇在兩者之間都會(huì)有一些,它比較講究快,另外它的內(nèi)容會(huì)更快地播放。前兩者對(duì)土豆的基礎(chǔ)平臺(tái)來(lái)講比較關(guān)鍵,也就是一小部分內(nèi)容在短時(shí)間內(nèi)被用戶集中快速地去索取,這是兩個(gè)非常核心的地方。與剛才的業(yè)務(wù)形態(tài)不同的是,三項(xiàng)點(diǎn)播外加兩項(xiàng)直播的產(chǎn)品。

到技術(shù)和產(chǎn)品的形態(tài),對(duì)于我們來(lái)講,分成三個(gè)部分加一個(gè)服務(wù),這里面包含了一系列快速的并行的計(jì)算,第二就是大容量或者極大容量的存儲(chǔ),第三就是很容易的交付,讓所有人容易的高速的取到它,這三者結(jié)合起來(lái),就是一項(xiàng)視頻的云服務(wù)。

土豆運(yùn)用云計(jì)算的實(shí)踐

首先,我們談一下計(jì)算。在土豆網(wǎng)里面的計(jì)算和EC2比較不同的事情,是我們對(duì)三件事情做優(yōu)化。第一件事情,希望用戶很容易的把數(shù)據(jù)給我,第二件事情,云計(jì)算最核心的地方,就是要把非常非常多的視頻去變成用戶能看的東西。第三個(gè),就是要把這些東西再分發(fā)走,讓業(yè)務(wù)可以去用它。最核心的地方還是在視頻轉(zhuǎn)碼的業(yè)務(wù)上面。所以,第一件事,像亞馬遜S3,你一定要看到我們是在全球幾個(gè)不同的點(diǎn),但是對(duì)于土豆網(wǎng)來(lái)講,它的云計(jì)算,也就是數(shù)據(jù)存進(jìn)來(lái)的切入點(diǎn)是就近上傳,讓用戶最快速度傳上來(lái)。然后再就近上傳到一個(gè)集群點(diǎn),我會(huì)切出很多個(gè)小薄片來(lái)做轉(zhuǎn)碼的集群,當(dāng)然這在全國(guó)分成好多份,在很多個(gè)地方走。我們的計(jì)算是單一的編解碼,這種編解碼上面稍微復(fù)雜一點(diǎn),就是多種格式,網(wǎng)友會(huì)給我們傳上來(lái)各種各樣稀奇古怪的視頻格式,然后我們把多種格式進(jìn)行轉(zhuǎn)變,但是又要把它分成不同的碼流輸出去。最后,就是把這些東西快速轉(zhuǎn)碼完成之后,分到用戶可能要看到的存儲(chǔ)結(jié)點(diǎn)上去,這個(gè)工作就做完了。

所以,這里面有幾件比較重要的事。第一件事情是實(shí)際上是以用戶來(lái)源區(qū)域?yàn)楹诵娜プ鲞@種上傳調(diào)度,我認(rèn)為DNS是互聯(lián)網(wǎng)最基礎(chǔ)的幫助用戶走到一個(gè)地方的方法,這個(gè)是非常對(duì)的,但是實(shí)質(zhì)上現(xiàn)在的云計(jì)算里面,基于在七層業(yè)務(wù)層面去做調(diào)度非常重要,也就是說(shuō)DNS給過(guò)來(lái)的數(shù)據(jù),我認(rèn)為他是在哪個(gè)地方,但是他不一定真的在哪,在會(huì)話的時(shí)候可能會(huì)做一些改變,所以會(huì)話的時(shí)候會(huì)做二次調(diào)度,所以我們會(huì)把客戶放到比較快的結(jié)點(diǎn)上去。然后我們有一組基于任務(wù)和優(yōu)先機(jī)制的系統(tǒng)送到多個(gè)服務(wù)器,再去并發(fā)轉(zhuǎn)碼,轉(zhuǎn)碼實(shí)際上我們現(xiàn)在有很多架構(gòu)。在剛才這個(gè)機(jī)制上,我們可以看到,一般來(lái)講,它很難多線程去做,每臺(tái)機(jī)器上現(xiàn)在有多少個(gè)任務(wù)有用,是我的一個(gè)調(diào)度機(jī)制。比如說(shuō)我現(xiàn)在正在播一個(gè)電視臺(tái)上面的節(jié)目,播完之后立刻點(diǎn)播給最終觀看的人,這時(shí)候他的優(yōu)先級(jí)別就高一些。有一些電視劇或者電影,大家還沒(méi)有看到它的時(shí)候,版權(quán)方已經(jīng)把介質(zhì)給我了,我還得偷偷藏一下,不能讓大家看到。

最后一個(gè)是核心的非常大的MateDB的管理,我們的MateDB是一個(gè)基于傳統(tǒng)的數(shù)據(jù)庫(kù)去做磁盤(pán)的存儲(chǔ)。但是,實(shí)際上是一個(gè)分布式的內(nèi)存數(shù)據(jù)庫(kù)。它的作用就是我的每一個(gè)視頻是什么,它現(xiàn)在在哪些地方存著,很像文件的分區(qū)表放在這里面。但是除此之外,這個(gè)MateDB還要做一些提前的工作,里面有去重、里面有版權(quán),去重的概念就是我希望不要存多份,一個(gè)人一上來(lái),就是我希望他當(dāng)時(shí)是不是轉(zhuǎn)好碼了。其次還要做版權(quán),版權(quán)是個(gè)很復(fù)雜的事。第一個(gè)比較重的版權(quán),就比如《大話西游》的版權(quán),或者我沒(méi)有《大話西游》的版權(quán),用戶給我一個(gè),我怎么知道它是《大話西游》,需要從里面抽音頻和視頻比對(duì),這個(gè)是需要CPU大容量計(jì)算的工作。

最后一件事比較簡(jiǎn)單一些,就是跨網(wǎng)絡(luò)、跨機(jī)房、跨運(yùn)營(yíng)商把我計(jì)算完的數(shù)據(jù)分發(fā)出去。后面我會(huì)講存儲(chǔ)的模型,但是一般來(lái)講,用戶在一個(gè)地方轉(zhuǎn)好碼之后,最復(fù)雜的事情是怎么傳到另外一個(gè)運(yùn)營(yíng)商的點(diǎn)去,從中間要選好走的路徑,這是比較重要的,這是我們的計(jì)算部分。

對(duì)于視頻計(jì)算而言,也就是說(shuō)對(duì)于云計(jì)算里面純粹計(jì)算的部分,在視頻云里面有以下幾點(diǎn),我認(rèn)為是未來(lái)可以不斷優(yōu)化的地方。第一塊,就是視頻轉(zhuǎn)碼會(huì)有一些很不一樣的優(yōu)化,現(xiàn)在第一種優(yōu)化是我們以前把視頻轉(zhuǎn)碼出來(lái)了之后,變成一個(gè)格式。但是今天我們可以拿一部移動(dòng)設(shè)備去看它,我手上拿的是一個(gè)iPhone,它只支持MP4,只支持TS的流。在這種情況下,我們的轉(zhuǎn)碼提前要對(duì)各種各樣的輸出做好優(yōu)化。如果優(yōu)化做得好的話,那么在最終交付的時(shí)候,兼容的設(shè)備就足夠多,同時(shí)你交付出去的時(shí)候,所損耗的CPU會(huì)更少。這是一個(gè)。

第二件事情,是我們現(xiàn)在已經(jīng)開(kāi)始在研究,這是前段時(shí)間和一個(gè)朋友討論的東西,就是快速轉(zhuǎn)碼,這個(gè)快速轉(zhuǎn)碼是一個(gè)很不一樣的事情。就是FMpag把一個(gè)流轉(zhuǎn)成目標(biāo)的格式,但是如果我把.263變成.264,還有一種模型叫翻譯。這樣,去做編碼的次數(shù)會(huì)少很多,會(huì)節(jié)約非常多的CPU。

所以,第二件事就是視頻計(jì)算大IO的優(yōu)化,這件事現(xiàn)在來(lái)看還是一個(gè)不好去做的事情。我們提出過(guò)三種解決方案,第一種解決方案是用內(nèi)存去替代磁盤(pán),方法很好,我們甚至準(zhǔn)備了128G,甚至更大的內(nèi)存去做這件事,但是麻煩的事情是用戶上傳上來(lái)的東西在一臺(tái)機(jī)器處理的時(shí)候有時(shí)候會(huì)超過(guò)128G,這件事就不是特別可行,也試過(guò)SSD,SSD大的問(wèn)題是SSD讀非常好,但是如果既寫(xiě)又讀的時(shí)候性能非常差,所以硬盤(pán)IO,我們還沒(méi)有一個(gè)很好的機(jī)制,但也許我認(rèn)為這是一個(gè)未來(lái)去做計(jì)算時(shí)候硬盤(pán)上面可優(yōu)化的一個(gè)很好的點(diǎn),誰(shuí)解決它,誰(shuí)會(huì)在這個(gè)上面拿到很多先機(jī)。

第三個(gè)是我們自己分布式的MateDB的改造,現(xiàn)在的MateDB是一個(gè)一個(gè)核心放在那,現(xiàn)在我看異地復(fù)制和同步機(jī)制確實(shí)也不太好,也在內(nèi)部做一些這方面的改造機(jī)制,主要還是看速度有多快。從計(jì)算來(lái)講,我認(rèn)為未來(lái)的純粹在云端的計(jì)算,像EC2這樣的產(chǎn)品,差的就是存儲(chǔ),它的本地存儲(chǔ)太小了。云計(jì)算的計(jì)算模型,我認(rèn)為更多是類(lèi)似Hadoop的模型,就是機(jī)器的CPU用于本地存儲(chǔ)去做計(jì)算,最后獲得最大的收益,這樣的云計(jì)算模型是一個(gè)最好的模型。但是EC2還沒(méi)有很好的解決這個(gè)問(wèn)題,如果我們的某一個(gè)公共的純解決方案能夠解決好這個(gè)問(wèn)題,我相信會(huì)有非常非常不同的收益。

土豆的存儲(chǔ)與交付

再講講我們的存儲(chǔ)和交付。土豆的存儲(chǔ)和交付是這樣一個(gè)模型,首先,它把自己的存儲(chǔ)在一個(gè)運(yùn)營(yíng)商內(nèi),當(dāng)然一個(gè)運(yùn)營(yíng)商內(nèi)這樣的小環(huán)也可以有多個(gè),我們管這樣的環(huán)叫小組,比如說(shuō)北方電信和南方北方是兩個(gè)小組,每個(gè)小組里面有若干個(gè)服務(wù)器,對(duì)于我們而言,剛才所闡述的一個(gè)小組有全土豆的全部視頻文件是在哪里的分區(qū)表,我們會(huì)有若干個(gè)小組,為什么?因?yàn)樾〗M之間的交換很難,所以會(huì)有若干個(gè)。小組之間我們有一組機(jī)器在不同的IDC里面打出特殊的通道來(lái),去做熱交換,我們會(huì)有一組調(diào)度專(zhuān)門(mén)去做熱交換。最上面的這個(gè)調(diào)度,它的作用是每當(dāng)一個(gè)用戶決定訪問(wèn)里面一個(gè)視頻的時(shí)候,他先看這個(gè)土豆到哪個(gè)小組快,第二再看這個(gè)小組到哪個(gè)數(shù)據(jù)中心快,再看看那個(gè)數(shù)據(jù)中心里面有沒(méi)有文件去完成這個(gè)操作。所以,在土豆的計(jì)算非常簡(jiǎn)單,就是純粹文件編解碼的工作,但是它最核心的部分還在存儲(chǔ)和交付的地方。存儲(chǔ),它整個(gè)把互聯(lián)網(wǎng)當(dāng)做一個(gè)大的計(jì)算集群,虛擬變成了一套存儲(chǔ)系統(tǒng)。

首先,會(huì)有一個(gè)小組,一個(gè)小組里面擁有完整的一份,然后里面若干個(gè)Data,這里面也分成截然不同的機(jī)制,每一臺(tái)機(jī)器里面都有也許一半,也許一小部分,底下的這個(gè)我們管它叫備份,但是它是全部的存儲(chǔ)文件。我們的熱交換知道現(xiàn)在的磁盤(pán)的IO上面,哪些文件被用戶觀看得最多,然后我們通過(guò)熱交換把熱點(diǎn)放到這個(gè)節(jié)點(diǎn)里面的熱點(diǎn)部分。舉個(gè)例子,現(xiàn)在最熱播的《甄嬛傳》,在所有服務(wù)器所有硬盤(pán)的片區(qū)都有它,所以所有人就用最大量去獲取它。

我們還會(huì)有一部分的節(jié)點(diǎn),這部分節(jié)點(diǎn)是一些中小運(yùn)營(yíng)商。比如說(shuō)我們家所在的小區(qū)叫寬帶通,寬帶通這樣的運(yùn)營(yíng)商通常我們?cè)谒遣疾涣撕艽蟮墓?jié)點(diǎn),因?yàn)樗挠脩羲魅×坎皇翘貏e大。在這種狀況下,我們只在這點(diǎn)部署一些節(jié)點(diǎn),他們只存儲(chǔ)熱點(diǎn)的東西,熱點(diǎn)的東西對(duì)于我們來(lái)講,它能夠支撐一個(gè)大的百分比的訪問(wèn)量就OK了,剩下的還是跨自己的運(yùn)營(yíng)商,跑到大的完整虛擬節(jié)點(diǎn)去取。所以說(shuō)在存儲(chǔ)部分,我們發(fā)現(xiàn)云計(jì)算已經(jīng)完全不同了,以前一臺(tái)計(jì)算機(jī)里面的硬盤(pán)在云計(jì)算里的試點(diǎn)變成了一臺(tái)服務(wù)器,我們?cè)谝粋€(gè)文件里的分區(qū)表變成了一個(gè)MateDB,原來(lái)的磁盤(pán)控制器在我們這點(diǎn)變成了一個(gè)調(diào)度器,文件系統(tǒng)在我看起來(lái)變成了云存儲(chǔ)。

最核心的地方,我們認(rèn)為一個(gè)存儲(chǔ),它既應(yīng)該是存儲(chǔ),也應(yīng)該提供交付?;ヂ?lián)網(wǎng)最公共的HTTP的協(xié)議應(yīng)該是存儲(chǔ)協(xié)議的最主流協(xié)議,當(dāng)然我們還有更多的視頻協(xié)議,緩存是在節(jié)點(diǎn)級(jí)別的緩存,而不只是在內(nèi)存級(jí)別的緩存。未來(lái),我認(rèn)為云存儲(chǔ)一定是基于HTTP協(xié)議的大容量的存儲(chǔ),最核心的地方還是存儲(chǔ)與交付能夠并行往前走,這樣的話,他才能夠解決我們現(xiàn)在的存儲(chǔ)容量很大,交付的時(shí)候,單一視頻或者說(shuō)單一存儲(chǔ)IO比較密集時(shí)候的問(wèn)題。

在土豆,我們認(rèn)為云交付也是一個(gè)非常非常重要的部分,在這里面,云交付所去承擔(dān)的是走線,也就是把數(shù)據(jù)最終讀出來(lái)交給用戶的這么一個(gè)東西。對(duì)于未來(lái)來(lái)講,交付和存儲(chǔ)能夠混合起來(lái),并且交付本身支持多個(gè)協(xié)議,這個(gè)協(xié)議是指假如我看的是一份文檔,那我拿PC下載下來(lái),它就是一個(gè)word,基于內(nèi)容的多協(xié)議相結(jié)合的存儲(chǔ)是云交付的一個(gè)很有趣的特點(diǎn)。在視頻就是,我一個(gè)視頻存在存儲(chǔ)里面,你可以拿任何設(shè)備,通過(guò)任何特有的視頻協(xié)議去把它拿走,這是一個(gè)很有意思的話題。

在土豆而言,一切云計(jì)算都是圍繞在視頻上面的,里面這個(gè)視頻對(duì)外要支持多個(gè)平臺(tái)、多個(gè)協(xié)議、多個(gè)碼流讓用戶看到。用戶看不到我們的存儲(chǔ)、計(jì)算、交付這樣的東西,用戶看到的是多平臺(tái)、多協(xié)議、多個(gè)碼流去到土豆看視頻。

再總結(jié)一下,土豆的云視頻服務(wù),主要基于兩個(gè)入口。第一個(gè)入口,用戶可以簡(jiǎn)單方便的上傳,并且把他的任何格式的東西給我們。在這里面,土豆的計(jì)算部分是特別優(yōu)化的云計(jì)算,首先,它不是通用的,是一個(gè)極其專(zhuān)用的做編解碼的云計(jì)算。其次,存儲(chǔ)和分發(fā)提供大容量的高效的云存儲(chǔ)和云交付,這非常重要。所以,對(duì)視頻而言,也就是對(duì)土豆網(wǎng)來(lái)講,存儲(chǔ)和高效支持多協(xié)議相結(jié)合的云視頻交付,是未來(lái)一個(gè)比較關(guān)鍵的工作,也是未來(lái)的一個(gè)愿景。

分享到

zhaohang

相關(guān)推薦