多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 互聯(lián)網(wǎng) > 專訪許鵬:談C程序員修養(yǎng)及大型項(xiàng)目源碼閱讀與學(xué)習(xí)

專訪許鵬:談C程序員修養(yǎng)及大型項(xiàng)目源碼閱讀與學(xué)習(xí)

來源:程序員人生   發(fā)布時(shí)間:2014-09-09 19:20:00 閱讀次數(shù):2918次

對(duì)許鵬的第一印象來源于其Bolg的粗讀,最早時(shí)候更準(zhǔn)確說應(yīng)該是博文的粗略統(tǒng)計(jì)――1年零6個(gè)月完成55篇以上的博文,基本每篇都附有代碼,其中更有多篇源碼解讀博文。而在瀏覽完大量的Storm和Spark源碼閱讀后,筆者更認(rèn)定了這是位Hadoop、Spark、Storm等相關(guān)技術(shù)從業(yè)人員。然而在與許鵬本人溝通之后才發(fā)現(xiàn),其實(shí)最貼近他本人的描述正是其Blog簡介――“富貴有定數(shù),學(xué)問則無定數(shù)――求一分,便得一分?!敝哉f是貼近,因?yàn)槠渲羞€少了樂于分享的部分。


關(guān)于許鵬:花名@徽滬一郎,2000年畢業(yè)于南京郵電學(xué)院,現(xiàn)就業(yè)于愛立信上海,在UDM部門從事相關(guān)產(chǎn)品研發(fā),個(gè)人關(guān)注于Linux內(nèi)核及實(shí)時(shí)計(jì)算框架如Storm、Spark等。

正如簡介中的描述,許鵬當(dāng)下從事基于Linux的C&C++開發(fā),正如他所說的“老套、漂亮的不突出的技術(shù)”。言歸正傳,在對(duì)許鵬有了簡單的了解之后,我們一起走進(jìn)本次的主題――C程序員的修養(yǎng)、大型項(xiàng)目的源碼學(xué)習(xí),以及Spark和Storm的源碼走讀。


免費(fèi)訂閱“CSDN云計(jì)算”微信公眾號(hào),實(shí)時(shí)掌握第一手云中消息!

CSDN作為國內(nèi)最專業(yè)的云計(jì)算服務(wù)平臺(tái),提供云計(jì)算、大數(shù)據(jù)、虛擬化、數(shù)據(jù)中心、OpenStack、CloudStack、Hadoop、Spark、機(jī)器學(xué)習(xí)、智能算法等相關(guān)云計(jì)算觀點(diǎn),云計(jì)算技術(shù),云計(jì)算平臺(tái),云計(jì)算實(shí)踐,云計(jì)算產(chǎn)業(yè)資訊等服務(wù)。


以下是采訪原文:

CSDN:請(qǐng)介紹一下目前您正在從事的研究和工作內(nèi)容?

許鵬: 目前在公司UDM(User Data Management)部門,從事AAA相關(guān)的東西,用于用戶Wi-Fi接入認(rèn)證。由于產(chǎn)品需要遷移到Linux Cluster,所以對(duì)IP Load Balance及OpenSAF都有比較深入的研究和理解。

開發(fā)是Linux平臺(tái)上的C&C++編程,常常遇到進(jìn)程Crash和內(nèi)存泄露之類的問題,于是就對(duì)GDB和Linux內(nèi)核中的Memory Management有了比較深入的學(xué)習(xí)。

OpenSAF主要解決高可用和擴(kuò)展問題。Linux內(nèi)核顯然難度很大,加上實(shí)際項(xiàng)目中并沒有需求,所以理解起來特別吃力。經(jīng)過相當(dāng)長的時(shí)間消化理解之后,終于弄明白了內(nèi)核自舉,Memory Management和Network Stack這幾個(gè)模塊。Linux內(nèi)核是我從實(shí)際工作到業(yè)余研究的一個(gè)關(guān)鍵連結(jié)點(diǎn)。內(nèi)核代碼閱讀盡管讓個(gè)人在考慮問題的時(shí)候有了一定的長進(jìn),但畢竟無法與實(shí)際工作相關(guān)聯(lián),所以熱度漸漸降低,其實(shí)就是沒能因?yàn)槎畠?nèi)核而找一份高薪工作啦。然而,Linux內(nèi)核源碼閱讀卻給我?guī)砹艘粋€(gè)非常大的收獲――學(xué)會(huì)了“自我設(shè)問,自我解答”。

于是開始搜尋新的熱點(diǎn),從2013年初開始,發(fā)覺實(shí)時(shí)數(shù)據(jù)分析很熱門,看到許多網(wǎng)絡(luò)大拿在吹捧Storm,于是就開始看Storm的源碼。Storm源碼的學(xué)習(xí)過程中主要難點(diǎn)是Clojure語言,這個(gè)過程得到了Clojure Programming一書中文譯者徐明明的大力幫助,所以漸漸理解了Storm的框架和實(shí)現(xiàn)機(jī)理,Storm學(xué)習(xí)的時(shí)間持續(xù)了大概半年的時(shí)間。之所以轉(zhuǎn)到Spark的研究上來,是因?yàn)槁犝fApache Spark也支持Streaming的處理,我很好奇,于是就開始了Spark的源碼研究,這中間一方面是看網(wǎng)上的資料,另一方面是自己看源碼和做小型的實(shí)驗(yàn)來驗(yàn)證猜測(cè),可以說網(wǎng)絡(luò)讓自己的學(xué)習(xí)大大的縮短。Spark的學(xué)習(xí)中大量借鑒了酆曉杰(fxjwind)和張包峰的博客,目前,我和他們都建立了良好的互動(dòng)。

CSDN:多年C和C++項(xiàng)目開發(fā)及管理,有什么經(jīng)驗(yàn)可以分享給這個(gè)領(lǐng)域的工作者?在程序員修養(yǎng)方面,他們又應(yīng)該注意什么,多學(xué)些什么,多看些什么?

許鵬:盡管從事C和C++開發(fā)多年,我還是不敢說自己非常精通。有的只是一點(diǎn)點(diǎn)的感悟和體會(huì),如果是進(jìn)行Linux平臺(tái)下的C語言開發(fā),最好還是就下面幾個(gè)問題多做一些試驗(yàn),多讀一些相關(guān)的書。

1. 程序的運(yùn)行和加載,推薦程序員的自我修養(yǎng)一書。

2. 內(nèi)存分配,推薦閱讀Ptmalloc源碼分析,無論是C還是C++程序員,這一部分是最容易踩雷的,多讀一點(diǎn)基礎(chǔ)的東西,會(huì)在解決實(shí)際問題的時(shí)候,不至于手足無措。以這些為基礎(chǔ),再結(jié)合Valgrind或Purify,相信效果會(huì)更好。

3. 多讀一點(diǎn)C和C++開發(fā)的成功產(chǎn)品,如Apache Http Server和Nginx,這樣就容易搞清楚在設(shè)計(jì)一個(gè)系統(tǒng)的時(shí)候需要有哪些關(guān)注點(diǎn)。

  • 是單進(jìn)程還是多進(jìn)程,是單進(jìn)程多線程還是多進(jìn)程單線程
  • 進(jìn)程間通信采用什么方式
  • 消息的encoding/decoding以及message passing,每次都要自己寫一次,不累嗎,有沒有好的開源實(shí)現(xiàn),如Protobuffer、Thrift
  • 對(duì)于一個(gè)Network Server來說,基本構(gòu)架大體上還是相同的,acceptor→dispatcher→worker

4. 《深入理解計(jì)算機(jī)系統(tǒng)》真的是一本非常不錯(cuò)的書,為什么要這么說,軟件的設(shè)計(jì)還是要以物理設(shè)備支持的特性為基礎(chǔ)的,這本書讓我們?cè)贑PU的級(jí)別來進(jìn)一步思考程序設(shè)計(jì)。

若干年前,金庸群俠傳這個(gè)游戲很流行,里頭有一種武功初練稀松平常,但只要練到第10級(jí),那就比降龍十八掌還厲害。學(xué)用C和C++也是如此吧,無它,唯勤而已。

CSDN: 您談到了因?yàn)楫a(chǎn)品遷移到Linux Cluster所以深入的研究了IP Load Balance及OpenSAF,在這兩個(gè)方面有可分享給讀者的么?

許鵬: IP Load Balance這一塊主要是對(duì)ipvs和nat的升級(jí)協(xié)議rsip作了一些研究。有關(guān)這方面的資料網(wǎng)上很多,也不敢亂加評(píng)論,如果想作細(xì)致深入學(xué)習(xí)的話,以lvs ipvs作為關(guān)鍵字搜一下就可以了。熟悉ipvs最好的方式還是試驗(yàn)加源碼閱讀,其源碼已經(jīng)在Linux內(nèi)核之中,在network目錄下。

OpenSAF是SAF的開源實(shí)現(xiàn),主要目的是為了解決HA和Scalability的問題,對(duì)于電信產(chǎn)品來說,高可靠性始終是一個(gè)硬性的指標(biāo)。SAF制定了一套齊備的標(biāo)準(zhǔn),在開源實(shí)現(xiàn)方面情況變得有意思起來。OpenSAF基本上跟隨了SAF標(biāo)準(zhǔn),而其它一些則認(rèn)為標(biāo)準(zhǔn)過于龐雜,而只選取其中一部分加以深化實(shí)施,如corosync和pacemaker。

CSDN:您花了大量的時(shí)間閱讀Spark和Storm源碼,并進(jìn)行測(cè)試,對(duì)這兩個(gè)計(jì)算框架您有做過比較嗎?有什么結(jié)論可以為大家分享?

許鵬: 這是一個(gè)經(jīng)常會(huì)被提及的問題,之所以如此就是因?yàn)閮蓚€(gè)產(chǎn)品都很優(yōu)秀。Storm是專注于實(shí)時(shí)流計(jì)算的框架,在Twitter有大量成功的應(yīng)用,其整體架構(gòu)是非常易于理解的。Spark則更為通用一些,不僅支持實(shí)時(shí)流計(jì)算,也支持批處理,圖及機(jī)器學(xué)習(xí)方面的應(yīng)用。所以要對(duì)兩者進(jìn)行比較的話,我們還是將目標(biāo)縮小到流處理這一塊。

  1. 從應(yīng)用的廣泛程度上來說,Storm可能擁有更多的用戶基礎(chǔ)。
  2. 從處理速度上而言,似乎Spark更勝一籌。
  3. 從當(dāng)前整個(gè)項(xiàng)目的活躍度而言,Spark更為活躍。
  4. Spark可以與Hadoop的新一代資源管理框架Yarn更為緊密的結(jié)合。
  5. Spark有Cloudera的大力支撐,而Hortonwork則是Storm的最大推手,兩家都是大數(shù)據(jù)處理領(lǐng)域的翹楚,一場龍爭虎斗很值得期待。
  6. Spark目前還缺少Storm所支持rebalance功能,不能動(dòng)態(tài)利用新增加的節(jié)點(diǎn)。
  7. Spark和Storm在支持“exactly-once”的處理上,有不同的實(shí)現(xiàn),Spark是依賴于Spark,而Storm則是利用Trident來解決,TridentTopology對(duì)storm中基礎(chǔ)的bolt和spout做了封裝,讓上層應(yīng)用的開發(fā)更加關(guān)注于業(yè)務(wù)本身。
  8. 二者有一個(gè)共同的缺點(diǎn)或毛病,就是對(duì)資源在較細(xì)粒度的調(diào)配方面,支持得還不夠

CSDN:大量開源項(xiàng)目使用和學(xué)習(xí)經(jīng)驗(yàn),您對(duì)開源運(yùn)動(dòng)怎么看?如何才能更好的學(xué)習(xí)一個(gè)開源項(xiàng)目?開源項(xiàng)目使用時(shí)又該注意些什么?

許鵬: 開源項(xiàng)目離不開大家的廣泛參與和支持,要讓一個(gè)開源項(xiàng)目取得成功,有多個(gè)方面的因素。

  • 產(chǎn)品本身的創(chuàng)新功能
  • 在實(shí)際項(xiàng)目中的應(yīng)用和推廣,業(yè)界大佬企業(yè)的積極參與
  • 教育培訓(xùn)市場的積極跟進(jìn),也是一個(gè)開源項(xiàng)目最終能夠長久生存下來的必備因素

CSDN:能否分享一些您對(duì)當(dāng)下大數(shù)據(jù)的看法?

許鵬: 大數(shù)據(jù)要解決的兩大基本問題是“數(shù)據(jù)存儲(chǔ)”和“數(shù)據(jù)分析”,在數(shù)據(jù)存儲(chǔ)領(lǐng)域,開源實(shí)現(xiàn)方面似乎大家都已經(jīng)首肯HDFS的方式,不再懷疑。

而在數(shù)據(jù)分析的計(jì)算框架方面,目前還有大量的競爭或博弈出現(xiàn)。Spark就是一例,分析領(lǐng)域除了基于傳統(tǒng)關(guān)系型數(shù)據(jù)庫的分析方式,還有圖計(jì)算相關(guān)和機(jī)器學(xué)習(xí)為代表的數(shù)據(jù)挖掘。顯然機(jī)器學(xué)習(xí)是一個(gè)大熱門,這一方面?zhèn)€人所知甚少,不敢胡說八道,但門檻似乎很高,數(shù)學(xué)底子一定要好,決不是簡簡單單的調(diào)用幾個(gè)API就完事了的。

云計(jì)算是大數(shù)據(jù)的支撐,雖然脫胎于虛擬化,不乏商業(yè)宣傳的味道,但是大量機(jī)器的安裝部署,如果全部使用物理機(jī)一臺(tái)臺(tái)去裝,肯定會(huì)讓人發(fā)瘋,云計(jì)算讓大規(guī)模部署和產(chǎn)品遷移變的更為簡單。

CSDN:對(duì)于閱讀源碼您有著豐富的經(jīng)驗(yàn),對(duì)想閱讀源碼又不知道如何下手的同學(xué)可否做一些分享?

許鵬: 源碼閱讀其實(shí)是一個(gè)逆向的工程,這期間必須會(huì)遇到種種問題。一般來說,我會(huì)遵循這樣一個(gè)思維范式――Problem domain→model→architecture&implementation→improvement→best practice。

1. 首先搞清楚要分析的產(chǎn)品解決的問題是什么,這個(gè)問題在哪個(gè)大的范疇里,也就是要搞清楚problem domain。一個(gè)著名的開源產(chǎn)品必定在Wikipedia上有相應(yīng)的條目,所以一開始去看wikipedia是破題的一種極好方式。

2. 清楚要分析產(chǎn)品的大體框架和關(guān)鍵性的概念,也就是理解清楚architecture和key concept。

3. 將分析的產(chǎn)品實(shí)實(shí)在在的運(yùn)行起來,我一般選擇debian或archlinux作為工作平臺(tái),它們提供了豐富的軟件包,可以很快的將東西安裝并運(yùn)行。熟悉Linux本身對(duì)于開源項(xiàng)目的源碼閱讀還是大有裨益的。

4. 修改日志級(jí)別,得到豐富的日志信息。有了這個(gè)為基礎(chǔ),再來開始真正的源碼閱讀和分析。

5. 源碼分析的時(shí)候,要始終問這幾個(gè)問題。

  • 進(jìn)程以及線程的啟動(dòng)順序
  • 搞清楚調(diào)用關(guān)系call flow
  • 這一部分代碼是在同一個(gè)進(jìn)程中么,同一個(gè)線程中么,運(yùn)行在同一臺(tái)機(jī)器中么
  • 每一個(gè)線程都要問清楚,什么時(shí)候啟動(dòng)的,什么時(shí)候停止的
  • 消息傳遞的路徑,針對(duì)每一個(gè)函數(shù),搞清楚,input是誰傳給我的,output要傳給誰,由哪個(gè)來傳
  • 搞清楚上述的問題之后,就將最開始提到的對(duì)architecture的了解做到具體而微了。有了這個(gè)基礎(chǔ)之后,再繼續(xù)往下問
  • 當(dāng)前實(shí)現(xiàn)的性能如何,比如i/o, cpu, network 這個(gè)需要做相應(yīng)的測(cè)試方面的試驗(yàn)
  • 當(dāng)前的解決方案還有優(yōu)化空間嗎,比如針對(duì)spark中的scheduling問題,就有sparrow的優(yōu)化機(jī)制提出

6. 碰到具體的問題一時(shí)解決不了怎么辦

  • 用好google,用好stackoverflow
  • 將碰到的問題模型化,寫一些驗(yàn)證性的代碼,或者是寫一個(gè)小的demo來驗(yàn)證,我在解決許多很妖的bug,也是采用類似的思路
  • 找到相應(yīng)的用戶論壇,發(fā)帖虛心請(qǐng)教
  • 如果還是不行,就先擱一擱,去看能看懂的地方

7. 編程語言選擇

  • 源碼閱讀中可能遇到的一個(gè)問題就是這個(gè)語言是新近出來的,我根本沒學(xué)過,我需要系統(tǒng)去掌握該語言之后,才能來看源碼么。我的看法是可以邊看邊學(xué),在掌握語言的過程中,牢牢把握住這幾個(gè)問題
  • 基本語法:數(shù)據(jù)類型、控制語句、函數(shù)定義
  • 是否支持FP
  • 多態(tài)和繼承
  • 現(xiàn)代編程語言基本上都混合了面向過程,面向?qū)ο蠛秃瘮?shù)式編程的特點(diǎn),即便是C++或新近的java8都如此。
  • Storm用Clojure來編寫,而Spark使用Scala,就語言的偏好來說,我更喜歡Clojure一些。

稍微總結(jié)一下,我想源碼分析心中要有兩幅大圖,將整體與局部很好的結(jié)合起來思考

  • 一是太極圖,要有整體性的思維,要對(duì)architecture有掌握,對(duì)其在整個(gè)生態(tài)系統(tǒng)中的定位要清楚,東方式的思維強(qiáng)調(diào)整體性
  • 二是數(shù)學(xué)中常見的笛卡爾坐標(biāo)體系,將大的問題拆分之后一一研究,做到具體而微,西方式的思維強(qiáng)調(diào)個(gè)性

CSDN:有什么可以補(bǔ)充給讀者的?

許鵬: 選擇自己感興趣的東西,堅(jiān)持做下去,一定會(huì)有回報(bào),誠如《一代宗師》中所說的那樣,“念念不忘,必有回響”。 

編碼到底是一件技術(shù)活,還是一項(xiàng)藝術(shù)活,這是一個(gè)令人糾結(jié)的話題。

最后,感謝CSDN的采訪,謝謝那些為開源項(xiàng)目耗費(fèi)大量精力的開發(fā)者。由于本人代碼閱讀時(shí)間比較倉促,錯(cuò)誤在所難免,有不對(duì)的地方,敬請(qǐng)指出,學(xué)無先后,能者為師。

Storm&Spark源碼走讀

讀源碼是開源項(xiàng)目最好的學(xué)習(xí)方式,然而當(dāng)項(xiàng)目規(guī)模達(dá)到一定程度時(shí),就像許鵬所說,源碼閱讀其實(shí)是一個(gè)逆向的工程,這期間必須會(huì)遇到種種問題。這里我們?yōu)榇蠹曳窒碓S鵬的Spark和Storm源碼走讀,方便大家學(xué)習(xí)。

Spark

  • 許鵬:從零開始學(xué)習(xí),Apache Spark源碼走讀1和2
  • Apache Spark源碼走讀之3 -- Task運(yùn)行期之函數(shù)調(diào)用關(guān)系分析
  • Apache Spark源碼走讀之4 -- DStream實(shí)時(shí)流數(shù)據(jù)處理
  • Apache Spark源碼走讀之5 -- DStream處理的容錯(cuò)性分析
  • Apache Spark源碼走讀之6 -- 存儲(chǔ)子系統(tǒng)分析
  • Apache Spark源碼走讀之7 -- Standalone部署方式分析
  • Apache Spark源碼走讀之8 -- Spark on Yarn
  • Apache Spark源碼走讀之9 -- Spark源碼編譯
  • Apache Spark源碼走讀之10 -- 在YARN上運(yùn)行SparkPi
  • Apache Spark源碼走讀之11 -- sql的解析與執(zhí)行
  • Apache Spark源碼走讀之12 -- Hive on Spark運(yùn)行環(huán)境搭建
  • Apache Spark源碼走讀之13 -- hiveql on spark實(shí)現(xiàn)詳解

Storm

  • Apache Storm源碼閱讀筆記(PDF版)                                        

文/仲浩


免費(fèi)訂閱“CSDN云計(jì)算”微信公眾號(hào),實(shí)時(shí)掌握第一手云中消息!

CSDN作為國內(nèi)最專業(yè)的云計(jì)算服務(wù)平臺(tái),提供云計(jì)算、大數(shù)據(jù)、虛擬化、數(shù)據(jù)中心、OpenStack、CloudStack、Hadoop、Spark、機(jī)器學(xué)習(xí)、智能算法等相關(guān)云計(jì)算觀點(diǎn),云計(jì)算技術(shù),云計(jì)算平臺(tái),云計(jì)算實(shí)踐,云計(jì)算產(chǎn)業(yè)資訊等服務(wù)。

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: www毛片com| 极品丝袜高跟91极品系列 | 男人都懂的www网站免费观看 | 成人综合色站 | 久久国产免费福利资源网站 | 国内精品免费视频精选在线观看 | 最近中文字幕免费大全8高清 | 日韩亚洲欧美综合一区二区三区 | 色啪视频 | 免费jlzzjlzz在线播放视频 | 亚洲第99页| 亚洲国产精品久久久久久 | 日本特级全黄一级毛片 | 欧美整片完整片视频在线 | 中文字幕2021 | 欧美经典剧情系列h版在线观看 | 精品乱码一区二区三区在线 | 伊人久久大香线蕉亚洲 | 亚洲国产日韩成人综合天堂 | 亚州精品永久观看视频 | 夜夜骑狠狠干 | 免费国产叼嘿秀视频 | 男女免费爽爽爽在线视频 | 香蕉超级碰碰碰97视频在线观看 | 视频啪啪 | 91久久精品国产一区二区 | 爱爱综合 | 国产精品久久久久久福利漫画 | 亚洲精品高清视频 | 美女网站视频在线 | 亚洲精品一区二区观看 | 色图综合| 国产尤物精品视频 | 在线观看国产情趣免费视频 | 亚洲大逼 | 另类亚洲孕妇分娩网址 | 亚洲区一区 | 女人天堂网在线观看2019 | xxxx性欧美高清 | 老司机免费视频 | 中文字幕日本在线 |