作者:宋 家雨
數(shù)據(jù)時代,大數(shù)據(jù)計算已經(jīng)滲透到了各行各業(yè),業(yè)務(wù)沉淀數(shù)據(jù),數(shù)據(jù)計算產(chǎn)生新的業(yè)務(wù)價值,大數(shù)據(jù)計算正不斷地用這種方式推動業(yè)務(wù)向前發(fā)展。電商雙11,商家與消費者狂歡的背后,同樣離不開大數(shù)據(jù)計算帶來的價值貢獻(xiàn),特別是應(yīng)用越來越廣泛的“實時計算”。
現(xiàn)實世界中,數(shù)據(jù)連續(xù)產(chǎn)生,并被實時采集和計算
我們要做數(shù)據(jù)計算,挖掘產(chǎn)品商業(yè)價值,首要解決的問題是數(shù)據(jù)的問題?,F(xiàn)實世界里,數(shù)據(jù)往往是隨著時間的推進(jìn)連續(xù)產(chǎn)生的,比如用戶瀏覽商品,一系列的鼠標(biāo)點擊操作,會產(chǎn)生一連串的后臺數(shù)據(jù);開車使用手機導(dǎo)航,GPS定位每隔一段時間更新一次,也會不斷產(chǎn)生日志數(shù)據(jù);用戶瀏覽新聞推送、搜索歌曲、監(jiān)控攝像頭定時采集圖片上傳到云端存儲、視頻直播等等場景,這背后生成的數(shù)據(jù)都是連續(xù)產(chǎn)生的。連續(xù)產(chǎn)生的業(yè)務(wù)數(shù)據(jù),又被實時采集起來,就形成了數(shù)據(jù)流。
流式數(shù)據(jù)一經(jīng)采集,就可以立即參與計算,同時將計算結(jié)果投入到業(yè)務(wù)應(yīng)用中,這就是實時計算。實時數(shù)據(jù)計算其實早已經(jīng)進(jìn)入到人們生活的方方面面了,比如天氣預(yù)報,以前人們的習(xí)慣是每天接收一次天氣預(yù)報信息,現(xiàn)在則可以實時查看天氣預(yù)測,同一個時間點的天氣預(yù)測會隨著時間的接近越來越準(zhǔn)確,這就是監(jiān)測數(shù)據(jù)采集更新及實時數(shù)據(jù)計算帶來的效果。
根據(jù)興趣量身定制,實時計算讓產(chǎn)品越來越了解用戶
實時數(shù)據(jù)來源越來越多、數(shù)量越來越大,每年的數(shù)據(jù)量都在成倍地增長,這對實時計算本身是利好的,可以有更多的應(yīng)用場景、更好的應(yīng)用效果,還可能促成一些革命性的變化。那么,大數(shù)據(jù)實時計算還能做什么?
在網(wǎng)易,考拉海購雙11、618海淘盛典等活動期間,都會有一塊網(wǎng)易有數(shù)大屏幕實時展示當(dāng)前最新的銷售總額、每個商品品類的銷售比例、訂單增長趨勢、活躍用戶地理位置等,各種維度的信息都在一塊屏幕上不斷跳動。每個用戶每筆訂單所產(chǎn)生的影響都會實時更新到大屏上。這種可視化的實時應(yīng)用效果,除了增添一份電商狂歡節(jié)的氛圍,更易于發(fā)現(xiàn)數(shù)據(jù)價值,指導(dǎo)市場運營、輔助商業(yè)決策。
金融風(fēng)控是另一種典型的實時計算應(yīng)用場景。對金融業(yè)務(wù)這種風(fēng)險敏感的業(yè)務(wù)來說,僅僅能把數(shù)據(jù)可視化是遠(yuǎn)遠(yuǎn)不夠的,它需要流計算系統(tǒng)能夠利用一些風(fēng)險模型的匹配規(guī)則,去實時分析海量的用戶行為數(shù)據(jù),發(fā)現(xiàn)異常事件、判斷風(fēng)險等級,并作出相應(yīng)的風(fēng)險控制措施,自動化地去做報警通知、改變業(yè)務(wù)流程。通過實時計算做金融風(fēng)控,帶來的好處是更快、更準(zhǔn)、更廣。其他許多類似風(fēng)控這樣的事件驅(qū)動計算場景,實時計算都能解決好。
實時計算在推薦領(lǐng)域的應(yīng)用也已經(jīng)很深入了。不論是新聞推薦、音樂推薦還是讀書推薦,基本都已經(jīng)做到了千人千面,每個人接收到的推送內(nèi)容都是根據(jù)個人興趣偏好量身定制的。而用戶的興趣偏好,往往是通過實時數(shù)據(jù)計算不斷在更新的。 以新聞推送為例,當(dāng)用戶點擊一條條推送消息時,背后產(chǎn)品其實時刻在對用戶的行為做實時分析,實時更新用戶的興趣偏好,不斷發(fā)現(xiàn)用戶新的興趣點,對用戶越來越了解,最后給用戶推送他更感興趣的內(nèi)容。再以音樂推薦為例,如果一個用戶某段時間收藏了幾首悲傷的歌曲,通過實時數(shù)據(jù)分析,系統(tǒng)可以識別出這一信息,同時有針對性的推送一些歌曲去撫慰用戶。這種場景是只有實時計算才能解決的,也最能體現(xiàn)實時計算的價值。
越來越多的實時計算場景會被開發(fā)出來,未來人們對“一切都在變化之中”的感受會越來越深刻。
從“先存后算”到“邊算邊存”,實時計算不再怕“大”數(shù)據(jù)
實時計算這么好,在實現(xiàn)層面應(yīng)該怎么做,有哪些困難和挑戰(zhàn)是必須解決的?
首先從整體架構(gòu)看,數(shù)據(jù)計算,無外乎三樣?xùn)|西:數(shù)據(jù)輸入→計算→數(shù)據(jù)輸出。傳統(tǒng)的計算模型,以數(shù)據(jù)庫為例,是先將數(shù)據(jù)存儲在一個數(shù)據(jù)表中,用戶通過執(zhí)行查詢語句觸發(fā)數(shù)據(jù)庫的計算操作,最后數(shù)據(jù)庫完成計算后輸出結(jié)果。這種“先存后算”的模型在大數(shù)據(jù)實時計算場景下是行不通的。我們所要計算的數(shù)據(jù)很“大”,一個計算結(jié)果所涉及的源數(shù)據(jù)可能是涵蓋過往一天的數(shù)據(jù),可能是上千億條數(shù)據(jù)記錄。如果每增加一些新數(shù)據(jù),都把所有數(shù)據(jù)都重新計算一遍,這樣的開銷是非常大的,最終的效果會是很“慢”,達(dá)不到實時的效果。比較合理的做法是“邊算邊存”,意思是數(shù)據(jù)進(jìn)入實時計算系統(tǒng)后,不一定需要先存儲起來,可以直接參與計算,而且這里的計算是把當(dāng)前新增的數(shù)據(jù)在之前歷史數(shù)據(jù)的計算結(jié)果上做“增量計算”,同一條數(shù)據(jù)不重復(fù)參與計算,計算完成之后,再把計算結(jié)果保存起來,供業(yè)務(wù)使用,這時數(shù)據(jù)存儲的壓力也小了很多。同時“大”意味著數(shù)據(jù)并發(fā)很高,每秒可能需要計算上千萬條新數(shù)據(jù),這樣的計算量不是單機能承受的,所以大數(shù)據(jù)實時計算要解決好的是分布式系統(tǒng)架構(gòu)下的一系列技術(shù)問題。
分布式實時計算面臨的挑戰(zhàn)包括很多方面。數(shù)據(jù)從采集、到計算、到輸出整個過程必須做到低延遲,除了計算節(jié)點本身采用“增量計算”的模型,還要求上游數(shù)據(jù)傳輸模塊具有很高的吞吐能力,并且具備數(shù)據(jù)緩存的能力,在大流量場景下可以起到緩沖的作用,下游輸出模塊也需要做數(shù)據(jù)壓縮、批量輸出等優(yōu)化,以保證輸出結(jié)果的實時性。低延遲這個大前提對實時計算系統(tǒng)的其他特性提出了更高的要求。比如雙11凌晨0點的時候,大量消費者在同一時刻下單支付,這是涌進(jìn)實時計算系統(tǒng)的瞬時數(shù)據(jù)量是巨大的,系統(tǒng)需要有強大的并行處理數(shù)據(jù)的能力,將大量瞬時流量合理分配到成百上千個計算節(jié)點,并將這些節(jié)點的計算結(jié)果匯聚到一起計算出一個總體的結(jié)果,在高吞吐的情況下仍保證低延遲。
從“批量計算”到“增量計算”,最具挑戰(zhàn)的是準(zhǔn)確性和易用性
和低延遲同樣關(guān)鍵的挑戰(zhàn)是準(zhǔn)確性。“增量計算”模型和傳統(tǒng)“批量計算”模型是有區(qū)別的,所以不能照搬過往的技術(shù)經(jīng)驗,否則就會有準(zhǔn)確性方面的問題。需要考慮清楚新進(jìn)入的數(shù)據(jù)如何疊加到老的計算結(jié)果上,有些場景下甚至要支持從老的計算結(jié)果中撤除部分計算值,以保證最終結(jié)果的準(zhǔn)確性。
分布式系統(tǒng)中的某個節(jié)點出現(xiàn)故障是很常見的,實時流計算系統(tǒng)的故障恢復(fù)能力也相當(dāng)重要,因為當(dāng)故障發(fā)生時,系統(tǒng)必須快速恢復(fù),否則系統(tǒng)的輸出更新可能就停滯了,實時性也就無從談起。同時故障發(fā)生也不能破壞“增量計算”這個模型,否則退化到“批量計算”的模型就又得不到實時的計算結(jié)果了,而且結(jié)果準(zhǔn)確性也難以保證。
事實上網(wǎng)易大數(shù)據(jù)在實現(xiàn)自研流計算平臺Sloth的過程中,遇到并克服了上述技術(shù)難點。網(wǎng)易流計算平臺Sloth作為一個平臺化的產(chǎn)品,在產(chǎn)品易用性、多租戶隔離方面做了大量的工作。就實時計算而言,易用性是一個比較值得討論的方面。
對于開發(fā)人員而言,寫一個分布式程序比寫單機程序會困難一些,而寫一個分布式實時計算程序,會更難。好在業(yè)界有一些開源的流計算引擎幫助完成了不少工作,開發(fā)人員可以使用這些流計算引擎完成流計算任務(wù)的開發(fā),他們可能不再需要關(guān)心計算任務(wù)如何分發(fā)到多個計算節(jié)點上、數(shù)據(jù)在計算節(jié)點間如何傳輸?shù)葐栴},只需要專注于計算邏輯的開發(fā)、控制好不同計算階段的計算并行度。
以計算一篇文章的單詞數(shù)為例,一個分布式計算程序的內(nèi)容可能包括三個部分,首先是用幾個計算節(jié)點共同把每一行文本拆分成一個一個的單詞;第二步是用另外一些計算節(jié)點去統(tǒng)計單詞的個數(shù)(考慮到數(shù)據(jù)量巨大的情況,這里有必要用多個節(jié)點去做計算);第三步是由一個計算節(jié)點把上游各各節(jié)點算出的部分計數(shù)匯聚成一個總的計數(shù)。這樣一個最簡單的場景,需要開發(fā)的代碼量大約是200行。實際業(yè)務(wù)場景下,數(shù)據(jù)流經(jīng)的計算節(jié)點遠(yuǎn)遠(yuǎn)不止3個,計算類型也比基礎(chǔ)的求和復(fù)雜很多,所以即使有了流計算引擎,分布式實時計算程序的開發(fā)仍然是比較困難的。再進(jìn)一步看,即使開發(fā)完成了,還需要把大量的時間投入到調(diào)試、計算框架維護(hù)等方面,一旦計算需求發(fā)生變化,所有的工作都需要重新迭代一遍,這是個比較痛苦的過程。如何讓流式計算程序更易編寫,是實時計算平臺需要去完成的挑戰(zhàn)。
且不考慮實時流計算系統(tǒng)如何解決易用性這個問題,看下計算機科學(xué)發(fā)展過程中,類似問題是怎么解決的。人們希望編程可以容易一些,所以越來越多的高級編程語言被發(fā)明出來了;人們希望數(shù)據(jù)計算可以容易一些,然后就有了數(shù)據(jù)庫,以及SQL語言——結(jié)構(gòu)化查詢語言;到了大數(shù)據(jù)時代,人們還在折騰離線批量計算的時候,就遇到的依靠計算引擎編程復(fù)雜的問題,最終通過把SQL語言應(yīng)用到分布式離線計算系統(tǒng)上,解決了這個問題。而現(xiàn)在實時計算的迅速發(fā)展的現(xiàn)在,是否同樣可以用SQL語言去解決這個問題?答案是肯定的。不過有許多細(xì)節(jié)的問題需要去推敲求證。
實時流計算中的數(shù)據(jù)流,可以理解為一張動態(tài)的數(shù)據(jù)表
上文提及了離線批量計算模型和實時增量計算模型是有差異的,當(dāng)SQL語言分別作用與批量計算和流式計算時,其語義也是需要發(fā)生變化的。批量計算和流式計算最主要的區(qū)別是前者計算的數(shù)據(jù)是有限的、后者計算的數(shù)據(jù)是無限的是不斷采集進(jìn)入系統(tǒng)的。當(dāng)一個SQL查詢作用在一批離線數(shù)據(jù)上面時,計算完成、輸出結(jié)果,這條SQL查詢也就完成了。映射到流式計算,當(dāng)SQL查詢觸發(fā)計算,它是不會結(jié)束的,因為數(shù)據(jù)在持續(xù)不斷地流入,按照離線SQL的語義,SQL結(jié)束之前,計算不會輸出結(jié)果,這顯然不是流計算期望的效果,所以流式SQL其本質(zhì)應(yīng)當(dāng)是定義一系列流計算任務(wù),同時這些任務(wù)是邊執(zhí)行邊輸出計算結(jié)果的。
離線SQL處理的是靜態(tài)數(shù)據(jù)表,而流式SQL處理的是數(shù)據(jù)流,SQL的計算語義(如求和、平均值、數(shù)據(jù)表連接等)作用在數(shù)據(jù)流上是否合理。理解這個問題需要做一個概念上的轉(zhuǎn)換:離線SQL是把靜態(tài)的數(shù)據(jù)表轉(zhuǎn)換成另一張靜態(tài)數(shù)據(jù)表;而實時流計算中的數(shù)據(jù)流,可以理解為一張動態(tài)的數(shù)據(jù)表(數(shù)據(jù)會不斷增長的動態(tài)數(shù)據(jù)表)。不同的時刻這個數(shù)據(jù)表又不同的樣子,執(zhí)行SQL會得到不同的計算結(jié)果,把這些不同的計算結(jié)果像電影幻燈片放映一樣串聯(lián)起來,我們就得到了一張動態(tài)的結(jié)果表——流式SQL做的工作就是把一張動態(tài)數(shù)據(jù)表轉(zhuǎn)換成另一張動態(tài)數(shù)據(jù)表,這樣流SQL的計算語義就比較容易理解了。實時流計算系統(tǒng)要解決的問題就縮小到了“如何實現(xiàn)動態(tài)數(shù)據(jù)表的計算”上來。
流SQL引擎的自動優(yōu)化是當(dāng)前主要的技術(shù)突破方向
實時流計算系統(tǒng)的易用性,是可以用SQL語言來解決的,網(wǎng)易流計算平臺Sloth的生產(chǎn)實踐也證實了這一理論。用戶不再需要學(xué)習(xí)各種計算引擎的編程接口,不再需要調(diào)試分布式計算程序,不再需要自己維護(hù)流計算系統(tǒng),只需要把原來跑在離線平臺上的SQL遷移到實時流計算平臺上,就可以完成復(fù)雜的實時計算邏輯。
用戶端的工作大大減少了,實時流計算平臺的工作勢必是要增加的,其中比較困難的部分是如何把SQL查詢轉(zhuǎn)化成實際的計算邏輯,實現(xiàn)一個支持流式SQL的計算引擎,類似數(shù)據(jù)庫引擎的角色,而且就像之前討論的,這個引擎的計算邏輯必須符合“增量計算”模型。同時為了能讓實時計算結(jié)果應(yīng)用到各種各樣的業(yè)務(wù)場景中,計算引擎需要能夠?qū)痈鞣N存儲角色,比如數(shù)據(jù)、消息隊列、離線存儲等。
雙11大屏只是大數(shù)據(jù)實時流計算的一種應(yīng)用場景,未來會有越來越多的實時計算場景,比如除了文本計算實時化,圖像、語音計算也可以實時化,在線機器學(xué)習(xí),物聯(lián)網(wǎng)實時計算等。實時數(shù)據(jù)以及實時流計算場景的類型都是指數(shù)增長的,實時計算引擎會面臨不小的挑戰(zhàn)?;赟QL的流式計算描述也正在向前演化,會越來越多的納入流計算特有的屬性,比如輸出觸發(fā)、過期數(shù)據(jù)處理、多種規(guī)則的數(shù)據(jù)窗口劃分等。流SQL引擎的自動優(yōu)化也是當(dāng)前主要的一個技術(shù)突破方向,相信未來實時流計算會隨著技術(shù)的進(jìn)步,應(yīng)用得跟深入、更廣泛。
- 微軟停止中國區(qū)運營?系外包公司,約2000人項目組被裁撤
- 第九屆華為ICT大賽中國總決賽收官 84支隊伍晉級全球總決賽
- 聯(lián)想集團黃建恒:SSG業(yè)務(wù)已連續(xù)15個季度雙位數(shù)增長
- 聯(lián)想集團ISG總裁:已將多款暢銷服務(wù)器進(jìn)行升級
- 全球超大規(guī)模數(shù)據(jù)中心數(shù)量五年翻倍,2024年新增137個!
- 華為楊超斌:行業(yè)智能化是開啟產(chǎn)業(yè)新紀(jì)元的磅礴引擎
- 華為郭振興:2025年行業(yè)數(shù)智化將呈現(xiàn)五大特征
- 加速行業(yè)智能化!華為攜手伙伴共筑解決方案競爭力,共贏時代新機遇
- 華為李鵬:AI正深刻改變每一個行業(yè),攜手伙伴共贏全面智能化時代
- 華為汪濤:全面推進(jìn)“全面智能化”戰(zhàn)略,發(fā)展伙伴“同路人”共贏智能未來
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。