我們?yōu)槭裁葱枰冈圃髷?shù)據(jù)」?
「云原生大數(shù)據(jù) 」已經(jīng)是現(xiàn)在科技領(lǐng)域的熱詞了,尤其是對(duì)于大中型企業(yè)的可擴(kuò)展性和敏捷性開發(fā)需求而言。什么是「云原生大數(shù)據(jù)」呢?首先大數(shù)據(jù)是我們很熟悉的詞匯了,主要講的是儲(chǔ)存、使用、挖掘海量的數(shù)據(jù)。而因?yàn)閿?shù)據(jù)量過大,因此無法在本地單機(jī)上運(yùn)行,而必須在云上進(jìn)行管理。云原生指的是進(jìn)一步提升云服務(wù)的可擴(kuò)展性(scalability)和敏捷性(agility),前者指的是處理數(shù)據(jù)的數(shù)量,后者指的是開發(fā)的便捷性。因此簡(jiǎn)單來說, 云原生大數(shù)據(jù)就是「為了在更大的數(shù)據(jù)上做更快的開發(fā)」的這一類技術(shù)與平臺(tái) 。
很多企業(yè)都有這樣的需求。以微信為例,它有超過3000個(gè)(微)服務(wù),而每天可能要更新部署超過一千次。流服務(wù)媒體奈飛(Netflix)有超過600個(gè)(微)服務(wù),每天也需要部署高達(dá)100多次 [1]。而云原生的重要性就在于把原本只有在本地上才可行的敏捷開發(fā)拓展到云上,從而支持海量運(yùn)算的快速開發(fā),這樣也才能保證數(shù)據(jù)量巨大的應(yīng)用(比如微信)不需要離線測(cè)試和更新。
云原生有很多優(yōu)點(diǎn)。首先它繼承了傳統(tǒng)云服務(wù)的優(yōu)點(diǎn),著重于向外擴(kuò)展而不是增大資源投放 。舉個(gè)簡(jiǎn)單的例子,傳統(tǒng)的開發(fā)會(huì)找一個(gè)機(jī)器,然后讓它專門負(fù)責(zé)一個(gè)任務(wù),而隨著任務(wù)的拓展給它補(bǔ)充更多的資源(scale up)。但壞處很明顯,就是當(dāng)這個(gè)機(jī)器出了問題以后整個(gè)任務(wù)就會(huì)下線。而云原生走的是向外擴(kuò)展的思路(scale out),也就是說它虛擬出多個(gè)機(jī)器來共同完成任務(wù),而任意一臺(tái)機(jī)器的鼓掌不影響整體的運(yùn)營(yíng)。因此它可以很輕易的提升服務(wù)的擴(kuò)展性,比如一個(gè)APP從服務(wù)1000人到2000人可能只需要加一個(gè)虛擬機(jī)即可,不容易遇到上限。
上圖:資源擴(kuò)展(scale up); 下圖:云原生所采取的向外擴(kuò)展(scale out)
其次云原生的另一個(gè)特點(diǎn)是著重微服務(wù)(microservice)和容器(container)來提高開發(fā)便捷性 。簡(jiǎn)單來說,一個(gè)負(fù)責(zé)的系統(tǒng)可以被拆解為多個(gè)獨(dú)立但可以被組合的模塊(微服務(wù)),那么開發(fā)新的功能就只需要增加新的小模塊并與現(xiàn)有的組合。當(dāng)我們部署這樣的新功能時(shí),可以把打包好的功能放到統(tǒng)一的容器里。在這種情況下,我們無需每次重新處理所有的微服務(wù),而可以敏捷的進(jìn)行替換和升級(jí),簡(jiǎn)單理解就像是充電電池。我們可以給每個(gè)電池單獨(dú)充電(類比微服務(wù)升級(jí)),充好電之后(微服務(wù)升級(jí)好了),即插即用替換現(xiàn)有的微服務(wù)即可。比如一款社交軟件如何給用戶推送內(nèi)容,可能就是一個(gè)微服務(wù),它改變推送策略一般是把這個(gè)部分拿出來做升級(jí)與AB測(cè)試,再逐步在云上替換掉所有用戶的推薦系統(tǒng)。因?yàn)樵圃捎玫氖窍蛲鈹U(kuò)展,這樣可以對(duì)用戶進(jìn)行獨(dú)立或者有對(duì)比的升級(jí),不會(huì)造成任何服務(wù)的中斷。
而在這些抽象的概念以外,其實(shí)原生云大數(shù)據(jù)從2013年被首次提出已經(jīng)逐步的被應(yīng)用到了越來越多的商業(yè)案例里 。國(guó)外的微軟在這個(gè)上面做的一直很好,而國(guó)內(nèi)的話騰訊云發(fā)起了首個(gè)原生大數(shù)據(jù)的生態(tài),也有很多用原生云大數(shù)據(jù)賦能產(chǎn)品的案例。
以微信來說,它們正在使用騰訊云的原生云設(shè)計(jì)來進(jìn)行數(shù)據(jù)挖掘和分析。其實(shí)不難想象微信的數(shù)據(jù)量有多大,畢竟月活超過十億。因此在這樣的海量用戶場(chǎng)景下,很容易產(chǎn)生龐大的數(shù)據(jù)量進(jìn)行分析,尤其是在整合多種用戶信息時(shí)需要大量時(shí)間,往往準(zhǔn)備數(shù)據(jù)就需要數(shù)個(gè)小時(shí)甚至以天來計(jì)算,以前的AB 測(cè)試的滯后性比較明顯。而近水樓臺(tái)先得月,微信現(xiàn)在用騰訊云的云數(shù)據(jù)倉(cāng)庫(kù)來處理這樣的數(shù)據(jù),最大的優(yōu)勢(shì)就是把數(shù)據(jù)量的吞吐、儲(chǔ)存和挖掘問題轉(zhuǎn)移到了騰訊云,每秒可以吞吐10億+的數(shù)據(jù)。而微信的工程師只需要通過業(yè)務(wù)需求進(jìn)行具體的分析和開發(fā),避免了把大量的時(shí)間放在等待上的問題。所以原生云大數(shù)據(jù)平臺(tái)的核心目的就是把儲(chǔ)存和開發(fā)中因?yàn)閿?shù)據(jù)量造成的問題解決,而只把開發(fā)和分析問題留給使用者。
作為一套系統(tǒng)完整的解決方案,云原生大數(shù)據(jù)的重要組件有「大數(shù)據(jù)的基礎(chǔ)引擎」,用來保存、倉(cāng)儲(chǔ)和調(diào)用數(shù)據(jù),而在數(shù)據(jù)之上更重要的是「數(shù)據(jù)開發(fā)與治理」,即怎么從數(shù)據(jù)中挖掘有用的信息。當(dāng)然再上層還可以集成各種商業(yè)可視化面板,從而更簡(jiǎn)單的進(jìn)行分析。而在這些系統(tǒng)的統(tǒng)籌下,原生云平臺(tái)可以支持各種重要的場(chǎng)景和應(yīng)用。
騰訊云大數(shù)據(jù)架構(gòu)
我個(gè)人認(rèn)為在這一整套架構(gòu)中,最重要的部分就是底層的「大數(shù)據(jù)引擎」和中層的「數(shù)據(jù)開發(fā)與治理」, 非??疾旒夹g(shù)。而更難的是怎么有機(jī)的把這些技術(shù)模塊結(jié)合起來。
在騰訊云的大數(shù)據(jù)引擎里,我個(gè)人覺得最有意思的是數(shù)據(jù)湖分析(DLC)和云數(shù)據(jù)倉(cāng)庫(kù)(CDW)。先說數(shù)據(jù)湖分析DLC。和傳統(tǒng)的數(shù)據(jù)庫(kù)不同,數(shù)據(jù)湖(data lake)可以支持更大的數(shù)據(jù)存儲(chǔ),它不僅可以支持保存關(guān)系數(shù)據(jù)庫(kù)(relational database),還可以保存半結(jié)構(gòu)化的數(shù)據(jù),比如CSV,JSON和XML等,甚至包括非結(jié)構(gòu)性的數(shù)據(jù),像是PDF、文檔、圖片,音視頻等。數(shù)據(jù)湖的出現(xiàn)讓我們有了一個(gè)統(tǒng)一的地方來儲(chǔ)存數(shù)據(jù)。 簡(jiǎn)單來說,數(shù)據(jù)湖的出現(xiàn)避免了各個(gè)數(shù)據(jù)庫(kù)的孤立問題,為數(shù)據(jù)整合提供了一站式的地點(diǎn) 。騰訊云的DLC提供數(shù)據(jù)湖的數(shù)據(jù)分析因此也提供了:(1)從多個(gè)數(shù)據(jù)庫(kù)進(jìn)行聯(lián)合查詢(2)serverless的架構(gòu)使得使用者無需關(guān)注底層架構(gòu),可以直接用SQL語句進(jìn)行處理。數(shù)據(jù)湖分析的場(chǎng)景非常適合游戲開發(fā)和迭代,比如可以進(jìn)行網(wǎng)絡(luò)游戲的運(yùn)營(yíng)和應(yīng)力分析,我們可以通過DLC把用戶的游戲日志和購(gòu)買習(xí)慣等各種不同格式的數(shù)據(jù)拿到數(shù)據(jù)湖中,進(jìn)行統(tǒng)一分析,從而最大化盈利。其中很有代表性的案例包括B站,可以通過游戲運(yùn)營(yíng)日志指標(biāo)實(shí)時(shí)分析來為企業(yè)獲得更大的價(jià)值。
而云數(shù)據(jù)倉(cāng)庫(kù)(CDW)的目標(biāo)主要是整合大數(shù)據(jù)(尤其是寬表類數(shù)據(jù)),從而進(jìn)行統(tǒng)一分析 。以騰訊的云數(shù)據(jù)倉(cāng)庫(kù)ClickHouse為例,它的主要目的是在短時(shí)間內(nèi)對(duì)于復(fù)雜的用戶特征進(jìn)行分析,也就是我們常說的”大寬表”。即每個(gè)用戶可能在網(wǎng)絡(luò)上產(chǎn)生了個(gè)各種特征,比如購(gòu)買習(xí)慣比如搜索習(xí)慣的,因此當(dāng)我們把大量數(shù)據(jù)的行為整合起來,就會(huì)形成一個(gè)巨大的表格,不僅長(zhǎng)度可能有上億行,寬度上可能也成千上萬(各種行為特征)。因此Clickhouse提供的就是一個(gè)開箱即用可擴(kuò)展的數(shù)據(jù)整合工具。以下圖為例,大部分電商和營(yíng)銷類企業(yè)都可以簡(jiǎn)單的使用Clickhouse進(jìn)行數(shù)據(jù)整合,從而篩選符合特征的用戶,并把數(shù)據(jù)喂到下一步的數(shù)據(jù)應(yīng)用里進(jìn)行實(shí)時(shí)訂單分析或者精準(zhǔn)營(yíng)銷。
以騰訊云的「數(shù)據(jù)開發(fā)與治理」平臺(tái)WeData為例 ,它的核心特色就在于云上的敏捷化開發(fā)和一體化操作。我們前面講了云原生大數(shù)據(jù)的一個(gè)重要就是需要敏捷化開發(fā),可以根據(jù)數(shù)據(jù)的反饋即時(shí)進(jìn)行修正和部署,從需求、開發(fā)和部署的過程需要非??焖?,這也是現(xiàn)在新的概念叫做DataOps。而WeData的重要?jiǎng)?chuàng)新就是支持協(xié)同開發(fā),這個(gè)可以通多IDE和內(nèi)置的DAG實(shí)現(xiàn),而多人協(xié)作時(shí)一個(gè)很有用的功能就是數(shù)據(jù)可視化,這樣避免代碼層面的沖突。WeData因此在打通下游大數(shù)據(jù)引擎的前提下,同時(shí)支持快速的開發(fā)、迭代與部署。
而在數(shù)據(jù)治理層面,另一個(gè)重點(diǎn)是安全性 。WeData在多人協(xié)作時(shí)可以精細(xì)化的控制每個(gè)人可以接觸到的數(shù)據(jù),從而防止有數(shù)據(jù)泄露的安全問題。敏捷性不代表我們應(yīng)該在開發(fā)中犧牲安全性。
WeData數(shù)據(jù)開發(fā)治理平臺(tái)
而結(jié)合這些引擎和處理系統(tǒng),云原生大數(shù)據(jù)確實(shí)已經(jīng)被應(yīng)用到了我們生活當(dāng)中 。除了前文提到的知乎、微信、B站等,大部分我們熟悉的行業(yè)其實(shí)都已經(jīng)用上了云原生的技術(shù)。比如金融行業(yè)包括證券和銀行,它們利用云服務(wù),比如騰訊云,把多個(gè)渠道的用戶信息匯總,并在海量的數(shù)據(jù)里挖掘欺詐與洗錢,或是開設(shè)智能的風(fēng)控與理賠。又或是教育行業(yè),它們會(huì)利用原生云完成從個(gè)性化學(xué)習(xí)內(nèi)容推薦,智能測(cè)評(píng)與批改,到實(shí)時(shí)對(duì)學(xué)員表現(xiàn)進(jìn)行分析的全鏈條支持。雖然有些功能對(duì)于小企業(yè)在本地也可以完成,但云原生的特性就是可以隨著用戶數(shù)的上升彈性擴(kuò)容,提供一樣便捷的數(shù)據(jù)儲(chǔ)存和分析。
因此云原生大數(shù)據(jù)確實(shí)是技術(shù)發(fā)展上不可阻擋的趨勢(shì) 。而隨著我們每天產(chǎn)生數(shù)據(jù)量的繼續(xù)的飛速增加,未來它的使用場(chǎng)景還會(huì)進(jìn)一步拓展。人類現(xiàn)在每年產(chǎn)生的數(shù)據(jù)已經(jīng)是前十幾年的總和,而隨著越來越多的數(shù)據(jù)產(chǎn)生,我們也會(huì)從中有更多對(duì)自己和社會(huì)的理解,而更好的云服務(wù)和技術(shù)將會(huì)是其中重要的一環(huán)。