林琳
在阿里巴巴的發(fā)展過(guò)程中,流數(shù)據(jù)處理一直是業(yè)務(wù)中很重要的一部分。和數(shù)據(jù)分析平臺(tái)不一樣,阿里巴巴內(nèi)部的流數(shù)據(jù)處理平臺(tái)有很多套。
在阿里巴巴的流數(shù)據(jù)發(fā)展歷程里,有2個(gè)著名的流引擎JStorm和Blink產(chǎn)生著深遠(yuǎn)的影響。這種影響并不僅僅在阿里巴巴集團(tuán)的內(nèi)部,并且擴(kuò)散到了全球的開(kāi)源世界。比起其他用于集團(tuán)內(nèi)部的流計(jì)算引擎,它們更易于被人所熟知,今天就來(lái)重點(diǎn)分析一下這2個(gè)流計(jì)算引擎的發(fā)展。
Storm和JStorm
Storm是被Twitter收購(gòu)以后才開(kāi)源出來(lái)的流計(jì)算引擎。阿里巴巴集團(tuán)是在封仲淹帶領(lǐng)的團(tuán)隊(duì)下才開(kāi)始使用Storm的。
Storm這種流計(jì)算引擎是用一種比較小眾的函數(shù)式編程語(yǔ)言Clojure開(kāi)發(fā)出來(lái)的。國(guó)內(nèi)的Clojure專(zhuān)家屈指可數(shù),因此阿里巴巴使用Storm時(shí)遇到了很多的問(wèn)題。
畢竟有些時(shí)候需要去增加或者改變一些功能,而這就意味著需要對(duì)系統(tǒng)進(jìn)行改進(jìn)或者定制,但是Clojure語(yǔ)言十分小眾,懂這種編程語(yǔ)言的人尚且不多,更不用說(shuō)專(zhuān)業(yè)去修改了,所以,這些都決定了這種工作非常難以展開(kāi)。
鑒于Storm十分難以改進(jìn)和定制,又是當(dāng)時(shí)開(kāi)源世界里最成熟的流計(jì)算引擎。于是,從2012年開(kāi)始,阿里巴巴決定用Java對(duì)Storm進(jìn)行重寫(xiě),這就是JStorm項(xiàng)目的由來(lái)。
按照封仲淹的觀點(diǎn)來(lái)說(shuō),JStorm就是Storm二次開(kāi)發(fā)的產(chǎn)物,它可以讓用戶無(wú)縫地從Storm遷移到JStorm。
阿里巴巴選擇用Java進(jìn)行開(kāi)發(fā),這讓開(kāi)發(fā)進(jìn)度明顯加快。而且,源于阿里巴巴的應(yīng)用規(guī)模、對(duì)數(shù)據(jù)實(shí)時(shí)性等種種要求,團(tuán)隊(duì)對(duì)JStorm也進(jìn)行了很多優(yōu)化??梢赃@么說(shuō),JStorm的出現(xiàn),解決了Storm存在的很多問(wèn)題。
2015年11月19日,阿里巴巴集團(tuán)正式向Apache基金會(huì)捐贈(zèng)了JStorm。JStorm成為了Apache Storm下面的一個(gè)子項(xiàng)目,并在Apache基金會(huì)里繼續(xù)孵化。
那段時(shí)間,JStorm的作者們對(duì)于開(kāi)源表現(xiàn)出非常大的積極性。封仲淹那時(shí)也表示,整個(gè)社區(qū)的Storm 2.0會(huì)基于阿里巴巴的JStorm,用Java語(yǔ)言進(jìn)行開(kāi)發(fā)。
然而世事無(wú)常,盡管JStorm在Apache的孵化器里待了快2年的時(shí)間,但依然沒(méi)有成為Apache基金會(huì)的頂級(jí)項(xiàng)目。同時(shí),Storm2.0這個(gè)以阿里巴巴JStorm為主的開(kāi)發(fā)項(xiàng)目更是連影子都沒(méi)有見(jiàn)到。
Flink和Blink
Flink是德國(guó)柏林工業(yè)大學(xué)設(shè)計(jì)的一個(gè)流計(jì)算引擎,現(xiàn)在是Apache的頂級(jí)開(kāi)源項(xiàng)目。Flink這個(gè)引擎從模型的角度來(lái)看是非常先進(jìn)的,但是在工程實(shí)現(xiàn)上卻相對(duì)薄弱一些。
Flink也被阿里巴巴集團(tuán)用到了自己的生產(chǎn)環(huán)境中,項(xiàng)目的領(lǐng)導(dǎo)者是曾經(jīng)在微軟SQL Server組以及Facebook都待過(guò)的數(shù)據(jù)庫(kù)專(zhuān)家蔣曉偉。
他曾在接受采訪時(shí)表示,在Spark和Flink這2個(gè)引擎中,F(xiàn)link的設(shè)計(jì)理念更為先進(jìn)一些,也更符合阿里巴巴對(duì)流計(jì)算引擎的要求,這恰恰也是他的團(tuán)隊(duì)選擇這個(gè)引擎的原因。
阿里巴巴集團(tuán)并沒(méi)有把Flink拿來(lái)直接使用,而是對(duì)Flink進(jìn)行了大量的、全方位的改造,不僅提高了Flink的性能,而且改進(jìn)了不少功能。這個(gè)項(xiàng)目在阿里巴巴內(nèi)部叫作Blink,是阿里巴巴集團(tuán)內(nèi)部很多業(yè)務(wù)的流處理引擎,其重要地位可見(jiàn)一斑。
Blink目前還未開(kāi)源,但在與社區(qū)的合作上,Blink團(tuán)隊(duì)和Flink的開(kāi)發(fā)者之間保持了更為友好的關(guān)系。Flink的開(kāi)發(fā)團(tuán)隊(duì)多次在公開(kāi)場(chǎng)合感謝Blink團(tuán)隊(duì)對(duì)Flink項(xiàng)目的貢獻(xiàn),Blink團(tuán)隊(duì)也把很多功能都反饋到了Flink的代碼庫(kù)里。
為什么JStorm和Blink同為由阿里巴巴主導(dǎo)的,針對(duì)Apache已有項(xiàng)目改良的產(chǎn)物,卻在和開(kāi)源社區(qū)的互動(dòng)以及對(duì)開(kāi)源社區(qū)的影響方面有著不同的結(jié)果。個(gè)人認(rèn)為,這其中大概有幾方面的原因。
首先,F(xiàn)link是后起之秀,又來(lái)自德國(guó),還是從剛剛學(xué)校里出來(lái)的。在Flink流進(jìn)市場(chǎng)的時(shí)候,北美的主要互聯(lián)網(wǎng)企業(yè)要么是已經(jīng)使用了自研的流計(jì)算引擎,要么就是已經(jīng)基于開(kāi)源的流計(jì)算引擎開(kāi)展了業(yè)務(wù),不太可能短期內(nèi)更新流計(jì)算引擎到Flink,所以Flink本身就需要大客戶的支撐,阿里巴巴的出現(xiàn)恰逢其時(shí)。
其次是Flink團(tuán)隊(duì)和阿里巴巴團(tuán)隊(duì)的互補(bǔ)性比較強(qiáng)。前者理論基礎(chǔ)好,但是沒(méi)有工業(yè)界的開(kāi)發(fā)經(jīng)驗(yàn),后者工業(yè)界開(kāi)發(fā)經(jīng)驗(yàn)卻很足,這也就讓雙方的合作有了基礎(chǔ)。
最后,也可能是最重要的一點(diǎn)就是,這還是一個(gè)面子問(wèn)題。JStorm的做法是把Storm的整個(gè)代碼庫(kù)用另外一個(gè)語(yǔ)言完全重寫(xiě)了一遍,這無(wú)疑是一種比較得罪人的做法。而B(niǎo)link在貢獻(xiàn)回自己的代碼時(shí),是在Flink原有代碼基礎(chǔ)上改的,并且改動(dòng)時(shí)也和Flink的人做了仔細(xì)協(xié)商。也許就是這2種不同的合作態(tài)度,決定了2個(gè)項(xiàng)目的不同結(jié)果。
不過(guò)最新消息稱,經(jīng)過(guò)多年不同引擎之間的內(nèi)部PK,阿里巴巴在2018年終于確定了:未來(lái)Blink會(huì)是阿里巴巴集團(tuán)統(tǒng)一的流計(jì)算引擎。
JStorm和其他的流計(jì)算引擎上的業(yè)務(wù)都會(huì)慢慢遷移過(guò)來(lái),最終整個(gè)公司的所有流計(jì)算引擎的開(kāi)發(fā)和維護(hù)資源都會(huì)集中到Blink上。這也是阿里巴巴集團(tuán)內(nèi)部第一次對(duì)某種數(shù)據(jù)處理產(chǎn)品“一統(tǒng)江山”。
2個(gè)流計(jì)算引擎和開(kāi)源社區(qū)的交流的不同結(jié)局告訴我們,和開(kāi)源社區(qū)打交道,僅僅是提供自認(rèn)為更加厲害的代碼給開(kāi)源社區(qū)是遠(yuǎn)遠(yuǎn)不夠的。尤其是貢獻(xiàn)代碼的同時(shí)卻沒(méi)有給予社區(qū)主要貢獻(xiàn)者足夠的尊重,往往會(huì)讓事情往壞的方向發(fā)展。和社區(qū)的合作需要大量持續(xù)的互動(dòng)和交流,以及對(duì)社區(qū)主要貢獻(xiàn)者的尊重。