董雪鵬
(南京電子器件研究所,江蘇 南京210016)
在互聯(lián)網(wǎng)社會(huì),每個(gè)人的線上生活都在不斷產(chǎn)生相應(yīng)的數(shù)據(jù),這些數(shù)據(jù)就是互聯(lián)網(wǎng)社會(huì)最寶貴的資源。當(dāng)前互聯(lián)網(wǎng)公司的許多商業(yè)模式都是基于這些數(shù)據(jù)實(shí)現(xiàn)的。通過對(duì)互聯(lián)網(wǎng)用戶行為數(shù)據(jù)的處理,可以分析用戶的使用習(xí)慣,不同類別用戶的興趣特征,從而為不同用戶推送不同的內(nèi)容,提升用戶使用體驗(yàn),提升應(yīng)用日活用戶數(shù)量,進(jìn)而提升應(yīng)用商業(yè)化指標(biāo)。數(shù)據(jù)處理技術(shù)在內(nèi)容推薦場(chǎng)景的應(yīng)用隨著業(yè)務(wù)場(chǎng)景的需求,處理技術(shù)的發(fā)展以及沉淀數(shù)據(jù)質(zhì)量的提升可以分為三個(gè)方面:離線批處理,分布式流計(jì)算和深度數(shù)據(jù)挖掘。
圖1 MapReduce 結(jié)構(gòu)圖
圖2 流式計(jì)算過程示意圖
互聯(lián)網(wǎng)上每天都在產(chǎn)生很多的數(shù)據(jù),為了將最新的數(shù)據(jù)及時(shí)準(zhǔn)確地送到每個(gè)用戶的眼前,需要每天對(duì)這些數(shù)據(jù)進(jìn)行分析計(jì)算。比如某個(gè)線上商店新上架了一批新的熱門商品,那么電商平臺(tái)需要及時(shí)將這批商品推薦到潛在客戶的應(yīng)用程序上。這里就需要進(jìn)行推薦算法的計(jì)算,而且需要定期根據(jù)最新的數(shù)據(jù)進(jìn)行推薦結(jié)果更新。這里存著一個(gè)核心計(jì)算問題,計(jì)算成本。
在數(shù)據(jù)量達(dá)到一定規(guī)模后,所有的計(jì)算成本都會(huì)呈指數(shù)級(jí)增長,包括內(nèi)存、CPU 和時(shí)間。為了在有限的時(shí)間內(nèi)盡可能快地完成計(jì)算任務(wù)(保證上架商品盡可能快地呈現(xiàn)到用戶面前),需要將更多的算力聯(lián)合成集群使用。同樣是由谷歌公司發(fā)表的論文“MapReduce”提供了一種解決分布式計(jì)算問題的思路,對(duì)應(yīng)的開源解決方案是Hadoop 中的MapReduce 模塊(見圖1)。
MapReduce 幫助數(shù)據(jù)分析人員將存儲(chǔ)在分布式存儲(chǔ)上的海量數(shù)據(jù)分散到不同的服務(wù)器上進(jìn)行并行計(jì)算,最終再將分散的計(jì)算結(jié)果進(jìn)行合并得到最新的數(shù)據(jù)分析結(jié)果[1]。因?yàn)檫@種計(jì)算往往是面向一定規(guī)模的存量數(shù)據(jù)的,即先將數(shù)據(jù)存儲(chǔ)到硬盤上,當(dāng)數(shù)據(jù)累積到一定的規(guī)模后再進(jìn)行批量分析,因此也稱為離線批處理計(jì)算。
但是有些場(chǎng)景下這種計(jì)算模式是不能夠滿足我們的業(yè)務(wù)需求的。比如在導(dǎo)航地圖中,用戶痛點(diǎn)是希望知道當(dāng)前道路的實(shí)時(shí)路況,如果間隔一段時(shí)間才能得到分析結(jié)果,這種體驗(yàn)將會(huì)是非常糟糕的。此時(shí)數(shù)據(jù)分析的主要矛盾是計(jì)算的實(shí)效性問題,需要有一種快速的數(shù)據(jù)分析技術(shù)來支撐這種業(yè)務(wù)場(chǎng)景[2]。
為了能夠提高數(shù)據(jù)分析的效率,降低數(shù)據(jù)分析時(shí)延,發(fā)展出了流計(jì)算模式[3]。流計(jì)算相比較批處理技術(shù)的核心優(yōu)化點(diǎn)有兩個(gè):
(1)純內(nèi)存操作,節(jié)約了數(shù)據(jù)存入磁盤再進(jìn)行讀取的成本。
(2)將計(jì)算分為很多小的鏈?zhǔn)讲僮鳎浞掷糜?jì)算的流水線效應(yīng)提高了計(jì)算吞吐能力。
流式計(jì)算開源的解決方案有很多,當(dāng)前業(yè)界最流行的解決方案是Apache 基金會(huì)開源的Flink 實(shí)現(xiàn)(如圖2)。
流計(jì)算過程中,數(shù)據(jù)像流水線一樣闖過由Operator 組成的處理鏈條,整個(gè)數(shù)據(jù)集的平均吞吐延時(shí)約等于Operator 中耗時(shí)最長節(jié)點(diǎn)的延時(shí)[4]。
隨著批處理和流處理場(chǎng)景的落地,這些大數(shù)據(jù)處理技術(shù)滿足了各種用戶最基本的需求,但是互聯(lián)網(wǎng)沉淀的數(shù)據(jù)資源的價(jià)值還遠(yuǎn)遠(yuǎn)沒有被挖掘出來。為了滿足不同用戶個(gè)性化的需求,實(shí)現(xiàn)千人千面的業(yè)務(wù)價(jià)值,需要引入一些更高階的計(jì)算模式,這就是深度學(xué)習(xí)技術(shù)[5]。
深度學(xué)習(xí)技術(shù)的應(yīng)用是工程、算法和商業(yè)模式在一個(gè)合適的時(shí)間點(diǎn)發(fā)生碰撞的結(jié)果,通過前面的工程積累,生產(chǎn)上基本解決了大規(guī)模復(fù)雜計(jì)算的問題。此外,2010 年之后深度學(xué)習(xí)算法的飛速發(fā)展也為商業(yè)應(yīng)用提供了強(qiáng)有力的理論支撐,還有多年來各個(gè)應(yīng)用場(chǎng)景沉淀下來的海量的優(yōu)質(zhì)標(biāo)定數(shù)據(jù),也為技術(shù)的商業(yè)化應(yīng)用提供了保障。在這樣一個(gè)特定的時(shí)間點(diǎn),數(shù)據(jù),算法和工程碰撞在一起成就了數(shù)據(jù)挖掘的成功應(yīng)用。
大數(shù)據(jù)技術(shù)在互聯(lián)網(wǎng)領(lǐng)域的成功應(yīng)用有著清晰的發(fā)展脈絡(luò)。本質(zhì)上由于互聯(lián)網(wǎng)的普及造成了海量數(shù)據(jù)噴發(fā),而實(shí)際生產(chǎn)的需要推動(dòng)了工程和算法各個(gè)方面協(xié)同發(fā)展,最終達(dá)到完美的融合,實(shí)現(xiàn)了商業(yè)上的成功。這一發(fā)展過程,在其他行業(yè)引入大數(shù)據(jù)技術(shù)進(jìn)行生產(chǎn)時(shí),值得充分借鑒。