阿里巴巴的大數據之路:JStorm與Blink的發展史


阿里巴巴的大數據之路:JStorm與Blink的發展史


最近在學習谷歌工程師的新書:Streaming Systems,收益良多。但一時之間也不知道從何去總結。想到了自己在極客時間專欄寫的一篇關於流系統的文章。於是徵求了極客時間的同意把這篇文章發出來。當然裡面有些內容已經有時過境遷的感覺了。自己對流系統的最新理解,留待想法更成熟以後再寫吧。

在阿里巴巴的發展過程中,流數據處理一直是業務中很重要的一部分。和數據分析平臺不一樣,阿里巴巴內部的流數據處理平臺有很多套。

在阿里巴巴的流數據發展歷程裡,有兩個著名的流引擎JStorm和Blink依然還在產生著深遠的影響。這種影響並不僅僅在阿里巴巴集團的內部,並且擴散到了全球的開源世界。比起其他用於集團內部的流計算引擎,它們更被人所熟知,今天我們就來重點分析一下這兩個流計算引擎的發展。

我們先來說說Storm和JStorm

Storm是被Twitter收購以後才開源出來的流計算引擎。阿里巴巴集團是在封仲淹帶領的團隊下才開始使用Storm的。

我在之前講Storm的時候說過,這種流計算引擎是用一種比較小眾的函數式編程語言Clojure開發出來的。國內的Clojure專家屈指可數,因此阿里巴巴使用Storm時遇到了很多的問題。

畢竟有些時候需要去增加或者改變一些功能,而這也就意味著需要對系統進行改進或者定製,但是Clojure語言十分小眾,懂這種編程語言的人尚且不多,更不用說專業去修改了,所以,這些都決定了這種工作非常難以展開。

鑑於Storm十分難以改進和定製,又是當時開源世界裡最成熟的流計算引擎。於是,從2012年開始,阿里巴巴決定用Java對Storm進行重寫,這就是JStorm項目的由來。

按照封仲淹的觀點來說,JStorm就是Storm二次開發的產物。它可以讓用戶無縫地從Storm遷移到JStorm。

阿里巴巴選擇用Java進行開發,這讓開發進度明顯加快。而且,源於阿里巴巴的應用規模、對數據實時性等種種要求,團隊對JStorm也進行了很多的優化。可以這麼說,JStorm的出現,解決了Storm存在的很多問題。

2015年11月19日,阿里巴巴集團正式向Apache基金會捐贈了JStorm。JStorm成為了Apache Storm下面的一個子項目,並在Apache基金會里繼續孵化。

那段時間,JStorm的作者們對於開源表現出非常大的積極性。封仲淹那時也表示,整個社區的Storm 2.0會基於阿里巴巴的JStorm,用Java語言進行開發。

然而世事無常,JStorm在Apache的孵化器裡待了快兩年,依然沒有成為Apache基金會的頂級項目。而Storm2.0這個以阿里巴巴JStorm為主的開發項目更是連影子都沒有見到。

對於此事,我非常好奇,但並不真正知曉其答案。只是有次聽到一個Apache圈內人士聊到過,說阿里巴巴和Storm社區之間似乎有了矛盾。

再來說說Flink和Blink

Flink是德國柏林工業大學設計的一個流計算引擎,現在是Apache的頂級開源項目。Flink這個引擎從模型的角度來看是非常先進的,但是在工程實現上卻相對薄弱一些。

Flink也被阿里巴巴集團用到了自己的生產環境中,項目的領導者是曾經在微軟SQL Server組以及Facebook都待過的數據庫專家蔣曉偉(花名“量仔”)。

他在接受採訪時表示,在Spark和Flink這兩個引擎中,Flink的設計理念更為先進一些,也更符合阿里巴巴對流計算引擎的要求,這恰恰也是他的團隊選擇這個引擎的原因。

當然,阿里巴巴集團並沒有把Flink拿來直接使用,而是對Flink進行了大量的、全方位的改造,不僅提高了Flink的性能,而且改進了不少功能。這個項目在阿里巴巴內部叫作Blink,是阿里巴巴集團內部很多業務的流處理引擎,其重要地位可見一斑。

Blink目前還未開源,但在與社區的合作上,Blink團隊和Flink的開發者之間保持了更為友好的關係。Flink的開發團隊多次在公開場合感謝Blink團隊對Flink項目的貢獻,Blink團隊也把很多功能都反饋到了Flink的代碼庫裡。

為什麼JStorm和Blink同為由阿里巴巴主導的,針對Apache已有項目改良的產物,卻在和開源社區的互動以及對開源社區的影響方面有著不同的結果。我想,這其中大概有幾方面的原因。

首先,Flink是後起之秀,又來自德國,還是從學校裡出來的。在Flink流進市場的時候,北美的主要互聯網企業要麼已經使用了自研的流計算引擎,要麼已經基於開源的流計算引擎開展了業務,不太可能短期內更新流計算引擎到Flink,所以Flink本身就需要大客戶的支撐,阿里巴巴的出現恰逢其時。

其次是Flink團隊和阿里巴巴團隊的互補性比較強。前者理論基礎好,但是沒有工業界的開發經驗,後者工業界開發經驗卻很足,這也就讓雙方的合作有了基礎。

最後,也可能是最重要的一點就是,這還是一個面子問題。JStorm的做法是把Storm的整個代碼庫用另外一個語言完全重寫了一遍,這無疑是一種比較得罪人的做法。而Blink在貢獻回自己的代碼時,是在Flink原有代碼基礎上改的,並且改動時也和Flink的人做了仔細協商。我想,也許就是這兩種不同的合作態度,決定了兩個項目的不同結果。

除了這兩個流計算引擎以外,阿里巴巴內部還有其他一些流計算引擎(包括Max Compute組自己開發的,一個完全和開源社區無關的流計算引擎),但是這些引擎公開的消息很少,我就算是有心想研究它們,卻也不知道從何下手了。

不過最新消息稱,經過多年不同引擎之間的內部PK,阿里巴巴在2018年終於確定了:未來Blink會是阿里巴巴集團統一的流計算引擎。

JStorm和其他的流計算引擎上的業務都會慢慢遷移過來,最終整個公司的所有流計算引擎的開發和維護資源都會集中到Blink上。這也是阿里巴巴集團內部第一次有某種數據處理產品“一統江山”。

兩個流計算引擎和開源社區的交流的不同結局告訴我們,和開源社區打交道,僅僅是提供自認為更加厲害的代碼給開源社區是遠遠不夠的。尤其是貢獻代碼的同時卻沒有給予社區主要貢獻者足夠的尊重,往往會讓事情往壞的方向發展。和社區的合作需要大量持續的互動和交流,以及對社區主要貢獻者的尊重。

極客時間專欄技術與商業案例解讀大數據系列目錄


阿里巴巴的大數據之路:JStorm與Blink的發展史



分享到:


相關文章: