1
本文作者: 三川 | 2017-04-22 18:56 |
本周四,雷鋒網(wǎng) AI 研習(xí)社邀請了跨國 IT 巨頭 ThoughtWorks 的資深數(shù)據(jù)架構(gòu)師白發(fā)川,主講線上公開課,為大家講解 TensorFlow 在工程項(xiàng)目中的應(yīng)用。
此前,白老師與 ThoughtWorks 高級咨詢師佟達(dá)接受了雷鋒網(wǎng)的采訪,就新手入門 TensorFlow 容易遇到的一些問題,以及他們的入門經(jīng)歷,進(jìn)行了分享。請參考:萬事開頭難!入門TensorFlow,這9個(gè)問題 TF Boys 必須要搞清楚。
另外, ThoughtWorks 的線上培訓(xùn)——"TensorFlow & 神經(jīng)網(wǎng)絡(luò)算法高級應(yīng)用班”,將于下周二在 mooc.ai 上線,由兩位老師授課。報(bào)名請點(diǎn)擊。
閑話少說,本次公開課承接對兩位老師的采訪,對兩個(gè)話題進(jìn)行了梳理:
企業(yè)大數(shù)據(jù)平臺
TensorFlow 應(yīng)用場景
這是公開課的錄制視頻:
不方便看視頻的童鞋,可閱讀以下對本次公開課的文字轉(zhuǎn)錄。
由于篇幅較長,本次公開課的文字轉(zhuǎn)錄被拆為上下兩部分。本篇為上篇,講的是企業(yè)級的大數(shù)據(jù)平臺及其架構(gòu)。這是由于 TensorFlow 的商業(yè)工程應(yīng)用必以靠得住的大數(shù)據(jù)基礎(chǔ)設(shè)施為前提。
TensorFlow 的應(yīng)用場景請關(guān)注下篇。
白發(fā)川:大家晚上好,歡迎大家這次參加本次公開課,同時(shí)也作為 "TensorFlow & 神經(jīng)網(wǎng)絡(luò)算法高級應(yīng)用班”開題前的宣講。
本次講的是 TensorFlow 在工程方面的應(yīng)用場景,更多偏向工程上的實(shí)踐。也就是說,從工程上來講,一個(gè) TensorFlow 項(xiàng)目在各個(gè)方面要做哪些工作。
TensorFlow 作為一個(gè)深度學(xué)習(xí)框架,在整個(gè)工程開發(fā)的項(xiàng)目中,它只是其中的一部分——我們實(shí)際上做開發(fā),面臨的是一個(gè)非常龐大的體系。因此我們面臨的問題是:
在整個(gè)體系中,我們的工程應(yīng)該怎樣去開發(fā)?
應(yīng)該怎樣去使用 TensorFlow?
在哪種場景之下,TensorFlow 會(huì)是一個(gè)比較好的選擇?
自我介紹一下,我是 ThoughtWorks 白發(fā)川,之前一直從事大數(shù)據(jù),后來我們開始做人工智能方向的一些嘗試和工作。我們致力于將人工智能、機(jī)器學(xué)習(xí)、大數(shù)據(jù)結(jié)合在一塊。在研究了了很多相關(guān)的機(jī)器學(xué)習(xí)框架之后,我們也做了自己的深度學(xué)習(xí)框架——deeplearning.scala。它由 scala 編寫,目前是開源的,大家可以了解下。
這是關(guān)于我們公司。大家可以在網(wǎng)上了解到,ThoughtWorks 是“敏捷”的倡導(dǎo)者。比如說《重構(gòu)》,還有《Web開發(fā)敏捷之道》,這些書都是由我們公司的同事編寫的。
下面進(jìn)入本公開課的第一個(gè)環(huán)節(jié)。
做人工智能也好,做其他機(jī)器學(xué)習(xí)相關(guān)的項(xiàng)目也好,本質(zhì)上我們是離不開數(shù)據(jù)的。因此,怎樣去規(guī)劃我們的數(shù)據(jù)、怎樣去設(shè)計(jì)我們的架構(gòu),是非常重要的。以我的經(jīng)驗(yàn)看來,一切不做大數(shù)據(jù)架構(gòu)的人工智能項(xiàng)目,都不會(huì)有特別好的效果。
人工智能項(xiàng)目和數(shù)據(jù)項(xiàng)目是可以完全獨(dú)立開的。假設(shè)我們只有幾條數(shù)據(jù),倒也可以做人工智能。但真正面臨生產(chǎn)的時(shí)候,如果沒有做底層數(shù)據(jù)規(guī)劃,你的整個(gè)人工智能的效果基本會(huì)是負(fù)的,不會(huì)產(chǎn)生特別大的效果。
在數(shù)據(jù)方面,從早期到現(xiàn)在,我們經(jīng)歷了不同的迭代周期:
最早期的數(shù)據(jù)處理方式很簡單,可能就是搞搞 Excel,現(xiàn)場就把數(shù)據(jù)計(jì)算出來了。
慢慢地,我們的數(shù)據(jù)管理方式會(huì)傾向于使用數(shù)據(jù)庫。多個(gè)客戶端連接同一個(gè)數(shù)據(jù)庫,來做數(shù)據(jù)處理。
再后來我們發(fā)明了 Data Warehouse。BI時(shí)代,我們的所有數(shù)據(jù)都是經(jīng)過 Data Warehouse 之后統(tǒng)一地產(chǎn)生報(bào)表。
之后進(jìn)化到目前的階段,隨著計(jì)算機(jī)硬件的發(fā)展,我們出現(xiàn)了數(shù)據(jù)湖——Data Lake。數(shù)據(jù)湖是在 Data Warehouse 之上更加擴(kuò)充的一個(gè)方面,而它為機(jī)器學(xué)習(xí)做了很好的支撐。
在數(shù)據(jù)分析這一塊,早期大家的需求只是一個(gè)數(shù)據(jù)可視化:我根據(jù)數(shù)據(jù)可視化的結(jié)果來做決策、來做判斷,然后給出關(guān)鍵決策指導(dǎo)下一步的發(fā)展方向。到引入機(jī)器學(xué)習(xí)之后,有一部分相關(guān)分析工作其實(shí)是讓計(jì)算機(jī)去做了。當(dāng)我們的數(shù)據(jù)計(jì)算出結(jié)果之后,可以由計(jì)算機(jī)作出初步的決策給人提供參考,然后再由人來做最終的決策,這也是目前人工智能方向最常見的方式。
雖然我們在做人工智能,但還沒有達(dá)到不做任何干預(yù)、百分之百由計(jì)算機(jī)出結(jié)果的層次.。所以本質(zhì)上,目前的人工智能還是對人的一個(gè)輔助參考。我們還是需要人來做處理。當(dāng)然,人工智能最終的進(jìn)化方案,我們一定是希望完全靠計(jì)算機(jī)來做處理,不用人來處理了。
這個(gè)架構(gòu)圖是一個(gè)企業(yè)界的大數(shù)據(jù)架構(gòu)平臺。對于一個(gè)企業(yè)來講,從歷史發(fā)展過程中它會(huì)有一個(gè)非常龐大的 IT 體系,它的數(shù)據(jù)源遍布于不同系統(tǒng)之中。在很早的時(shí)候我們會(huì)提出一個(gè)概念叫做數(shù)據(jù)整合,就是因?yàn)橥慌尉哂邢嗤瑯I(yè)務(wù)含義的數(shù)據(jù)在不同的系統(tǒng)里邊,它的存儲(chǔ)方式、表示方式完全都不一樣。所以為了做這部分工作,誕生了早期的 Data Warehouse。我們以規(guī)整化的數(shù)據(jù)、元數(shù)據(jù),把這一批數(shù)據(jù)做處理。
對于一個(gè)企業(yè)級的大數(shù)據(jù)平臺,我們除了要做 BI 的這部分工作,還有一個(gè)額外的需求,就是機(jī)器學(xué)習(xí)。我們希望我們的大數(shù)據(jù)架構(gòu)可以用來支撐機(jī)器學(xué)習(xí)。可以在架構(gòu)圖中看到,在前面會(huì)有數(shù)據(jù)通道。數(shù)據(jù)通道可以理解為 BI 里 ETL 的這一部分,但本質(zhì)上它高于 ETL,對于數(shù)據(jù)通道來說,它和ETL的差別在于ETL需要對數(shù)據(jù)做轉(zhuǎn)換,而數(shù)據(jù)通道僅僅是同步數(shù)據(jù),其次ETL相對是個(gè)獨(dú)立模塊,而數(shù)據(jù)通道是平臺的一部分,受調(diào)度器管理的,比如我們的數(shù)據(jù)通道的功能可以是爬蟲。
接下來我們會(huì)進(jìn)入數(shù)據(jù)湖。數(shù)據(jù)湖是大數(shù)據(jù)里邊提出的一個(gè)概念,從本質(zhì)上來講,它主要負(fù)責(zé)的是數(shù)據(jù)存儲(chǔ),對于數(shù)據(jù)存儲(chǔ)來講,它在大數(shù)據(jù)之下,它要解決好幾種問題,即結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)這些不同數(shù)據(jù)類型的存儲(chǔ)。
其次的話,它要解決的是數(shù)據(jù)安全性、數(shù)據(jù)可靠性。在這個(gè)基礎(chǔ)之上,大家目前看到的 Hadoop 的底層數(shù)據(jù)實(shí)現(xiàn)hdfs它也是數(shù)據(jù)湖會(huì)常用到的一種實(shí)現(xiàn)。
再往下,我們可以看到數(shù)據(jù)探索。當(dāng)你成為一個(gè)企業(yè)級大數(shù)據(jù)平臺之后,會(huì)面臨這樣的情況:
我給企業(yè)做了數(shù)據(jù)整合,我們的數(shù)據(jù)湖都存在了,但在接下來要做機(jī)器學(xué)習(xí)的時(shí)候,會(huì)發(fā)現(xiàn)一個(gè)問題——我沒有辦法快速的知道,在企業(yè)里邊我到底需要哪些數(shù)據(jù);或者說企業(yè)現(xiàn)在已有的這些數(shù)據(jù),但是這些數(shù)據(jù)特別大,我們怎么才能夠知道目前有哪些數(shù)據(jù)?都是什么格式?
在這個(gè)之上誕生的服務(wù)叫做 data discovery,翻譯過來是數(shù)據(jù)探索。這一項(xiàng)工作本質(zhì)上是為數(shù)據(jù)科學(xué)家做準(zhǔn)備的。我們在搭建了數(shù)據(jù)服務(wù)平臺之后,我們需要做一系列的調(diào)研,從數(shù)據(jù)科學(xué)家的角度來審視這批數(shù)據(jù),來看它代表的特征和維度到底能不能給我們提供一個(gè)非常好的人工智能的支撐。
所以,這部分工作更多的是由具有豐富經(jīng)驗(yàn)的數(shù)據(jù)科學(xué)家來承擔(dān)的。他們需要的就是一個(gè)簡單的數(shù)據(jù)探索工具,因?yàn)椴⒉恍枰磕贸鋈ァ6鴮τ跀?shù)據(jù)湖來講,我們里面放的數(shù)據(jù)基本上都是 PB 的。在我們所做的項(xiàng)目里面,TB 和 TB 以上的數(shù)據(jù)特別常見。所以對于數(shù)據(jù)科學(xué)家來講, 沒有必要 load 完整的數(shù)據(jù),代價(jià)太大,更希望的是快速檢索到數(shù)據(jù)格式,然后哪幾條要列數(shù)據(jù)出來,看一下這個(gè)數(shù)據(jù)符不符合我的需求,所以在這個(gè)之上,我們需要一個(gè)數(shù)據(jù)探索的服務(wù),給他提供這樣的支撐。
另外,本質(zhì)上來講它還有一個(gè)功能:管理數(shù)據(jù)服務(wù)的云數(shù)據(jù)。因?yàn)槲覀兗热恍枰焖俚牟檎覕?shù)據(jù),那么對于數(shù)據(jù)湖來講,我們的數(shù)據(jù)(元數(shù)據(jù))是不是需要被管理起來?比如說,如果我們提供的是一個(gè)數(shù)據(jù)平臺,從數(shù)據(jù)通道進(jìn)來的數(shù)據(jù)到底是屬于哪一個(gè)業(yè)務(wù)系統(tǒng)的,是怎么規(guī)劃的,都會(huì)在里邊。
再下邊的話到了數(shù)據(jù)預(yù)處理。
它的數(shù)據(jù)來自于數(shù)據(jù)湖。這里提一下數(shù)據(jù)湖和數(shù)據(jù)倉庫的差異。在傳統(tǒng) BI 系統(tǒng)里,數(shù)據(jù)源到數(shù)據(jù)存儲(chǔ)之間有一個(gè)過程叫做 ETL。做數(shù)據(jù)規(guī)整之后,ETL 會(huì)再把數(shù)據(jù)送入 Data Warehouse,而在大數(shù)據(jù)架構(gòu)里面我們我們會(huì)發(fā)現(xiàn),其實(shí)我們的基本處理,是在數(shù)據(jù)湖之上做的數(shù)據(jù)預(yù)處理。
這個(gè)時(shí)候,數(shù)據(jù)湖和 Data Warehouse 的區(qū)別在哪個(gè)地方?
首先對 Data Warehouse 的所有數(shù)據(jù)都是被規(guī)整過的,意味著它的數(shù)據(jù)是結(jié)構(gòu)化的,結(jié)構(gòu)化就意味著信息被丟失了。丟失的數(shù)據(jù),可能對于你的靜態(tài)業(yè)務(wù)需求并不是那么明顯——比如說我只是出個(gè)報(bào)表,或者只是做一些統(tǒng)計(jì),求平均之類的計(jì)算,那我可能把數(shù)據(jù)規(guī)整了,沒有什么問題。但如果要做機(jī)器學(xué)習(xí),我們更希望提取到全量的數(shù)據(jù)特征。而一旦數(shù)據(jù)被規(guī)整,很大一部分信息就丟失了。這樣以來,當(dāng)通過機(jī)器學(xué)習(xí)做特征提取的時(shí)候,就會(huì)出現(xiàn)非常不準(zhǔn)確的問題。
另外,對 Data Warehouse 來講,它更注重的是對結(jié)構(gòu)化數(shù)據(jù)的管理。而在大數(shù)據(jù)之下,其實(shí)結(jié)構(gòu)化數(shù)據(jù)只是我們要處理的一部分?jǐn)?shù)據(jù),并不是全量的。除此之外,我們有非結(jié)構(gòu)化數(shù)據(jù)和半結(jié)構(gòu)化數(shù)據(jù),而對于這種數(shù)據(jù)的處理,Data Warehouse 并不是特別的有效。
數(shù)據(jù)湖的概念因此誕生。我們的所有數(shù)據(jù)都放在數(shù)據(jù)湖,我們的處理放在數(shù)據(jù)預(yù)處理這一塊。預(yù)處理會(huì)跟隨我們的業(yè)務(wù),當(dāng)我們需要一個(gè)什么樣的業(yè)務(wù)的時(shí)候,會(huì)通過數(shù)據(jù)預(yù)處理來處理。這里的話,我們把之前提到的工作,從數(shù)據(jù)通道到數(shù)據(jù)湖之間的這個(gè)位置,挪到了后面的數(shù)據(jù)預(yù)處理。
對于企業(yè)來講,我們的組織結(jié)構(gòu)都能良好的運(yùn)作。因?yàn)樵?BI、Data Warehouse 來講,會(huì)有一個(gè)團(tuán)隊(duì)或者說一個(gè)角色,專門負(fù)責(zé) ETL 這個(gè)工作;或者把數(shù)據(jù)從另外一個(gè)地方做處理之后遷移過來。這樣的話,當(dāng)我們的業(yè)務(wù)發(fā)生變化,我們的整個(gè)數(shù)據(jù)源要從新數(shù)據(jù)接觸的地方重新清洗過來,重新打通。這一個(gè)響應(yīng)周期會(huì)特別長,
而在大數(shù)據(jù)架構(gòu)之下,由于有數(shù)據(jù)湖,這一塊業(yè)務(wù)發(fā)生變更的是我們所做的,挪的只是計(jì)算。我們的計(jì)算規(guī)則發(fā)生了變化,但數(shù)據(jù)湖里面的數(shù)據(jù)照樣在里邊。所以計(jì)算的代價(jià)肯定是遠(yuǎn)遠(yuǎn)小于挪數(shù)據(jù)的。
數(shù)據(jù)預(yù)處理之后,會(huì)有兩個(gè)分支。上邊的分支是在線分析、數(shù)據(jù)可視化。這一塊來講,都是為了符合和囊括早期我們在做 BI 系統(tǒng)所需要的那些東西。比如說我們要做靜態(tài)報(bào)表展現(xiàn),在 BI 系統(tǒng)里最終出來的報(bào)表有上鉆和下鉆。這些需求方式其實(shí)用在線分析都可以做到。而目前在大數(shù)據(jù)方面,我們也會(huì)把傳統(tǒng)思想、傳統(tǒng)BI 方式里邊的一些思想借鑒過來,它們是特別優(yōu)秀的。比如說 Olap 和創(chuàng)建 Cube 的這種方式,在整個(gè)數(shù)據(jù)分析里邊有非常好的作用。所以目前來講,這一塊我們是可以完全涵蓋的。
下邊是機(jī)器學(xué)習(xí)和決策分析。數(shù)據(jù)預(yù)處理本身并不是做一些靜態(tài)的報(bào)表分析相關(guān)的工作,而數(shù)據(jù)預(yù)處理囊括了特征提取,這是用來給機(jī)器學(xué)習(xí)做支撐的部分。這樣的話,我們數(shù)據(jù)預(yù)處理出來的分支既可以滿足它靜態(tài)的數(shù)據(jù)分析,也可以滿足我們要做機(jī)器學(xué)習(xí)相關(guān)的操作。
最下層有一個(gè)服務(wù)調(diào)度。我們可以看到我們的服務(wù)調(diào)度,從基數(shù)到最終,都是被整個(gè)服務(wù)調(diào)度起來的,就我們會(huì)建立一個(gè)統(tǒng)一的大數(shù)據(jù)調(diào)度系統(tǒng),而這樣一個(gè)好處在于,所有的任務(wù)被調(diào)度系統(tǒng)統(tǒng)一調(diào)度,會(huì)有一個(gè)非常好的任務(wù)編排按序執(zhí)行。
另外一種方式。對于早期做 BI 系統(tǒng)時(shí)的 ETL 工具,像大家見得比較多的 Kettle 這種工具,相對來講會(huì)缺乏調(diào)度功能。第一它缺乏調(diào)度,第二的話它不是特別友好的支持分布式運(yùn)行。比如說我們運(yùn)行一個(gè) Kettle的腳本,它可以把數(shù)據(jù)從一個(gè)數(shù)據(jù)源抽到另外一個(gè)數(shù)據(jù)源,但本身來講,你這個(gè)工具沒法像 Spark 那樣分布到不同節(jié)點(diǎn),并行得做處理。所以,當(dāng)我們有一個(gè)服務(wù)調(diào)度層的時(shí)候,可以把所有的任務(wù)全部調(diào)度起來。這樣的話,我們既保證了所有的 job 是可被監(jiān)控的,其次也可以保存一部分狀態(tài),比如說我某一個(gè) job 失敗,我知道從哪個(gè)地方再次恢復(fù)。當(dāng)我們有了服務(wù)調(diào)度,我們能夠拿到它的所有狀態(tài)。對于最右邊這塊,我們可以給它做到很好的監(jiān)控。
前邊我提到,對于一個(gè)企業(yè)來講,我們無論是做人工智能還是做數(shù)據(jù)分析,前提一定是規(guī)劃好它的大數(shù)據(jù)平臺。大數(shù)據(jù)平臺直接決定了后面所有的效果到底好不好。所以我們定義了一個(gè)企業(yè)數(shù)據(jù)成熟度的模型。在目前來講,可能很多需求或者說我們所見到的場景,大家都會(huì)說我們就是要做人工智能,我們的目標(biāo)是做人工智能。但實(shí)際上,從現(xiàn)實(shí)情況來講,要到達(dá)真正的成熟的人工智能,它中間有很大的跨度。
那這個(gè)跨度到底怎樣去衡量?
在這之上,我們提出一個(gè)數(shù)據(jù)傳輸模型,評估當(dāng)前你所在的狀態(tài)在哪個(gè)位置;其次,你想要的是一個(gè)什么結(jié)果。
比如說在第一個(gè)階段,我們想要知道的,只是從數(shù)據(jù)里面發(fā)現(xiàn)問題。這時(shí)的需求很簡單,我只是做一個(gè)訂單報(bào)表,展示相關(guān)的工具。這個(gè)時(shí)候,你可能并不會(huì)實(shí)施人工智能的一些功能,因?yàn)檫€沒有到達(dá)這個(gè)層次。你當(dāng)前所具備的需求,或者說你所具備的數(shù)據(jù)源,根本不支持你做這件事兒。
有了該評估之后,除了可以梳理出它的現(xiàn)狀,和給它做評估之外,我們還可以根據(jù)前邊的整個(gè)大數(shù)據(jù)方案來決定你可以實(shí)施到哪一層。前邊我們看到的大數(shù)據(jù)架構(gòu)方案,本質(zhì)上它的每一塊可以獨(dú)立出來,作為一個(gè)循序漸進(jìn)的過程。這里我們可以看到好幾個(gè)階段:
首先,看它發(fā)生了什么。
第二,分析它為什么發(fā)生。
第三個(gè)階段,知道它將會(huì)發(fā)生什么。
這個(gè)階段會(huì)涉及人工智能。也就是說,只有到達(dá)第三個(gè)階段的時(shí)候,我們才認(rèn)為對企業(yè)來講,你的所有的業(yè)務(wù)需求和數(shù)據(jù)支撐已經(jīng)到達(dá)了人工智能需要介入的階段。這個(gè)時(shí)候,我們會(huì)在你的大數(shù)據(jù)平臺之上,考慮把你的整個(gè)機(jī)器學(xué)習(xí)接入。
所以,達(dá)到這種不同階段實(shí)現(xiàn)不一樣的功能,也是對數(shù)據(jù)平臺的一個(gè)非常嚴(yán)格的考核。就是你的每一個(gè)階段可以無縫的遞增到下一個(gè)階段。之后,當(dāng)我們預(yù)測了將會(huì)發(fā)生什么事的時(shí)候,我們一定會(huì)想怎樣去優(yōu)化它,這就到了最后一個(gè)階段。
當(dāng)我們的機(jī)器有了數(shù)據(jù)、有了模型,機(jī)器學(xué)習(xí)的整個(gè)體系已經(jīng)非常完善了,就可以達(dá)到一個(gè)自選型的功能。它可以根據(jù)你的數(shù)據(jù),找出你自己依靠人的經(jīng)驗(yàn)都沒有發(fā)現(xiàn)的東西。這是我們希望達(dá)到的終極目標(biāo)。
在這一節(jié)將為大家展示,我們所做過的、或我們看到總結(jié)下來的大數(shù)據(jù)架構(gòu)的不同實(shí)踐方式。
這是一個(gè)傳統(tǒng)的架構(gòu)。在機(jī)器學(xué)習(xí)很早之前有一個(gè)過程:做 BI 系統(tǒng)之后會(huì)有一個(gè)階段——當(dāng)數(shù)據(jù)量上來, Data Warehouse 的數(shù)據(jù)處理會(huì)出現(xiàn)瓶頸。這時(shí)候,我們需要一種架構(gòu),保持原來的業(yè)務(wù)不變。保持外圍需求,替換底層的技術(shù)部分,這樣整體性能會(huì)得到提升。這種架構(gòu)的實(shí)現(xiàn)一般會(huì)比較簡單。從最簡單來講,就是我們根據(jù)左邊的數(shù)據(jù)源,它可能是數(shù)據(jù)庫或者其他的 FTP,通過 ETL 工具把數(shù)據(jù)放到數(shù)據(jù)存儲(chǔ)層里邊。在最右邊給大家提供一個(gè)和原來效果差不多的服務(wù),在中間的話會(huì)有一個(gè)數(shù)據(jù)存儲(chǔ)和一個(gè)搜索引擎。這種搜索引擎主要提供檢索的功能。這種傳統(tǒng)架構(gòu)發(fā)展起來之后的話,我們又有了另外一種架構(gòu),叫流市架構(gòu)。
上文提到,傳統(tǒng)架構(gòu)本身是一個(gè)線性的服務(wù)。相對而言,它的響應(yīng)比較慢,ETL 更多是一個(gè)定時(shí)的。對于定時(shí)的數(shù)據(jù),我們的接入更多的是面對別人的備份數(shù)據(jù)庫,或者說,是在業(yè)務(wù)系統(tǒng)真正把數(shù)據(jù)落地到數(shù)據(jù)庫之后,我們才接入的。在這個(gè)角度來說,我們的所有數(shù)據(jù)是嚴(yán)重滯后于業(yè)務(wù)發(fā)展的,即業(yè)務(wù)產(chǎn)生數(shù)據(jù)。當(dāng)業(yè)務(wù)產(chǎn)生數(shù)據(jù)之后,你需要隔很長時(shí)間才能拿到這批數(shù)據(jù)。
在這之上我們提出了流式架構(gòu)。流式架構(gòu)就是:當(dāng)數(shù)據(jù)進(jìn)來之后,我們直接以流的形式把數(shù)據(jù)接入,甚至拿到流數(shù)據(jù)之后,我們把流數(shù)據(jù)以消息的形式直接推送到前端。這樣能很好地滿足僅僅具有預(yù)警類的功能。比如說我是做運(yùn)維的,那我可能需要一個(gè)流式數(shù)據(jù),來更好地滿足我當(dāng)前的一個(gè)實(shí)質(zhì)性。
在流式架構(gòu)之后,演變出了 Lambda 架構(gòu)。
前幾年,這個(gè)架構(gòu)在我們所有的系統(tǒng)里邊、涉及社交大數(shù)據(jù)架構(gòu)平臺的時(shí)候都被廣泛實(shí)施。Lambda 架構(gòu)在很長一段時(shí)間都是優(yōu)先的選擇。它主要分為兩個(gè)批次,整合了傳統(tǒng)架構(gòu)和流式架構(gòu)的一些優(yōu)點(diǎn)。在前面的話,對于數(shù)據(jù)處理這塊它是一樣的,是將數(shù)據(jù)接入。但在數(shù)據(jù)接入之后,它會(huì)分為兩個(gè)部分:
首先,你的數(shù)據(jù)會(huì)進(jìn)入數(shù)據(jù)湖,被永久存儲(chǔ)起來。
其次,數(shù)據(jù)會(huì)進(jìn)入流處理。流處理的數(shù)據(jù),根據(jù)你的一部分計(jì)算結(jié)果,立馬會(huì)以消息的形式直接推送給前端。流式處理,和上邊的 batch 處理,也就是數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)預(yù)處理,這一層我們一般稱為 batch job;而下面的流處理,我們稱為實(shí)時(shí)處理。這兩者的邏輯是一樣的,但面對的數(shù)據(jù)不一樣。上面數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)預(yù)處理這一塊,面對的是全量數(shù)據(jù);而下面流式處理面對的是增量數(shù)據(jù)。在 Lambda 架構(gòu)里邊有一個(gè)技術(shù)叫做前端 view 合并,就是我的流式處理是根據(jù)增量數(shù)據(jù)計(jì)算出來的結(jié)果,立馬就給前端展示;數(shù)據(jù)進(jìn)來之后它會(huì)觸發(fā)一個(gè) batch job,觸發(fā)全量計(jì)算。當(dāng)全量計(jì)算完成之后,它會(huì)把這個(gè)結(jié)果集和流式處理計(jì)算出來的結(jié)果集進(jìn)行合并,保證最終一致性。因?yàn)榱魇幚碛锌赡軙?huì)出錯(cuò),畢竟它是增量計(jì)算,那么全量計(jì)算一定要保證最終結(jié)果是正確的,所以這個(gè)時(shí)候會(huì)用 bash job 出來的結(jié)果去覆蓋流式處理,我們叫它最終一致性,就可以保證數(shù)據(jù)的正確性。
它相對于 Lambda 架構(gòu)做了一部分的改進(jìn):在 Kappa 架構(gòu)里邊,我們認(rèn)為數(shù)據(jù)都是流式的,就是說我們的所有數(shù)據(jù)都可以被流式處理。數(shù)據(jù)接入時(shí),我們的數(shù)據(jù)進(jìn)入了消息隊(duì)列,那么它會(huì)放入數(shù)據(jù)存儲(chǔ)里邊, 同時(shí)也會(huì)進(jìn)入流式處理。流式處理就和之前一樣:在做了處理之后以消息的形式推送到前端。
那為什么在數(shù)據(jù)存儲(chǔ)這一塊,它沒有了 batch job 這一層?它不再做離線計(jì)算,因?yàn)槲覀兊乃袛?shù)據(jù)是可重播的,當(dāng)我們發(fā)現(xiàn)某個(gè)某一個(gè)結(jié)果計(jì)算不正確的時(shí)候,我們需要重算。對于 Kappa 架構(gòu)來講,它認(rèn)為重算就是把之前的數(shù)據(jù)接入這個(gè)動(dòng)作再重復(fù)一遍。所以說,它把所有數(shù)據(jù)都以流式的方式去處理,這樣避免了進(jìn)行一模一樣的邏輯計(jì)算。
我在前面提到, Lambda 架構(gòu)分為兩部分,一個(gè)流式的,一個(gè) batch job 。它們面對的數(shù)據(jù)集不一樣,但計(jì)算邏輯都一樣。而 Kappa 架構(gòu)就省掉了,把相同這一部分進(jìn)行了合并。
相比起來,它和 Lambda 架構(gòu)有一點(diǎn)相似。不同之處在于,它的流式處理變成了模型相關(guān)的東西。它是目前,我們做大數(shù)據(jù)架構(gòu)和機(jī)器學(xué)習(xí)架構(gòu)整合起來非常完美的一個(gè)架構(gòu),在這個(gè)架構(gòu)里面我們可以很好地把機(jī)器學(xué)習(xí)放過來。 在 batch job 這一層它主要做的是模型訓(xùn)練。當(dāng)模型訓(xùn)練之后,新數(shù)據(jù)進(jìn)來,以流式的形式經(jīng)過模型就會(huì)預(yù)測出結(jié)果。這個(gè)結(jié)果可以消息的形式被推送出去。這樣的話,在最外層,你就可以拿到流式處理被預(yù)算出來的結(jié)果。
未完待續(xù),請關(guān)注雷鋒網(wǎng)AI 研習(xí)社后續(xù)整理。
下周,ThoughtWorks 佟達(dá)、白發(fā)川兩位老師主持的 TensorFlow 培訓(xùn)將上線 mooc.ai,向?qū)W員系統(tǒng)性地傳道解惑。
你是否一直希望有個(gè)老司機(jī)能手把手帶領(lǐng)入門?這就是一次好機(jī)會(huì)。
授課方 ThoughtWorks 是全球領(lǐng)先的 IT 咨詢公司,聯(lián)合國婦女兒童組織、世界衛(wèi)生組織合作伙伴??偛吭谥ゼ痈?,42 個(gè)辦公室分布在全球的 15 個(gè)國家。
2012年,ThoughtWorks 排在 Google,F(xiàn)acebook 之前,被評為全球最難面試的公司。
2016 年,ThoughtWorks 力壓群雄,獲得全球“最佳女性科技人員雇主”獎(jiǎng)項(xiàng)。
從初級到高級,理論+實(shí)戰(zhàn),一站式深度了解 TensorFlow!
本課程面向深度學(xué)習(xí)開發(fā)者,講授如何利用 TensorFlow 解決圖像識別、文本分析等具體問題。課程跨度為 10 周,將從 TensorFlow 的原理與基礎(chǔ)實(shí)戰(zhàn)技巧開始,一步步教授學(xué)員如何在 TensorFlow 上搭建 CNN、自編碼、RNN、GAN 等模型,并最終掌握一整套基于 TensorFlow 做深度學(xué)習(xí)開發(fā)的專業(yè)技能。
兩名授課老師佟達(dá)、白發(fā)川身為 ThoughtWorks 的資深技術(shù)專家,具有豐富的大數(shù)據(jù)平臺搭建、深度學(xué)習(xí)系統(tǒng)開發(fā)項(xiàng)目經(jīng)驗(yàn)。
開課時(shí)間:4 月 25 日(星期二)開課,每周二、四晚 20:00-21:00
開課時(shí)長:總學(xué)時(shí) 20 小時(shí),分 10 周完成,每周2次,每次 1個(gè)小時(shí)
授課地址:http://www.mooc.ai/course/82
線上授課,開放預(yù)約!
相關(guān)文章:
手把手教你如何用 TensorFlow 實(shí)現(xiàn)基于 DNN 的文本分類
萬事開頭難!入門TensorFlow,這9個(gè)問題TF Boys 必須要搞清楚
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。