對許鵬的第一印象來源于其Bolg的粗讀,最早時候更準確說應該是博文的粗略統計――1年零6個月完成55篇以上的博文,基本每篇都附有代碼,其中更有多篇源碼解讀博文。而在瀏覽完大量的Storm和Spark源碼閱讀后,筆者更認定了這是位Hadoop、Spark、Storm等相關技術從業人員。然而在與許鵬本人溝通之后才發現,其實最貼近他本人的描述正是其Blog簡介――“富貴有定數,學問則無定數――求一分,便得一分。”之所以說是貼近,因為其中還少了樂于分享的部分。
關于許鵬:花名@徽滬一郎,2000年畢業于南京郵電學院,現就業于愛立信上海,在UDM部門從事相關產品研發,個人關注于Linux內核及實時計算框架如Storm、Spark等。
正如簡介中的描述,許鵬當下從事基于Linux的C&C++開發,正如他所說的“老套、漂亮的不突出的技術”。言歸正傳,在對許鵬有了簡單的了解之后,我們一起走進本次的主題――C程序員的修養、大型項目的源碼學習,以及Spark和Storm的源碼走讀。
免費訂閱“CSDN云計算”微信公眾號,實時掌握第一手云中消息!
CSDN作為國內最專業的云計算服務平臺,提供云計算、大數據、虛擬化、數據中心、OpenStack、CloudStack、Hadoop、Spark、機器學習、智能算法等相關云計算觀點,云計算技術,云計算平臺,云計算實踐,云計算產業資訊等服務。
以下是采訪原文:
CSDN:請介紹一下目前您正在從事的研究和工作內容?
許鵬:
目前在公司UDM(User Data Management)部門,從事AAA相關的東西,用于用戶Wi-Fi接入認證。由于產品需要遷移到Linux
Cluster,所以對IP Load Balance及OpenSAF都有比較深入的研究和理解。
開發是Linux平臺上的C&C++編程,常常遇到進程Crash和內存泄露之類的問題,于是就對GDB和Linux內核中的Memory Management有了比較深入的學習。
OpenSAF主要解決高可用和擴展問題。Linux內核顯然難度很大,加上實際項目中并沒有需求,所以理解起來特別吃力。經過相當長的時間消化理解之后,終于弄明白了內核自舉,Memory Management和Network Stack這幾個模塊。Linux內核是我從實際工作到業余研究的一個關鍵連結點。內核代碼閱讀盡管讓個人在考慮問題的時候有了一定的長進,但畢竟無法與實際工作相關聯,所以熱度漸漸降低,其實就是沒能因為懂內核而找一份高薪工作啦。然而,Linux內核源碼閱讀卻給我帶來了一個非常大的收獲――學會了“自我設問,自我解答”。
于是開始搜尋新的熱點,從2013年初開始,發覺實時數據分析很熱門,看到許多網絡大拿在吹捧Storm,于是就開始看Storm的源碼。Storm源碼的學習過程中主要難點是Clojure語言,這個過程得到了Clojure
Programming一書中文譯者徐明明的大力幫助,所以漸漸理解了Storm的框架和實現機理,Storm學習的時間持續了大概半年的時間。之所以轉到Spark的研究上來,是因為聽說Apache
Spark也支持Streaming的處理,我很好奇,于是就開始了Spark的源碼研究,這中間一方面是看網上的資料,另一方面是自己看源碼和做小型的實驗來驗證猜測,可以說網絡讓自己的學習大大的縮短。Spark的學習中大量借鑒了酆曉杰(fxjwind)和張包峰的博客,目前,我和他們都建立了良好的互動。
CSDN:多年C和C++項目開發及管理,有什么經驗可以分享給這個領域的工作者?在程序員修養方面,他們又應該注意什么,多學些什么,多看些什么?
許鵬:盡管從事C和C++開發多年,我還是不敢說自己非常精通。有的只是一點點的感悟和體會,如果是進行Linux平臺下的C語言開發,最好還是就下面幾個問題多做一些試驗,多讀一些相關的書。
1. 程序的運行和加載,推薦程序員的自我修養一書。
2. 內存分配,推薦閱讀Ptmalloc源碼分析,無論是C還是C++程序員,這一部分是最容易踩雷的,多讀一點基礎的東西,會在解決實際問題的時候,不至于手足無措。以這些為基礎,再結合Valgrind或Purify,相信效果會更好。
3. 多讀一點C和C++開發的成功產品,如Apache Http Server和Nginx,這樣就容易搞清楚在設計一個系統的時候需要有哪些關注點。
4. 《深入理解計算機系統》真的是一本非常不錯的書,為什么要這么說,軟件的設計還是要以物理設備支持的特性為基礎的,這本書讓我們在CPU的級別來進一步思考程序設計。
若干年前,金庸群俠傳這個游戲很流行,里頭有一種武功初練稀松平常,但只要練到第10級,那就比降龍十八掌還厲害。學用C和C++也是如此吧,無它,唯勤而已。
CSDN:
您談到了因為產品遷移到Linux Cluster所以深入的研究了IP Load Balance及OpenSAF,在這兩個方面有可分享給讀者的么?
許鵬: IP Load Balance這一塊主要是對ipvs和nat的升級協議rsip作了一些研究。有關這方面的資料網上很多,也不敢亂加評論,如果想作細致深入學習的話,以lvs ipvs作為關鍵字搜一下就可以了。熟悉ipvs最好的方式還是試驗加源碼閱讀,其源碼已經在Linux內核之中,在network目錄下。
OpenSAF是SAF的開源實現,主要目的是為了解決HA和Scalability的問題,對于電信產品來說,高可靠性始終是一個硬性的指標。SAF制定了一套齊備的標準,在開源實現方面情況變得有意思起來。OpenSAF基本上跟隨了SAF標準,而其它一些則認為標準過于龐雜,而只選取其中一部分加以深化實施,如corosync和pacemaker。
CSDN:您花了大量的時間閱讀Spark和Storm源碼,并進行測試,對這兩個計算框架您有做過比較嗎?有什么結論可以為大家分享?
許鵬: 這是一個經常會被提及的問題,之所以如此就是因為兩個產品都很優秀。Storm是專注于實時流計算的框架,在Twitter有大量成功的應用,其整體架構是非常易于理解的。Spark則更為通用一些,不僅支持實時流計算,也支持批處理,圖及機器學習方面的應用。所以要對兩者進行比較的話,我們還是將目標縮小到流處理這一塊。
CSDN:大量開源項目使用和學習經驗,您對開源運動怎么看?如何才能更好的學習一個開源項目?開源項目使用時又該注意些什么?
許鵬: 開源項目離不開大家的廣泛參與和支持,要讓一個開源項目取得成功,有多個方面的因素。
CSDN:能否分享一些您對當下大數據的看法?
許鵬: 大數據要解決的兩大基本問題是“數據存儲”和“數據分析”,在數據存儲領域,開源實現方面似乎大家都已經首肯HDFS的方式,不再懷疑。
而在數據分析的計算框架方面,目前還有大量的競爭或博弈出現。Spark就是一例,分析領域除了基于傳統關系型數據庫的分析方式,還有圖計算相關和機器學習為代表的數據挖掘。顯然機器學習是一個大熱門,這一方面個人所知甚少,不敢胡說八道,但門檻似乎很高,數學底子一定要好,決不是簡簡單單的調用幾個API就完事了的。
云計算是大數據的支撐,雖然脫胎于虛擬化,不乏商業宣傳的味道,但是大量機器的安裝部署,如果全部使用物理機一臺臺去裝,肯定會讓人發瘋,云計算讓大規模部署和產品遷移變的更為簡單。
CSDN:對于閱讀源碼您有著豐富的經驗,對想閱讀源碼又不知道如何下手的同學可否做一些分享?
許鵬: 源碼閱讀其實是一個逆向的工程,這期間必須會遇到種種問題。一般來說,我會遵循這樣一個思維范式――Problem domain→model→architecture&implementation→improvement→best practice。
1. 首先搞清楚要分析的產品解決的問題是什么,這個問題在哪個大的范疇里,也就是要搞清楚problem domain。一個著名的開源產品必定在Wikipedia上有相應的條目,所以一開始去看wikipedia是破題的一種極好方式。
2. 清楚要分析產品的大體框架和關鍵性的概念,也就是理解清楚architecture和key concept。
3. 將分析的產品實實在在的運行起來,我一般選擇debian或archlinux作為工作平臺,它們提供了豐富的軟件包,可以很快的將東西安裝并運行。熟悉Linux本身對于開源項目的源碼閱讀還是大有裨益的。
4. 修改日志級別,得到豐富的日志信息。有了這個為基礎,再來開始真正的源碼閱讀和分析。
5. 源碼分析的時候,要始終問這幾個問題。
- 這一部分代碼是在同一個進程中么,同一個線程中么,運行在同一臺機器中么
- 每一個線程都要問清楚,什么時候啟動的,什么時候停止的
- 當前實現的性能如何,比如i/o, cpu, network 這個需要做相應的測試方面的試驗
- 當前的解決方案還有優化空間嗎,比如針對spark中的scheduling問題,就有sparrow的優化機制提出
6. 碰到具體的問題一時解決不了怎么辦
7. 編程語言選擇
- 基本語法:數據類型、控制語句、函數定義
- 是否支持FP
- 多態和繼承
稍微總結一下,我想源碼分析心中要有兩幅大圖,將整體與局部很好的結合起來思考
CSDN:有什么可以補充給讀者的?
許鵬: 選擇自己感興趣的東西,堅持做下去,一定會有回報,誠如《一代宗師》中所說的那樣,“念念不忘,必有回響”。
編碼到底是一件技術活,還是一項藝術活,這是一個令人糾結的話題。
最后,感謝CSDN的采訪,謝謝那些為開源項目耗費大量精力的開發者。由于本人代碼閱讀時間比較倉促,錯誤在所難免,有不對的地方,敬請指出,學無先后,能者為師。
讀源碼是開源項目最好的學習方式,然而當項目規模達到一定程度時,就像許鵬所說,源碼閱讀其實是一個逆向的工程,這期間必須會遇到種種問題。這里我們為大家分享許鵬的Spark和Storm源碼走讀,方便大家學習。
文/仲浩
免費訂閱“CSDN云計算”微信公眾號,實時掌握第一手云中消息!
CSDN作為國內最專業的云計算服務平臺,提供云計算、大數據、虛擬化、數據中心、OpenStack、CloudStack、Hadoop、Spark、機器學習、智能算法等相關云計算觀點,云計算技術,云計算平臺,云計算實踐,云計算產業資訊等服務。