吳紅:芒果TV大數(shù)據(jù)平臺(tái)架構(gòu)與基礎(chǔ)組件優(yōu)化
原創(chuàng)2015年8月29日由七牛公司舉辦為期兩天主題為—數(shù)據(jù)重構(gòu)未來(lái)的七牛·數(shù)據(jù)時(shí)代峰會(huì)在上海國(guó)際時(shí)尚中心。本次大會(huì)邀請(qǐng)國(guó)內(nèi)外知名數(shù)據(jù)專家、互聯(lián)網(wǎng)行業(yè)、傳統(tǒng)行業(yè)數(shù)據(jù)大咖親臨現(xiàn)場(chǎng),帶來(lái)一場(chǎng)有關(guān)數(shù)據(jù)的饕餮盛宴。
芒果TV依托湖南廣電的內(nèi)容、用戶資源在2014年迅速成長(zhǎng),同年 7月5日周點(diǎn)擊量超過(guò)1.7億。本次七牛數(shù)據(jù)時(shí)代峰會(huì)特別邀請(qǐng)芒果TV數(shù)據(jù)負(fù)責(zé)人彭哲夫分享芒果TV數(shù)據(jù)處理實(shí)踐分享。
以下是演講實(shí)錄:
芒果TV團(tuán)隊(duì)從去年開(kāi)始籌建,現(xiàn)在有十個(gè)人,150多個(gè)節(jié)點(diǎn),通過(guò)數(shù)據(jù)1.5PB。整體分為三個(gè)業(yè)務(wù)系統(tǒng)分別是數(shù)據(jù)魔方—負(fù)責(zé)一些重要指標(biāo)的統(tǒng)計(jì)。第二是系統(tǒng)推薦,是芒果TV 將流量進(jìn)行轉(zhuǎn)化引導(dǎo)。第三是視頻內(nèi)容分析系統(tǒng),很多互聯(lián)網(wǎng)的數(shù)據(jù)可以轉(zhuǎn)化成傳統(tǒng)媒體需要的數(shù)據(jù),因此芒果TV將一些用戶的記錄可以提供給導(dǎo)演來(lái)提供精彩的內(nèi)容或者劇情發(fā)展。
現(xiàn)在芒果TV的數(shù)據(jù)部門(mén)支撐了70%-80%的業(yè)務(wù),而今天的演講也分為三個(gè)部分:***是基礎(chǔ)篇,第二是整合篇,第三是數(shù)據(jù)管理篇。
采集是數(shù)據(jù)的生產(chǎn)方,決定了數(shù)據(jù)是否可用,而在做搜集時(shí)我們會(huì)關(guān)注一下寬帶成本,作為一家視頻公司,寬帶和版權(quán)是成本構(gòu)成的重要部分。因此我們自己開(kāi)發(fā)了一個(gè)SDK把采集到的數(shù)據(jù)發(fā)送到我們自定義的系統(tǒng)上,再進(jìn)行分類一塊發(fā)到FDS上,最終會(huì)轉(zhuǎn)化成數(shù)據(jù),形成數(shù)據(jù)庫(kù)。
在實(shí)時(shí)計(jì)算方面,主要是用于播放過(guò)程中質(zhì)量監(jiān)控。我們回到ES里面去做一些即時(shí)查詢。
在采集過(guò)程中會(huì)列出一個(gè)元素然后調(diào)用一個(gè)方法,然后把所有的參數(shù)傳送給服務(wù)商,但是弊端在于隨著采集點(diǎn)的增多,代碼需要維護(hù),而且缺少系統(tǒng)性。因此我們做了一個(gè)抽象,在采集過(guò)程中機(jī)型一次分類,比如頁(yè)面數(shù)據(jù)、錯(cuò)誤數(shù)據(jù)、播放數(shù)據(jù)。
另外就是事件問(wèn)題,事件因?yàn)槭裁刺幜P?我們通過(guò)后端配置把一個(gè)元素的名稱和事件整合起來(lái)在頁(yè)面加載的時(shí)候,會(huì)把這一塊的配置加載到后端頁(yè)面,后端會(huì)根據(jù)這些加載的配置來(lái)決定什么數(shù)據(jù)需要上報(bào),什么不需要上報(bào)。
如果我們需要一個(gè)很長(zhǎng)的開(kāi)發(fā)周期,使用這個(gè)模式時(shí)我們只需要在后臺(tái)進(jìn)行一個(gè)配置,數(shù)據(jù)馬上就會(huì)過(guò)來(lái)了。搜集方面,一般采用的是放一個(gè)像素的圖片吧一些參數(shù)帶到這個(gè)圖片后面,但是這種方式會(huì)造成寬帶成本非常大,光搜索寬帶會(huì)占到600兆左右。為了把服務(wù)器資源降低到極值,可以改為PT進(jìn)行篡數(shù)。這樣可以節(jié)省接近三分二的帶寬成本。
在傳輸方面我們遇到了一些坑,最重要的問(wèn)題是占用資源過(guò)大,實(shí)際上我們隊(duì)每一塊進(jìn)行具體分析也不難解決這個(gè)問(wèn)題。
在數(shù)據(jù)量過(guò)大時(shí)我們會(huì)遇到一些情況,主要是在于每隔一段時(shí)間會(huì)建一個(gè)文件夾,然而在測(cè)試時(shí),時(shí)間就要長(zhǎng)的很多。所以我們對(duì)其做了一個(gè)調(diào)整,使用單線程的方式做了一個(gè)很不錯(cuò)的優(yōu)化,當(dāng)?shù)搅?.5 1.6之后會(huì)直接導(dǎo)致系統(tǒng)內(nèi)存膨脹的厲害,所以我們一般會(huì)加一條配置參數(shù)或者直接把位置進(jìn)行改掉。
在一般類型文件和文件夾之間選擇,主要考慮效率問(wèn)題,之前有人提出將二者綜合在數(shù)據(jù)量高的情況下使用文件。在寫(xiě)FTX時(shí)會(huì)導(dǎo)致文件進(jìn)入關(guān)閉的狀態(tài),會(huì)導(dǎo)致我們錯(cuò)誤失敗,我們需要進(jìn)行監(jiān)控。另外可能會(huì)產(chǎn)生很多小文件會(huì)造成比較大的壓力。因?yàn)槭谴髷?shù)據(jù),數(shù)據(jù)量不言而喻我們使用的壓縮方式可以壓縮80%的數(shù)據(jù)量。
在隊(duì)列傳輸方面,我們只要使用Kafka,在實(shí)踐中來(lái)看,并不是分區(qū)越多越好,如果分區(qū)越多,客戶端和服務(wù)端所使用的內(nèi)存限制也就越多,一個(gè)分區(qū)會(huì)產(chǎn)生兩個(gè)文件,這兩個(gè)文件會(huì)導(dǎo)致具體數(shù)量增加,而且Kafka本身的機(jī)制—kafka里面有一個(gè)頁(yè)面分區(qū),會(huì)產(chǎn)生投票過(guò)程分區(qū)越多時(shí)間越長(zhǎng)會(huì)影響使用。
我們的做法是:選擇一臺(tái)機(jī)器只創(chuàng)建一個(gè)分區(qū),然后測(cè)試產(chǎn)生和消費(fèi)的情況如何,我們最關(guān)心的是吞吐量,所以TP和TC的***值可以做我們的分區(qū)。
在存儲(chǔ)這一塊,我們用的是多級(jí)存儲(chǔ)方式,當(dāng)然遇到的問(wèn)題在于,當(dāng)數(shù)據(jù)量增加時(shí),很多冷數(shù)據(jù)在里邊,工作壓力會(huì)比較大。所以我們會(huì)分成三級(jí),主要特點(diǎn)是CPU和內(nèi)存會(huì)比較豐富一點(diǎn),還可以減少副本以及把冷數(shù)據(jù)丟到云存儲(chǔ)上面。
在存儲(chǔ)方面另外一個(gè)問(wèn)題就是壓縮,在前期沒(méi)有規(guī)劃好時(shí),我發(fā)現(xiàn)存儲(chǔ)空間已經(jīng)不夠用了,我們會(huì)根據(jù)自己的業(yè)務(wù)進(jìn)行選擇,使用歸檔日志對(duì)小文件進(jìn)行整理。
在配置方面,我們會(huì)把配置整合起來(lái),進(jìn)行推送,主要是基于RPC的控制模型,對(duì)所有的組進(jìn)行全員的控制。我們的數(shù)據(jù)服務(wù)平臺(tái)需要支持公司的很多業(yè)務(wù)他們只需要一個(gè)賬號(hào)就可以進(jìn)行我們采集服務(wù)器的傳輸服務(wù)、實(shí)時(shí)計(jì)算服務(wù),我們也提供資源流量監(jiān)控服務(wù)……
主要說(shuō)一下我們?nèi)绾卧谄脚_(tái)上管理數(shù)據(jù)。只要分為幾個(gè)部分。一時(shí)日志種類的抽象,這和公司的業(yè)務(wù)息息相關(guān),我們將日志進(jìn)行分類—播放類日志、廣告類日志。在這其中有一個(gè)特別有意思的地方,在芒果TV更關(guān)心PV VV這些核心指標(biāo),但是如果我們的計(jì)算指標(biāo)的方式和其他同行不一樣,這個(gè)數(shù)據(jù)在行業(yè)內(nèi)就沒(méi)有可對(duì)比性。所以會(huì)從幾個(gè)方面去定義:一個(gè)是它的概念—運(yùn)用的常理,如何上報(bào),會(huì)導(dǎo)致什么樣的結(jié)果。
***上報(bào)內(nèi)容和計(jì)算公式,數(shù)據(jù)到了平臺(tái)以后最重要的就是對(duì)數(shù)據(jù)進(jìn)行管理,為什么要做管理?其實(shí)是為了把數(shù)據(jù)進(jìn)行分門(mén)別類,隨之產(chǎn)生的就是主題式管理—以某一個(gè)點(diǎn)為核心,在必須關(guān)注的方面我們?cè)俅芜M(jìn)行分類,這個(gè)方式與我們的日志抽象非常相似。
在數(shù)據(jù)倉(cāng)庫(kù)建立之后,別人需要使用你的倉(cāng)庫(kù)數(shù)據(jù)們需要一個(gè)明細(xì),需要做一個(gè)數(shù)據(jù)的數(shù)據(jù)。這個(gè)元數(shù)據(jù)分為兩類,一類是技術(shù)性元數(shù)據(jù)主要給開(kāi)發(fā)人員使用,包括一些倉(cāng)庫(kù)結(jié)構(gòu),以及原始性抽取的一些規(guī)則,不然的話數(shù)據(jù)毫無(wú)質(zhì)量可言。
***為什么需要數(shù)據(jù)集市?在這個(gè)過(guò)程中,每一個(gè)公司會(huì)有很多業(yè)務(wù)部門(mén),每一個(gè)業(yè)務(wù)部門(mén)面臨的問(wèn)題是不一樣的,比如從統(tǒng)計(jì)角度,會(huì)更關(guān)注哪些數(shù)據(jù)。但是如果這樣數(shù)據(jù)倉(cāng)庫(kù)是沒(méi)法穩(wěn)定的。因此需要數(shù)據(jù)集市進(jìn)行隔離,在這個(gè)過(guò)程中我們可以把數(shù)據(jù)抽出來(lái)進(jìn)行一些隊(duì)列,放到我們的關(guān)系成本里,這些集市之間的結(jié)果是可以互相分享和交換的,更重要的是在于事實(shí)表和維表的管理和維護(hù)。