01 大數(shù)據(jù)時(shí)代的新挑戰(zhàn):實(shí)時(shí)流計(jì)算
社會(huì)需求和科技進(jìn)步是螺旋式相互促進(jìn)和提升的。“大數(shù)據(jù)”一詞最早由Roger Mougalas在2005年提出,所以我們姑且認(rèn)為2005年是大數(shù)據(jù)時(shí)代的元年吧。
大數(shù)據(jù)技術(shù)之所以出現(xiàn),是因?yàn)樯鐣?huì)發(fā)展的程度已經(jīng)開(kāi)始要求我們具備處理海量數(shù)據(jù)的能力。之后,大數(shù)據(jù)技術(shù)逐漸發(fā)展和日趨完善的過(guò)程又反過(guò)來(lái)進(jìn)一步促進(jìn)社會(huì)產(chǎn)生更多、更豐富的數(shù)據(jù)。
隨著大數(shù)據(jù)技術(shù)的普及,IBM公司為我們總結(jié)了大數(shù)據(jù)的五大特點(diǎn)(也稱為5V特點(diǎn)),即Volume(大量)、Velocity(快速)、Variety(多樣)、Veracity(真實(shí))和Value(價(jià)值),如圖1-1所示。
▲圖1-1 大數(shù)據(jù)的五大特點(diǎn)
大數(shù)據(jù)時(shí)代為人們帶來(lái)了豐富多彩的生活方式,讓人們充分享受著從大數(shù)據(jù)中挖掘而來(lái)的價(jià)值。但也正因?yàn)榇髷?shù)據(jù)產(chǎn)生得太多太快,讓我們開(kāi)始疲于對(duì)正在發(fā)生的事情做出及時(shí)反應(yīng)。
是的,面對(duì)無(wú)窮無(wú)盡的數(shù)據(jù)洪流,我們急需一種手段來(lái)幫助我們抓住并思考那些一閃而逝的瞬間。在這樣的背景下,實(shí)時(shí)流計(jì)算技術(shù)應(yīng)運(yùn)而生。
雖然不能像電影《超體》中女主角直接用手抓住并分析電磁波信息那樣,但至少實(shí)時(shí)流計(jì)算技術(shù)能夠幫助我們抓住數(shù)據(jù)流的瞬間,分析并挖掘出數(shù)據(jù)的實(shí)時(shí)價(jià)值。
千萬(wàn)不要小瞧了數(shù)據(jù)的實(shí)時(shí)價(jià)值。據(jù)說(shuō)在很久以前的歐洲戰(zhàn)場(chǎng)上,每次最先知道戰(zhàn)爭(zhēng)結(jié)果的不是后方的政府機(jī)構(gòu),而是股票交易所里的那些股票投資者。
俗話說(shuō),時(shí)間就是金錢(qián),效率就是生命。所有實(shí)時(shí)流計(jì)算的目的都是為了獲得數(shù)據(jù)的實(shí)時(shí)價(jià)值。如果數(shù)據(jù)沒(méi)有實(shí)時(shí)價(jià)值,那么實(shí)時(shí)流計(jì)算也就失去了它存在的意義。
02 實(shí)時(shí)流計(jì)算使用場(chǎng)景
話說(shuō)有一句至理名言:“天下武功,無(wú)堅(jiān)不摧,唯快不破!”由此足可見(jiàn)“快”的重要性。更快、更完整地獲取數(shù)據(jù),更快、更充分地挖掘出數(shù)據(jù)價(jià)值,已成為大數(shù)據(jù)時(shí)代各行各業(yè)的共識(shí)。
在線系統(tǒng)監(jiān)控、移動(dòng)數(shù)據(jù)和物聯(lián)網(wǎng)、金融風(fēng)控、推薦系統(tǒng)等,雖然行業(yè)各不相同,但是它們有個(gè)共同點(diǎn)——實(shí)時(shí)流計(jì)算技術(shù)在這些領(lǐng)域發(fā)揮著越來(lái)越重要的作用。
1. 在線系統(tǒng)監(jiān)控
互聯(lián)網(wǎng)行業(yè)蓬勃發(fā)展的背后,是各家企業(yè)機(jī)房里成千上萬(wàn)的服務(wù)器。服務(wù)器在7×24小時(shí)(傳說(shuō)中的007工作制)的作業(yè)過(guò)程中產(chǎn)生大量監(jiān)控?cái)?shù)據(jù)。
這些數(shù)據(jù)包含著服務(wù)器本身的健康狀況,如硬件狀態(tài)、資源使用情況和負(fù)載壓力等。第一時(shí)間知道服務(wù)器的健康狀況是非常重要的,可以避免因?yàn)橐慌_(tái)服務(wù)器宕機(jī)而后續(xù)造成的各種雪崩效應(yīng)。
除了服務(wù)器本身以外,復(fù)雜的線上業(yè)務(wù)系統(tǒng)產(chǎn)生著更多的數(shù)據(jù)。如今一個(gè)每天億萬(wàn)級(jí)別訪問(wèn)量的系統(tǒng)已經(jīng)司空見(jiàn)慣,產(chǎn)品花樣更是層出不窮。業(yè)務(wù)系統(tǒng)產(chǎn)生日志的數(shù)量級(jí)由GB變TB,再由TB變PB。
將線上日志導(dǎo)入實(shí)時(shí)流計(jì)算系統(tǒng),我們可以實(shí)現(xiàn)一系列有實(shí)時(shí)價(jià)值的功能。
- 最基本的功能是監(jiān)控業(yè)務(wù)是否運(yùn)營(yíng)正常,如監(jiān)控業(yè)務(wù)關(guān)鍵指標(biāo)、發(fā)現(xiàn)故障模式等。
- 高級(jí)些的功能是最大程度優(yōu)化業(yè)務(wù)使用服務(wù)器的成本,如根據(jù)CPU、內(nèi)存和I/O等資源的使用率動(dòng)態(tài)擴(kuò)展或縮減業(yè)務(wù)使用的服務(wù)器數(shù)量。
- 更高級(jí)的功能是挖掘和探索新的業(yè)務(wù)模式,如CEP(Complex Event Processing,復(fù)雜事件處理)和在線統(tǒng)計(jì)學(xué)習(xí)或機(jī)器學(xué)習(xí)模型的各種運(yùn)用等。
通過(guò)實(shí)時(shí)流計(jì)算技術(shù),實(shí)時(shí)展現(xiàn)業(yè)務(wù)系統(tǒng)的健康狀況,提前避免可能的業(yè)務(wù)故障,最大程度優(yōu)化業(yè)務(wù)使用服務(wù)器的成本,搶先發(fā)現(xiàn)新的業(yè)務(wù)模式和商機(jī)……這些都是實(shí)時(shí)流計(jì)算技術(shù)在在線系統(tǒng)監(jiān)控領(lǐng)域價(jià)值的體現(xiàn)。
2. 移動(dòng)數(shù)據(jù)和物聯(lián)網(wǎng)
移動(dòng)終端、智能交通、共享單車、5G、工業(yè)4.0……如今在我們生活的時(shí)代,一波又一波的新名詞層出不窮。“移動(dòng)”和“物聯(lián)”讓數(shù)據(jù)變得隨時(shí)隨地可得。數(shù)據(jù)越來(lái)越多,單位數(shù)據(jù)自身的價(jià)值卻越來(lái)越小。實(shí)時(shí)處理海量數(shù)據(jù)洪流,已成為移動(dòng)和物聯(lián)網(wǎng)領(lǐng)域的當(dāng)務(wù)之急。
例如,對(duì)于智能交通系統(tǒng),傳統(tǒng)智能交通系統(tǒng)采用離線方式對(duì)交通數(shù)據(jù)做分析,交通決策不能及時(shí)做出;而通過(guò)對(duì)交通數(shù)據(jù)流進(jìn)行實(shí)時(shí)分析,實(shí)時(shí)展現(xiàn)交通熱點(diǎn)路段、優(yōu)化信號(hào)燈配時(shí)、指導(dǎo)行車線路,可實(shí)實(shí)在在減輕當(dāng)前熱點(diǎn)路段壓力、縮減平均行車時(shí)間,如圖1-2所示。
▲圖1-2 基于Spark Streaming的Uber交通熱點(diǎn)路段分析及可視化系統(tǒng)
像智能交通這樣,優(yōu)化生活環(huán)境,正是實(shí)時(shí)流計(jì)算技術(shù)在移動(dòng)數(shù)據(jù)和物聯(lián)網(wǎng)領(lǐng)域體現(xiàn)的價(jià)值之一。
3. 金融風(fēng)控
金融風(fēng)控是實(shí)時(shí)流計(jì)算技術(shù)又一常用領(lǐng)域,如圖1-3所示。通常針對(duì)貸款的風(fēng)控,可以分為貸前、貸中和貸后。在貸中和貸后,大多采用離線數(shù)據(jù)分析和數(shù)據(jù)可視化技術(shù)來(lái)實(shí)現(xiàn)風(fēng)險(xiǎn)控制。
▲圖1-3 基于Flink的實(shí)時(shí)欺詐檢測(cè)平臺(tái)
但是在貸前,特別是在許多現(xiàn)金貸產(chǎn)品中,為了給用戶帶來(lái)更好的產(chǎn)品體驗(yàn),必須在很短的時(shí)間內(nèi)對(duì)用戶的信用、還款能力和還款意愿等做出評(píng)估。除了針對(duì)用戶本身的信用風(fēng)險(xiǎn)作分析外,還需要防止金融欺詐問(wèn)題,如“薅羊毛”和多頭借貸。
通過(guò)實(shí)時(shí)流計(jì)算技術(shù),在秒級(jí)甚至亞秒級(jí),對(duì)用戶信用和欺詐風(fēng)險(xiǎn)做出判定,在保證可控風(fēng)險(xiǎn)的同時(shí),提供良好的用戶體驗(yàn),進(jìn)一步提高現(xiàn)金貸產(chǎn)品整體的競(jìng)爭(zhēng)力。
4. 實(shí)時(shí)推薦
實(shí)時(shí)推薦是實(shí)時(shí)流計(jì)算技術(shù)的另一個(gè)常見(jiàn)應(yīng)用場(chǎng)景。如今手機(jī)幾乎成為每一個(gè)年輕人的必備品。打開(kāi)手機(jī),聽(tīng)音樂(lè)、瀏覽新聞、閱讀小說(shuō)、看到心儀的東西買(mǎi)買(mǎi)買(mǎi)……
有一天你突然發(fā)現(xiàn),手機(jī)應(yīng)用越來(lái)越了解自己。它們知道推薦什么樣的音樂(lè)、新聞、小說(shuō)和商品,并且推薦的東西大抵還是你所喜歡的。
現(xiàn)代推薦系統(tǒng)(見(jiàn)圖1-4)背后越來(lái)越多地出現(xiàn)了實(shí)時(shí)流計(jì)算技術(shù)的影子,通過(guò)實(shí)時(shí)分析從用戶手機(jī)上收集而來(lái)的行為數(shù)據(jù),發(fā)掘用戶的興趣、偏好,給用戶推薦可能感興趣的內(nèi)容或商品。或許很多人并不喜歡這種被機(jī)器引導(dǎo)的感覺(jué),但是我們還是不可避免地越來(lái)越多地被它們所影響。
▲圖1-4 基于Spark Streaming的實(shí)時(shí)零售推薦系統(tǒng)
這里只是簡(jiǎn)單地列舉了幾個(gè)流計(jì)算技術(shù)使用的場(chǎng)景。其實(shí)在越來(lái)越多的行業(yè),很多傳統(tǒng)上用離線批處理技術(shù)完成的事情也逐漸轉(zhuǎn)變?yōu)椴捎脤?shí)時(shí)流計(jì)算技術(shù)完成。所以,讀者不妨大膽發(fā)揮想象力,試著將實(shí)時(shí)流計(jì)算技術(shù)運(yùn)用到生活的各個(gè)方面去,挖掘?qū)崟r(shí)信息的潛在價(jià)值,說(shuō)不定就會(huì)獲得一份驚喜。
03 實(shí)時(shí)流數(shù)據(jù)的特點(diǎn)
本節(jié)介紹了實(shí)時(shí)流計(jì)算技術(shù)的使用場(chǎng)景。實(shí)時(shí)流計(jì)算技術(shù)的處理對(duì)象是實(shí)時(shí)流數(shù)據(jù)。盡管實(shí)時(shí)流數(shù)據(jù)的來(lái)源千變?nèi)f化、豐富多彩,但歸納起來(lái),實(shí)時(shí)流數(shù)據(jù)通常具有實(shí)時(shí)性、隨機(jī)性、無(wú)序性和無(wú)限性。
1. 實(shí)時(shí)性
之所以要采集實(shí)時(shí)流數(shù)據(jù),并對(duì)其進(jìn)行實(shí)時(shí)處理,是因?yàn)檫@些數(shù)據(jù)具有實(shí)時(shí)價(jià)值。例如,提前預(yù)警避免火災(zāi),貸前反欺詐避免騙貸,量化交易搶得市場(chǎng)先機(jī)等。如果事后再分析這些數(shù)據(jù),這個(gè)時(shí)候火災(zāi)已經(jīng)發(fā)生,騙子已經(jīng)卷款而逃,市場(chǎng)機(jī)會(huì)已經(jīng)錯(cuò)過(guò),分析數(shù)據(jù)帶來(lái)的價(jià)值也只限于“前事不忘,后事之師”了。
因此,對(duì)實(shí)時(shí)流數(shù)據(jù)的計(jì)算和分析一定要在其實(shí)時(shí)價(jià)值消退之前完成,這就要求計(jì)算的時(shí)延必須小。有時(shí)候數(shù)據(jù)量大、計(jì)算復(fù)雜的原因會(huì)導(dǎo)致實(shí)時(shí)計(jì)算無(wú)法完成,這時(shí)甚至?xí)奚Y(jié)果的準(zhǔn)確性,在保證誤差在可接受范圍的前提下,優(yōu)先滿足計(jì)算的實(shí)時(shí)性。
2. 隨機(jī)性
流數(shù)據(jù)是真實(shí)世界發(fā)生各種事件的體現(xiàn)。真實(shí)世界事件的隨機(jī)發(fā)生,使得流數(shù)據(jù)的產(chǎn)生在時(shí)間和數(shù)量上具有隨機(jī)性。有時(shí)候在很長(zhǎng)一段時(shí)間內(nèi)只產(chǎn)生少量數(shù)據(jù),有時(shí)候又會(huì)在很短時(shí)間內(nèi)產(chǎn)生大量數(shù)據(jù)。
實(shí)時(shí)流數(shù)據(jù)的隨機(jī)性對(duì)實(shí)時(shí)流計(jì)算系統(tǒng)在各種流量和突發(fā)情況下的處理能力與服務(wù)穩(wěn)定性提出要求。我們可以從數(shù)據(jù)采樣、數(shù)據(jù)緩沖、計(jì)算資源動(dòng)態(tài)調(diào)整3個(gè)角度來(lái)解決實(shí)時(shí)流數(shù)據(jù)隨機(jī)性的問(wèn)題。
有些情況下,流數(shù)據(jù)量很大,暫時(shí)超過(guò)了系統(tǒng)的處理能力,如果業(yè)務(wù)需求允許,則可以考慮丟棄部分?jǐn)?shù)據(jù),或者使用帶采樣性質(zhì)的算法,減少計(jì)算壓力。如果數(shù)據(jù)不允許丟失,則可以采用帶緩沖和持久化能力的消息中間件來(lái)暫時(shí)緩沖數(shù)據(jù),讓系統(tǒng)平穩(wěn)處理數(shù)據(jù)流,削平流量高峰。
另外,在一些資源敏感的情況下,可能還需要實(shí)時(shí)流計(jì)算系統(tǒng)能夠根據(jù)流量壓力情況,動(dòng)態(tài)增加或減少計(jì)算資源,使得在滿足實(shí)時(shí)流計(jì)算的同時(shí),最大化計(jì)算資源的使用效率。
3. 無(wú)序性
流數(shù)據(jù)是一個(gè)關(guān)于時(shí)間的事件序列。我們通常希望事件會(huì)按照它們發(fā)生的時(shí)刻依次到達(dá)系統(tǒng),但由于異步、并發(fā)、網(wǎng)絡(luò)延時(shí)、時(shí)間不同步和系統(tǒng)故障等諸多原因,嚴(yán)格意義上的全局有序是很難保證的,甚至幾乎不可能。
于是退而求其次,我們可以讓數(shù)據(jù)在局部時(shí)間窗口內(nèi)有序。在目前主流的實(shí)時(shí)流計(jì)算框架中,常見(jiàn)的做法是將接收到的事件,按時(shí)間戳分發(fā)到一個(gè)個(gè)的時(shí)間窗口分片中,在等待一段時(shí)候后,再觸發(fā)時(shí)間窗口分片內(nèi)數(shù)據(jù)的統(tǒng)一處理操作。
流數(shù)據(jù)中的時(shí)間有兩類:事件發(fā)生時(shí)間和事件處理時(shí)間。事件發(fā)生時(shí)間是指事件發(fā)生的時(shí)刻,而事件處理時(shí)間則是系統(tǒng)處理事件的時(shí)刻。這兩種時(shí)間會(huì)導(dǎo)致流計(jì)算的過(guò)程和結(jié)果都有所不同,具體使用哪種時(shí)間因場(chǎng)景而異。
4. 無(wú)限性
流數(shù)據(jù)是一種隨時(shí)間無(wú)限增長(zhǎng)的數(shù)據(jù)序列。這是流數(shù)據(jù)和批數(shù)據(jù)最本質(zhì)的區(qū)別。批數(shù)據(jù)在每次處理時(shí)數(shù)據(jù)量是有限的,而流數(shù)據(jù)沒(méi)有“每次”的概念,它總在不斷產(chǎn)生,無(wú)窮無(wú)盡。流數(shù)據(jù)和批數(shù)據(jù)的區(qū)別,導(dǎo)致它們?cè)谙到y(tǒng)架構(gòu)和算法實(shí)現(xiàn)上都有所不同。
在系統(tǒng)架構(gòu)上,實(shí)時(shí)流數(shù)據(jù)的無(wú)限性要求系統(tǒng)必須具備高可用性和實(shí)時(shí)處理能力。一方面,當(dāng)系統(tǒng)發(fā)生故障時(shí),如果系統(tǒng)沒(méi)有高可用性,則流數(shù)據(jù)會(huì)丟失,并會(huì)暫停流計(jì)算。這與實(shí)時(shí)流計(jì)算的目標(biāo)(即在實(shí)時(shí)流數(shù)據(jù)上獲取實(shí)時(shí)價(jià)值)是相違背的,因此不可容忍。
另一方面,當(dāng)系統(tǒng)處理能力不能跟上數(shù)據(jù)流產(chǎn)生的速度時(shí),待處理的消息會(huì)越積越多。當(dāng)積壓數(shù)量超過(guò)閾值后,具有有限存儲(chǔ)空間的系統(tǒng)必然會(huì)崩潰。為了消除已經(jīng)存在的積壓消息,系統(tǒng)處理能力必須超過(guò)數(shù)據(jù)流產(chǎn)生的速度,否則積壓情況會(huì)一直存在。
在算法實(shí)現(xiàn)上,實(shí)時(shí)流數(shù)據(jù)的無(wú)限性對(duì)原本針對(duì)批數(shù)據(jù)設(shè)計(jì)的算法提出挑戰(zhàn)。一方面,實(shí)時(shí)流計(jì)算過(guò)程中的可用空間和可用時(shí)間都有更嚴(yán)苛的限制;另一方面,流計(jì)算的輸入數(shù)據(jù)隨時(shí)間無(wú)限增加,這和批處理算法的輸入是有限數(shù)據(jù)集有本質(zhì)區(qū)別。因此,實(shí)時(shí)流計(jì)算使用的算法相比批處理算法,在算法實(shí)現(xiàn)和算法復(fù)雜度方面會(huì)有明顯不同。
在實(shí)時(shí)流數(shù)據(jù)的四大特點(diǎn)中,無(wú)限性是流數(shù)據(jù)相比批數(shù)據(jù)最大的區(qū)別,這直接導(dǎo)致了流處理和批處理的查詢模式有所不同。批處理是在固定數(shù)據(jù)集上進(jìn)行不同的查詢,而流處理是在無(wú)限數(shù)據(jù)集上進(jìn)行固定的查詢。實(shí)時(shí)性、隨機(jī)性和無(wú)序性既是實(shí)時(shí)流計(jì)算系統(tǒng)的特點(diǎn),也是我們要解決的問(wèn)題。






