一點(diǎn)資訊田超出席WOT:深度透析點(diǎn)擊反饋平臺(tái)
日前,由51CTO傳媒精心打造的WOT2016大數(shù)據(jù)峰會(huì)在北京盛大開(kāi)幕。本次大會(huì)議題涵蓋實(shí)時(shí)計(jì)算、機(jī)器學(xué)習(xí)、等九大數(shù)據(jù)領(lǐng)域前沿技術(shù)專(zhuān)場(chǎng),百度大數(shù)據(jù)平臺(tái)架構(gòu)師侯玨、HBase核心貢獻(xiàn)者 Ted Yu、一點(diǎn)資訊大數(shù)據(jù)平臺(tái)研發(fā)總監(jiān)田超等應(yīng)邀出席并發(fā)表演講。
一點(diǎn)資訊大數(shù)據(jù)平臺(tái)研發(fā)總監(jiān)田超發(fā)表演講
在大會(huì)現(xiàn)場(chǎng),一點(diǎn)資訊大數(shù)據(jù)總監(jiān)田超深度透析用戶(hù)點(diǎn)擊反饋背后的系統(tǒng)設(shè)計(jì),并以一點(diǎn)資訊實(shí)時(shí)反饋平臺(tái)為例,分享了支撐一點(diǎn)資訊億級(jí)別用戶(hù)實(shí)時(shí)計(jì)算系統(tǒng)的設(shè)計(jì)理念和心得。
他表示,實(shí)時(shí)的數(shù)據(jù)處理能力對(duì)于一個(gè)現(xiàn)代互聯(lián)網(wǎng)公司來(lái)說(shuō)是必要的組成部分,一點(diǎn)資訊作為一家融合了“搜索”和“推薦”的興趣引擎平臺(tái),根據(jù)不同場(chǎng)景、頻道下的點(diǎn)擊反饋形成數(shù)據(jù)矩陣,對(duì)數(shù)據(jù)進(jìn)行深層次挖掘,并通過(guò)大規(guī)模實(shí)時(shí)點(diǎn)擊反饋系統(tǒng)和大規(guī)模機(jī)器學(xué)習(xí)進(jìn)行智能推薦,從而為用戶(hù)提供兼具共性與個(gè)性的移動(dòng)價(jià)值閱讀,實(shí)現(xiàn)了用戶(hù)體驗(yàn)的提升。
以下是演講節(jié)選:
大家好,很高興今天與大家分享一點(diǎn)資訊關(guān)于大數(shù)據(jù)技術(shù)的一些心得。作為近兩年來(lái)在移動(dòng)資訊領(lǐng)域發(fā)展最快的公司之一,目前,一點(diǎn)資訊的日活達(dá)4800萬(wàn)。此外,我想在這里特別強(qiáng)調(diào)的是,一點(diǎn)資訊主動(dòng)訂閱用戶(hù)數(shù)已達(dá)4700萬(wàn)。作為一家融合了搜索和推薦的技術(shù)驅(qū)動(dòng)資訊平臺(tái),與單純被動(dòng)根據(jù)用戶(hù)歷史記錄進(jìn)行推薦不同,我們更注重自由訂閱來(lái)給予用戶(hù)主動(dòng)表達(dá)的出口,通過(guò)全網(wǎng)化的智能客戶(hù)端,不僅為大家?guī)?lái)有趣、有料的新聞,也更提供有用、有品的資訊。
實(shí)時(shí)點(diǎn)擊反饋平臺(tái)打造***推薦服務(wù)
上圖是今天我們主要講的,點(diǎn)擊反饋相關(guān)推薦的部分。主要包括兩個(gè),左手邊叫Neo的系統(tǒng)是今天的主題,也就是點(diǎn)擊反饋計(jì)算平臺(tái)。
因?yàn)檫@次論壇的主題是實(shí)時(shí)計(jì)算,所以我們也回顧一下整個(gè)推薦系統(tǒng)里面實(shí)時(shí)計(jì)算所涉及的三個(gè)方面的應(yīng)用場(chǎng)景:***部分是實(shí)時(shí)畫(huà)像中的后驗(yàn)指標(biāo),包括了用戶(hù)畫(huà)像,內(nèi)容畫(huà)像和頻道畫(huà)像等。第二部分,應(yīng)用場(chǎng)景是我們實(shí)時(shí)的數(shù)據(jù)分析,讓我們?cè)谧霾煌瑢?shí)驗(yàn)時(shí),了解到不同人群、文章點(diǎn)擊率的變化。第三部就是在線(xiàn)的機(jī)器學(xué)習(xí),后面我會(huì)詳細(xì)介紹。
值得注意的是,雖然推薦服務(wù)系統(tǒng)為我們帶來(lái)很多便利,但同時(shí)也面臨不少問(wèn)題和挑戰(zhàn),下面我將從一點(diǎn)資訊的平臺(tái)為例,為大家分別闡述五個(gè)方面的主要問(wèn)題以及解決方式。
問(wèn)題1:如何統(tǒng)一各種近似的實(shí)時(shí)Pipeline
***個(gè)問(wèn)題就是近似的pipeline大家怎么樣去統(tǒng)一?做實(shí)時(shí)計(jì)算時(shí),大家常常發(fā)現(xiàn)你的Storm、spark跑著各種各樣相近但又不同的作業(yè),這些作業(yè)中80%運(yùn)算是相同的。
在一點(diǎn)資訊內(nèi)部,我們?cè)O(shè)計(jì)了一套叫Neo的點(diǎn)擊反饋平臺(tái)系統(tǒng),統(tǒng)一了主要的實(shí)時(shí)點(diǎn)擊反饋計(jì)算邏輯。Neo系統(tǒng)的核心數(shù)據(jù)結(jié)構(gòu)是一個(gè)Multi-Dimensional Matrix,用以描述用戶(hù)在各個(gè)維度和粒度的興趣屬性和基礎(chǔ)屬性?xún)刹糠?,可以在不同維度和數(shù)據(jù)粒度上進(jìn)行各種聚合運(yùn)算。其次,我們圍繞著核心數(shù)據(jù)結(jié)構(gòu)構(gòu)造了整個(gè)運(yùn)行時(shí)的framwork,可以支持用戶(hù)自定義自己的算子。
問(wèn)題2:實(shí)時(shí)計(jì)算和離線(xiàn)計(jì)算的統(tǒng)一
第二個(gè)問(wèn)題說(shuō)實(shí)時(shí)計(jì)算和離線(xiàn)計(jì)算怎么樣統(tǒng)一?
實(shí)時(shí)計(jì)算與離線(xiàn)計(jì)算的統(tǒng)計(jì)是流式計(jì)算領(lǐng)域里的研究熱點(diǎn)之一,對(duì)于我們的生產(chǎn)工作來(lái)說(shuō)也有著比較重要的實(shí)際意義,市面上有一些開(kāi)源和技術(shù)和論文包括Spark、SummingBird、Google DataFlow等都對(duì)如何實(shí)現(xiàn)有自己的解決方案。一點(diǎn)資訊采用的是Lambda architecture,對(duì)于核心計(jì)算邏輯有一套統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)抽象和計(jì)算算子抽象。我們本質(zhì)上處理的是事件流在不同矩陣上以不同粒度聚合的問(wèn)題,這里尤其是對(duì)于矩陣的Delta和Base之間的計(jì)算,我們給出了一套比較完整的抽象。這一套核心代碼可以同時(shí)跑在Storm/JStorm, Spark、Mapeduce上。
問(wèn)題3:數(shù)據(jù)變化如何追蹤與Debug
我們的平臺(tái)除了考慮到了上面所述的數(shù)據(jù)結(jié)構(gòu)和計(jì)算模型外,還考慮到了時(shí)間的因素。時(shí)間是一個(gè)非常重要的維度,對(duì)于我們的計(jì)算引擎也是一個(gè)挑戰(zhàn)??偨Y(jié)來(lái)說(shuō),包括這幾個(gè)問(wèn)題:不同類(lèi)型的Feature需要不同的淘汰策略,需要能夠計(jì)算各種時(shí)間周期上的feature、需要能夠知道數(shù)據(jù)歷史變化的狀態(tài)、數(shù)據(jù)分析需要追蹤指標(biāo)變化曲線(xiàn)。
對(duì)于這些問(wèn)題,我們構(gòu)建了比較完整的windowingmodol的實(shí)時(shí)計(jì)算模型:在hbase上存儲(chǔ)細(xì)粒度的delta數(shù)據(jù),這一部分的數(shù)據(jù)是實(shí)時(shí)更新的,每次更新時(shí)計(jì)算pipeline會(huì)通過(guò)kafka寫(xiě)入一個(gè)WAL,有一個(gè)Pusher組件會(huì)監(jiān)聽(tīng)這個(gè)WAL,并可以根據(jù)自定義的策略對(duì)不同的數(shù)據(jù)表采用不同的window計(jì)算模型;在pusher層面,支持各種時(shí)間窗口淘汰策略,包括Fixedwindow,session window,slidingwindow,decay,last value win等,
問(wèn)題4:高性能存儲(chǔ)引擎
一點(diǎn)資訊在高峰期產(chǎn)生的2M+QPS的讀請(qǐng)求,和200K+的更新量,因此對(duì)我們線(xiàn)上的分布式存儲(chǔ)系統(tǒng)會(huì)有比較高的性能要求,市面上線(xiàn)程的分布式存儲(chǔ)方案都不能解決我們面臨的問(wèn)題。
因此我們開(kāi)發(fā)了自己的分布式存儲(chǔ)系統(tǒng)NeoDB,底層基于Rocksdb,上層使用ThriftRPC,我們對(duì)系統(tǒng)層次做了很多的優(yōu)化,,包括把一些部分計(jì)算可以推到***下節(jié)點(diǎn)上、減少Compaction的層次,控制Compaction對(duì)于讀請(qǐng)求的影響、控制寫(xiě)放大,優(yōu)化緩存***率等。
問(wèn)題5:如何監(jiān)控和維護(hù)整個(gè)系統(tǒng)
***一個(gè)問(wèn)題怎么樣做監(jiān)控和維護(hù)整個(gè)系統(tǒng)。這里面涉及到一些問(wèn)題,主要包括怎么對(duì)數(shù)據(jù)流lag做監(jiān)控報(bào)警。對(duì)流式計(jì)算如何做profiling,線(xiàn)上如何做負(fù)載均衡等。我們針對(duì)這些問(wèn)題開(kāi)發(fā)了兩個(gè)系統(tǒng),一個(gè)是監(jiān)控我們做了YMetric的監(jiān)控系統(tǒng)。客戶(hù)端兼容codahale metrics庫(kù),會(huì)將metric匯總發(fā)送到Kafka中,并由我們統(tǒng)一的Storm Pipeline進(jìn)行聚合計(jì)算,結(jié)果存儲(chǔ)在openTSDB之中。我們的這套系統(tǒng)支持多Metric的自定義計(jì)算、報(bào)警、Trending預(yù)測(cè)等。
另外一個(gè)系統(tǒng)是ycluster服務(wù),她有點(diǎn)像Apache Helix,但是我們做的更為簡(jiǎn)單易用,YCluster是一套基于Zookeeper的分布式負(fù)載均衡和機(jī)群管理系統(tǒng),支持Multiple Service Namespace、Hash Sharding、Multiple Replica。同時(shí)我們基于YCluster做了Neo系統(tǒng)的Smart Client,通過(guò)這套Smart Client完成路由和負(fù)載均衡的工作,我們支持多種不同負(fù)載均衡的算法,包括簡(jiǎn)單的Random和Round-Robin、,同時(shí)我們做了一個(gè)叫做link Scheduler的負(fù)載均衡的算法,可以支持多數(shù)據(jù)中心中的本地優(yōu)先調(diào)度,并支持相同副本的優(yōu)先調(diào)度,從而大幅度提升了緩存***率。
我們這套東西大概線(xiàn)上跑了一年多了不到兩年,目前承擔(dān)了一點(diǎn)資訊一直以來(lái)快速服務(wù)的增長(zhǎng),這里面就是今天我跟大家介紹的東西,另外補(bǔ)充一點(diǎn)是說(shuō),我們也歡迎對(duì)一點(diǎn)資訊感興趣的同學(xué)加入進(jìn)來(lái)。