作為技術開發,我們真的要自己造輪子嗎?開源的目的是為了什麼?

一項技術的發展,有自建輪子和抱團取暖兩種選擇,前者自己從頭搭起,後者大家一起合作搞個開源社區。這兩者到底哪個比哪個更好,一直都是說不清楚的問題。當然還有拿來主義的原則,拿別人的輪子改頭換面叫做自己的輪子的,這種做法不在我們討論範圍內。

大數據領域自建輪子的主要有三家企業:谷歌,微軟和阿里巴巴。谷歌的MapReduce以及後來升級的Flume是自家處理大數據的平台。微軟的Cosmos則是微軟內部大數據平台。阿里巴巴建的輪子叫做MaxCompute。

至於其他的,大體上都在Hadoop這個框架下抱團取暖。當然抱團取暖也並非意味著和諧,也有競爭。早年有Hadoop的MapReduce以及之上的HIVE,Pig。後來誕生了Impala。再後來到現在,活下來的主要是Spark和Presto。作為抱團取暖的產物的Hadoop生態圈,在大數據領域可謂風光無限,大部分企業都在用Hadoop。圍繞Hadoop也誕生了很多的企業,服務了更多的企業。這無疑是抱團取暖力量大的象徵。

而作為自建輪子的企業,谷歌是別無選擇,誰叫它最開始做大數據呢。微軟也基本上是別無選擇。微軟在做必應搜索引擎的時候,是開源最大的敵人,沒有誰會和微軟抱團取暖。至於阿里巴巴的選擇,則耐人尋味。

當時從微軟亞洲研究院常務副院長的位置上來到阿里巴巴的王堅博士的選擇是齊頭並進,既有做Hadoop的,也有做自研的。當然自研的原先叫做ODPS的後來改名叫MaxCompute的產品一度要被砍掉,但是最後的結果卻是Hadoop這個體系在內部越來越沒有人用。

這三家的自研產品,我沒有辦法貨比三家,給出精準的結論來。但是從有限的知識看, 谷歌產品強於對資源的精準控制,執行效率和故障恢復。但是其上層給程序員的開發介面,無論是早期的MapReduce還是後來的Flume,都改不了谷歌一貫的問題---難用。

微軟的Cosmos的產品體系和C#生態圈結合緊密,是快糙猛的典範。寫的對的用得很好,寫錯了的報錯信息一塌糊塗。蓋因時間有限,錯誤方面的處理非常的粗糙。

至於阿里巴巴的MaxCompute,早年抄了HIVE的前端自己寫了後端,試圖保持和HIVE的兼容性,卻終究是竹籃打水。這個系統好與不好,我不好判斷。也許曾經的系統是一般的。2015年整個組織進行了一次大換血,原來微軟做Cosmos的人接管了這個團隊並推出了MaxCompute V2。可以想像一個系統做兩遍也好,做過一個系統的人來做另外一個系統也罷,無論前者還是後者,總是會讓MaxCompute V2有長進的。

但是在大數據處理平台到底是個什麼東西上,好像這些公司都犯了同樣的錯誤。主要我想還是大家都沒有搞清楚大數據和雲計算有什麼區別。內部有了系統之後,誰都想開放出來給外部用。微軟的Cosmos被印度人接管以後就想做一套可以在雲上賣的類似的產品。阿里巴巴推行MaxCompute不遺餘力。至於谷歌,倒是沒有那麼大張旗鼓的推銷,但是類似的API在不同產品上都出現過。

然而外部的生態圈一直都是圍繞著Hadoop展開的,大小用戶對於事實標準Hadoop以外的東西毫無興趣。所以和Hadoop體系的東西賣的如火如荼比起來,這幾家要麼就是產品還沒見到影子,要麼就是賣的很慘淡。

但是從另外一個角度講,服務內部,這幾個系統都是很成功的。Hadoop能不能夠取得同等成功,這個問題就不好說了。無論是規模還是並發,Hadoop系統遠非這些專有的輪子耐操,所以多半會是問題。

只是我這樣說也是有偏見的,Facebook在經歷自家發明HIVE,又被自家的Presto趕走HIVE之後,現在也是穩定的運行在自己定製的Hadoop上。有時候我想,如果當時阿里巴巴在Hadoop團隊上投入更多,而在自研的系統上投入更少甚至乾脆不投入的話,那麼是不是現在Hadoop系統也可以同樣的耐操,不再是問題。而阿里巴巴也不需要因為要維護兩套系統而投入更多的人力物力。

但是這些都不重要了,自建輪子的企業,輪子在自己企業里跑的都很歡,遠遠超過了Hadoop的生態圈在同一個企業里。這個原因可能一方面是自研系統確實有技術上的優勢,另外一方面,自研系統公司也投入了更多的資源。但是這些企業如果要做雲計算生意的話,不可避免的就需要維護兩套系統了,值得嗎?我也不知道。畢竟,沒有自研系統的亞馬遜和Facebook,也活的好好的。亞馬遜更是因為賣Hadoop的雲計算服務而大發特發。

那麼自研系統對企業的好處是什麼呢?最大的好處應該是培養了一堆中流砥柱的人才。這些人對分散式系統和大數據的處理框架非常的熟悉,可以幫助公司解決很多實際問題。

當然,回到最後,作為一個從業人員,跳進谷歌,微軟或者阿里巴巴的某個自研團隊的坑裡到底是不是好事情。這個問題很多人一定會關心。畢竟這些自研團隊,一方面頂著高大上的光環,一方面到處招人。

這裡我給一個我個人的看法,我的觀點是,如果一個自研系統的早期,加入進去和系統一起成長,對個人的成長無疑是很有利的。如果說一個自研系統已經和Hadoop生態圈一樣足夠龐大,學起來費勁的時候,投入到Hadoop生態圈可能比投入自研系統會是更好的選擇。前者你學到的不僅僅是系統的知識,而且是可以攜帶的,在不同公司都適用的經驗。後者,你恐怕會掉進自研系統的汪洋大海里,學不過來,不可自拔。


推薦閱讀:

Github 預測:2018 你必須關注的開源項目
Compare.NET Objects對象比較組件
新手通過互聯網賺取外快的最佳項目:頭條號
機器學習組件Accord.NET

TAG:軟體開發 | 開源項目 | 大公司 |