专访许鹏:谈C程序员修养及大型项目源码阅读与学习



订阅云计算RSS CSDN首页 >  云计算


发表于 2014-06-05 21:1619253次阅读| 来源 CSDN84 条评论| 作者 仲浩

云计算 大数据 Spark Storm 编程语言 技术博客推荐 开源
摘要:阅读源码是开源项目最好的学习方式,然而真正的执行起来却并不容易。这里我们为大家分享许鹏的源码阅读经验、C程序员的修养以及Spark和Storm源码走读博文。

对许鹏的第一印象来源于其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,这样就容易搞清楚在设计一个系统的时候需要有哪些关注点。 

  • 是单进程还是多进程,是单进程多线程还是多线程单进程
  • 进程间通信采用什么方式
  • 消息的encoding/decoding以及message passing,每次都要自己写一次,不累吗,有没有好的开源实现,如Protobuffer、Thrift
  • 对于一个Network Server来说,基本构架大体上还是相同的,acceptor→dispatcher→worker

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则更为通用一些,不仅支持实时流计算,也支持批处理,图及机器学习方面的应用。所以要对两者进行比较的话,我们还是将目标缩小到流处理这一块。

  1. 从应用的广泛程度上来说,Storm可能拥有更多的用户基础。
  2. 从处理速度上而言,似乎Spark更胜一筹。
  3. 从当前整个项目的活跃度而言,Spark更为活跃。
  4. Spark可以与Hadoop的新一代资源管理框架Yarn更为紧密的结合。
  5. Spark有Cloudera的大力支撑,而Hortonwork则是Storm的最大推手,两家都是大数据处理领域的翘楚,一场龙争虎斗很值得期待。
  6. Spark目前还缺少Storm所支持rebalance功能,不能动态利用新增加的节点。
  7. Spark和Storm在支持“exactly-once”的处理上,有不同的实现,Spark是依赖于Spark,而Storm则是利用Trident来解决,TridentTopology对storm中基础的bolt和spout做了封装,让上层应用的开发更加关注于业务本身。
  8. 二者有一个共同的缺点或毛病,就是对资源在较细粒度的调配方面,支持得还不够

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. 源码分析的时候,要始终问这几个问题。

  • 进程以及线程的启动顺序
  • 搞清楚调用关系call flow
  • 这一部分代码是在同一个进程中么,同一个线程中么,运行在同一台机器中么
  • 每一个线程都要问清楚,什么时候启动的,什么时候停止的
  • 消息传递的路径,针对每一个函数,搞清楚,input是谁传给我的,output要传给谁,由哪个来传
  • 搞清楚上述的问题之后,就将最开始提到的对architecture的了解做到具体而微了。有了这个基础之后,再继续往下问
  • 当前实现的性能如何,比如i/o, cpu, network 这个需要做相应的测试方面的试验
  • 当前的解决方案还有优化空间吗,比如针对spark中的scheduling问题,就有sparrow的优化机制提出

6. 碰到具体的问题一时解决不了怎么办

  • 用好google,用好stackoverflow
  • 将碰到的问题模型化,写一些验证性的代码,或者是写一个小的demo来验证,我在解决许多很妖的bug,也是采用类似的思路
  • 找到相应的用户论坛,发帖虚心请教
  • 如果还是不行,就先搁一搁,去看能看懂的地方

7. 编程语言选择

  • 源码阅读中可能遇到的一个问题就是这个语言是新近出来的,我根本没学过,我需要系统去掌握该语言之后,才能来看源码么。我的看法是可以边看边学,在掌握语言的过程中,牢牢把握住这几个问题
  • 基本语法:数据类型、控制语句、函数定义
  • 是否支持FP
  • 多态和继承
  • 现代编程语言基本上都混合了面向过程,面向对象和函数式编程的特点,即便是C++或新近的java8都如此。
  • Storm用Clojure来编写,而Spark使用Scala,就语言的偏好来说,我更喜欢Clojure一些。 

稍微总结一下,我想源码分析心中要有两幅大图,将整体与局部很好的结合起来思考

  • 一是太极图,要有整体性的思维,要对architecture有掌握,对其在整个生态系统中的定位要清楚,东方式的思维强调整体性
  • 二是数学中常见的笛卡尔坐标体系,将大的问题拆分之后一一研究,做到具体而微,西方式的思维强调个性

CSDN:有什么可以补充给读者的?

许鹏: 选择自己感兴趣的东西,坚持做下去,一定会有回报,诚如《一代宗师》中所说的那样,“念念不忘,必有回响”。 

编码到底是一件技术活,还是一项艺术活,这是一个令人纠结的话题。 

最后,感谢CSDN的采访,谢谢那些为开源项目耗费大量精力的开发者。由于本人代码阅读时间比较仓促,错误在所难免,有不对的地方,敬请指出,学无先后,能者为师。

Storm&Spark源码走读

读源码是开源项目最好的学习方式,然而当项目规模达到一定程度时,就像许鹏所说,源码阅读其实是一个逆向的工程,这期间必须会遇到种种问题。这里我们为大家分享许鹏的Spark和Storm源码走读,方便大家学习。 

Spark

  • 许鹏:从零开始学习,Apache Spark源码走读1和2
  • Apache Spark源码走读之3 -- Task运行期之函数调用关系分析
  • Apache Spark源码走读之4 -- DStream实时流数据处理 
  • Apache Spark源码走读之5 -- DStream处理的容错性分析
  • Apache Spark源码走读之6 -- 存储子系统分析 
  • Apache Spark源码走读之7 -- Standalone部署方式分析
  • Apache Spark源码走读之8 -- Spark on Yarn
  • Apache Spark源码走读之9 -- Spark源码编译
  • Apache Spark源码走读之10 -- 在YARN上运行SparkPi 
  • Apache Spark源码走读之11 -- sql的解析与执行 
  • Apache Spark源码走读之12 -- Hive on Spark运行环境搭建 
  • Apache Spark源码走读之13 -- hiveql on spark实现详解 

Storm

  • Apache Storm源码阅读笔记(PDF版)                                        

文/仲浩


免费订阅“CSDN云计算”微信公众号,实时掌握第一手云中消息!

CSDN作为国内最专业的云计算服务平台,提供云计算、大数据、虚拟化、数据中心、OpenStack、CloudStack、Hadoop、Spark、机器学习、智能算法等相关云计算观点,云计算技术,云计算平台,云计算实践,云计算产业资讯等服务。

84
 
3
  • 周末巨献:100+诡异的数据集,20万Eclipse Bug、死囚遗言等
  • 一周消息树:我们从WWDC 2014收获了什么?
  • Talend为Hadoop更新开源大数据平台,性能大幅提高
  • 郭蕴华:Spark监控实战
  • 李巍:TDW与PostgreSQL数据互访问功能
  • 马淑婧:TDW Protobuf存储格式功能介绍

已有84条评论

还可以再输入500个字
您还没有登录! 请 登录 或 注册

  • 最新评论
  • 最热评论

山依然  6秒前
   回复
armstrongoyw  1小时前
太厉害了,高手呀,膜拜中...!
   回复
sinat_16225025  2小时前
Joan
   回复
hua田木又寸下  4小时前
马克
   回复
arcopengl  5小时前
mark
   回复
qq_16213461  5小时前
厉害啊
   回复
qq_16212153  5小时前
厉害!
   回复
龙门威甲  5小时前
太厉害了,推荐的书我仅仅是听说过!
   回复
中国电信广东网厅  7小时前  来自 新浪微博
还有比世界杯没有卡卡,上网卡卡更悲催的事儿吗?电信光纤拯救你,无线路由白送[呵呵]你,京东卡属于你,网速太快,请系安全带>>http://t.cn/RvJQwQP
   回复
ZZW_19951211  7小时前
   回复
中国电信广东网厅  7小时前  来自 新浪微博
还有比世界杯没有卡卡,[呵呵]上网卡卡更悲催的事儿吗?电信光纤拯救你,无线路由白送你,京东卡属于你,网速太快,请系安全带>>http://t.cn/RvJHiSz
   回复
FunnyThan  7小时前
校友啊!
   回复
afeng13142  9小时前
牛b
   回复
caolaosanahnu  9小时前
值得学习
   回复
disappearedgod  10小时前
mark
   回复
逸卿  11小时前
不错不错
   回复
诸峰之巅  11小时前
不错,我的学习是以C为主体编程语言的,您的博文使我对如何进行更好的学习很有帮助,谢谢。
   回复
ben大神点C  11小时前
风景很漂亮~~/BRBen Tang
   回复
qq_16191315  13小时前
好啊
   回复
xiaolugood  20小时前
markzhi
   回复
yhuihon  20小时前
赞一个,都不知道如何学习看源码,无疑这篇博文,为我点亮了学习的道路,谢谢
   回复
ceofit  20小时前
必须顶啊!
   回复
boylinux  22小时前
非常赞!
   回复
reed2014  2014-06-06 18:49
赞一个,都不知道如何学习看源码,无疑这篇博文,为我点亮了学习的道路,谢谢
   回复
rogerjie  2014-06-06 17:58
膜拜下。。。。
   回复
rationalgo  2014-06-06 17:42
mark
   回复
小人物-  2014-06-06 16:51
mark
   回复
bzhxuexi  2014-06-06 16:23
学长啊,必须顶啊!
   回复
todo9351  2014-06-06 15:37
"2. 清楚要分析产品的大体框架和关键性的概念,也就是理解清楚architecture和key concept。"真受不了这装逼,你不会说体系和关键概念吗?非得满口的术语。
   回复
zsmd000  10小时前
不是帮他辩解,其实我觉得术语比中文翻译更好理解,中文译出来的各不一样反而感觉晦涩,做个demo,功能showcase,诸如此类
   回复
hn441907002  2014-06-06 15:36
牛人你好
   回复
晒乾幸情  2014-06-06 15:34
   回复
zxfishhack  2014-06-06 15:12
mark
   回复
qq_16174335  2014-06-06 15:03
谢谢
   回复
qq_16174321  2014-06-06 15:02
谢谢分享
   回复
wallaceno1  2014-06-06 13:12
写得挺实用的
   回复
博晓  2014-06-06 13:05
MARK
   回复
magicfuzzx  2014-06-06 13:04
mark,大家啊
   回复
飞天鼠  2014-06-06 12:45
mark
   回复
aCoder2013  2014-06-06 12:19
mark
   回复
lazy_virus  2014-06-06 11:35
念念不忘,必有回响!
1票,来自doglesss    回复
断肠草007  2014-06-06 11:24
共勉
   回复
星夜落尘  2014-06-06 11:04
有干货
   回复
lys07962000  2014-06-06 11:04
!@#¥#@¥%#¥……56关注下,路过!!!
   回复
荒颜  2014-06-06 10:48
很能激励人,很多人都想看源码,但是实际往往会无从下手然后放弃,希望自己能慢慢的做到!
   回复
V_wo独尊  2014-06-06 10:42
mark
   回复
back_ystone  2014-06-06 10:40
makr,牛人
   回复
IT_sBird  2014-06-06 10:24
mark ...
   回复
bzhxuexi  2014-06-06 10:23
膜拜大牛,努力!
   回复
kamen0949  2014-06-06 10:15
mark
   回复
eziowayne  2014-06-06 10:10
干货,对理解大项目很有帮助。此人是个低调的大师啊。
   回复
请您注意
  • ·自觉遵守:爱国、守法、自律、真实、文明的原则
  • ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规
  • ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品
  • ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • ·您在CSDN新闻评论发表的作品,CSDN有权在网站内保留、转载、引用或者删除
  • ·参与本评论即表明您已经阅读并接受上述条款
  • CSDN官方微信
  • 扫描二维码,向CSDN吐槽
  • 微信号:CSDNnews
专访许鹏:谈C程序员修养及大型项目源码阅读与学习_第1张图片
程序员杂志for iPad 免费下载
每日资讯快速浏览

微博关注

width="100%" height="300" class="share_self" frameborder="0" scrolling="no" src="http://widget.weibo.com/weiboshow/index.php?language=&width=0&height=300&fansRow=2&ptype=0&speed=0&skin=5&isTitle=0&noborder=0&isWeibo=1&isFans=0&uid=1741045432&verifier=8c7c607d&dpc=1">

相关热门文章

  • 专访许鹏:谈C程序员修养及大型项目源码阅读与学习
  • 专访谈天霆:超越PC,绝非妄言
  • 周末巨献:100+诡异的数据集,20万Eclipse Bug、死囚遗言等
  • 专访Google数据科学家彭晨:大数据成为潮流走近各行各业!
  • 大数据计算新贵Spark在腾讯雅虎优酷成功应用解析
  • Amazon继续登顶IaaS魔力象限,榜眼是微软而非Google
  • 深度分享:我所参加的2014年人机交互(CHI)大会
  • 【技术博客推荐】张安站:大数据时代下的商业存储
  • 感受英特尔生态观:一切皆为计算
  • 中国式大数据与分析的现状和未来趋势

热门标签

  • Java
  • VPN
  • Android
  • iOS
  • ERP
  • IE10
  • Eclipse
  • CRM
  • JavaScript
  • Ubuntu
  • NFC
  • WAP
  • jQuery
  • 数据库
  • BI
  • HTML5
  • Spring
  • Apache
  • Hadoop
  • .NET
  • API

热门专区

  • IBM新兴技术大学
  • 专访许鹏:谈C程序员修养及大型项目源码阅读与学习_第2张图片京东云电商解决方案
  • 专访许鹏:谈C程序员修养及大型项目源码阅读与学习_第3张图片高通开发者专区
  • 专访许鹏:谈C程序员修养及大型项目源码阅读与学习_第4张图片异构编程专区
  • 专访许鹏:谈C程序员修养及大型项目源码阅读与学习_第5张图片Cloud Foundry论坛
Top_arrow
公司简介| 招贤纳士| 广告服务| 银行汇款帐号| 联系方式| 版权声明| 法律顾问| 问题报告| 合作伙伴| 论坛反馈
网站客服  杂志客服  微博客服  [email protected]  400-600-2320
京 ICP 证 070598 号
北京创新乐知信息技术有限公司 版权所有
江苏乐知网络技术有限公司 提供商务支持
Copyright © 1999-2014, CSDN.NET, All Rights Reserved  GongshangLogo
订阅云计算RSS CSDN首页 >  云计算

专访许鹏:谈C程序员修养及大型项目源码阅读与学习

发表于 2014-06-05 21:1619253次阅读| 来源 CSDN84 条评论| 作者 仲浩

云计算 大数据 Spark Storm 编程语言 技术博客推荐 开源
allowtransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2014-06-05%2F2820092-interview-with-pengxu&type=3&count=&appkey=&title=%E9%98%85%E8%AF%BB%E6%BA%90%E7%A0%81%E6%98%AF%E5%BC%80%E6%BA%90%E9%A1%B9%E7%9B%AE%E6%9C%80%E5%A5%BD%E7%9A%84%E5%AD%A6%E4%B9%A0%E6%96%B9%E5%BC%8F%EF%BC%8C%E7%84%B6%E8%80%8C%E7%9C%9F%E6%AD%A3%E7%9A%84%E6%89%A7%E8%A1%8C%E8%B5%B7%E6%9D%A5%E5%8D%B4%E5%B9%B6%E4%B8%8D%E5%AE%B9%E6%98%93%E3%80%82%E8%BF%99%E9%87%8C%E6%88%91%E4%BB%AC%E4%B8%BA%E5%A4%A7%E5%AE%B6%E5%88%86%E4%BA%AB%E8%AE%B8%E9%B9%8F%E7%9A%84%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB%E7%BB%8F%E9%AA%8C%E3%80%81C%E7%A8%8B%E5%BA%8F%E5%91%98%E7%9A%84%E4%BF%AE%E5%85%BB%E4%BB%A5%E5%8F%8ASpark%E5%92%8CStorm%E6%BA%90%E7%A0%81%E8%B5%B0%E8%AF%BB%E5%8D%9A%E6%96%87%E3%80%82&pic=&ralateUid=&language=zh_cn&rnd=1402144799505" width="22" height="16"> 摘要:阅读源码是开源项目最好的学习方式,然而真正的执行起来却并不容易。这里我们为大家分享许鹏的源码阅读经验、C程序员的修养以及Spark和Storm源码走读博文。

对许鹏的第一印象来源于其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,这样就容易搞清楚在设计一个系统的时候需要有哪些关注点。 

  • 是单进程还是多进程,是单进程多线程还是多线程单进程
  • 进程间通信采用什么方式
  • 消息的encoding/decoding以及message passing,每次都要自己写一次,不累吗,有没有好的开源实现,如Protobuffer、Thrift
  • 对于一个Network Server来说,基本构架大体上还是相同的,acceptor→dispatcher→worker

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则更为通用一些,不仅支持实时流计算,也支持批处理,图及机器学习方面的应用。所以要对两者进行比较的话,我们还是将目标缩小到流处理这一块。

  1. 从应用的广泛程度上来说,Storm可能拥有更多的用户基础。
  2. 从处理速度上而言,似乎Spark更胜一筹。
  3. 从当前整个项目的活跃度而言,Spark更为活跃。
  4. Spark可以与Hadoop的新一代资源管理框架Yarn更为紧密的结合。
  5. Spark有Cloudera的大力支撑,而Hortonwork则是Storm的最大推手,两家都是大数据处理领域的翘楚,一场龙争虎斗很值得期待。
  6. Spark目前还缺少Storm所支持rebalance功能,不能动态利用新增加的节点。
  7. Spark和Storm在支持“exactly-once”的处理上,有不同的实现,Spark是依赖于Spark,而Storm则是利用Trident来解决,TridentTopology对storm中基础的bolt和spout做了封装,让上层应用的开发更加关注于业务本身。
  8. 二者有一个共同的缺点或毛病,就是对资源在较细粒度的调配方面,支持得还不够

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. 源码分析的时候,要始终问这几个问题。

  • 进程以及线程的启动顺序
  • 搞清楚调用关系call flow
    • 这一部分代码是在同一个进程中么,同一个线程中么,运行在同一台机器中么
    • 每一个线程都要问清楚,什么时候启动的,什么时候停止的
    • 消息传递的路径,针对每一个函数,搞清楚,input是谁传给我的,output要传给谁,由哪个来传
    • 搞清楚上述的问题之后,就将最开始提到的对architecture的了解做到具体而微了。有了这个基础之后,再继续往下问
      • 当前实现的性能如何,比如i/o, cpu, network 这个需要做相应的测试方面的试验
      • 当前的解决方案还有优化空间吗,比如针对spark中的scheduling问题,就有sparrow的优化机制提出

      6. 碰到具体的问题一时解决不了怎么办

      • 用好google,用好stackoverflow
      • 将碰到的问题模型化,写一些验证性的代码,或者是写一个小的demo来验证,我在解决许多很妖的bug,也是采用类似的思路
      • 找到相应的用户论坛,发帖虚心请教
      • 如果还是不行,就先搁一搁,去看能看懂的地方

      7. 编程语言选择

      • 源码阅读中可能遇到的一个问题就是这个语言是新近出来的,我根本没学过,我需要系统去掌握该语言之后,才能来看源码么。我的看法是可以边看边学,在掌握语言的过程中,牢牢把握住这几个问题
        • 基本语法:数据类型、控制语句、函数定义
        • 是否支持FP
        • 多态和继承
        • 现代编程语言基本上都混合了面向过程,面向对象和函数式编程的特点,即便是C++或新近的java8都如此。
        • Storm用Clojure来编写,而Spark使用Scala,就语言的偏好来说,我更喜欢Clojure一些。 

        稍微总结一下,我想源码分析心中要有两幅大图,将整体与局部很好的结合起来思考

        • 一是太极图,要有整体性的思维,要对architecture有掌握,对其在整个生态系统中的定位要清楚,东方式的思维强调整体性
        • 二是数学中常见的笛卡尔坐标体系,将大的问题拆分之后一一研究,做到具体而微,西方式的思维强调个性

        CSDN:有什么可以补充给读者的?

        许鹏: 选择自己感兴趣的东西,坚持做下去,一定会有回报,诚如《一代宗师》中所说的那样,“念念不忘,必有回响”。 

        编码到底是一件技术活,还是一项艺术活,这是一个令人纠结的话题。 

        最后,感谢CSDN的采访,谢谢那些为开源项目耗费大量精力的开发者。由于本人代码阅读时间比较仓促,错误在所难免,有不对的地方,敬请指出,学无先后,能者为师。

        Storm&Spark源码走读

        读源码是开源项目最好的学习方式,然而当项目规模达到一定程度时,就像许鹏所说,源码阅读其实是一个逆向的工程,这期间必须会遇到种种问题。这里我们为大家分享许鹏的Spark和Storm源码走读,方便大家学习。 

        Spark

        • 许鹏:从零开始学习,Apache Spark源码走读1和2
        • Apache Spark源码走读之3 -- Task运行期之函数调用关系分析
        • Apache Spark源码走读之4 -- DStream实时流数据处理 
        • Apache Spark源码走读之5 -- DStream处理的容错性分析
        • Apache Spark源码走读之6 -- 存储子系统分析 
        • Apache Spark源码走读之7 -- Standalone部署方式分析
        • Apache Spark源码走读之8 -- Spark on Yarn
        • Apache Spark源码走读之9 -- Spark源码编译
        • Apache Spark源码走读之10 -- 在YARN上运行SparkPi 
        • Apache Spark源码走读之11 -- sql的解析与执行 
        • Apache Spark源码走读之12 -- Hive on Spark运行环境搭建 
        • Apache Spark源码走读之13 -- hiveql on spark实现详解 

        Storm

        • Apache Storm源码阅读笔记(PDF版)                                        

        文/仲浩


        免费订阅“CSDN云计算”微信公众号,实时掌握第一手云中消息!

        CSDN作为国内最专业的云计算服务平台,提供云计算、大数据、虚拟化、数据中心、OpenStack、CloudStack、Hadoop、Spark、机器学习、智能算法等相关云计算观点,云计算技术,云计算平台,云计算实践,云计算产业资讯等服务。

        84
         
        3
        • 周末巨献:100+诡异的数据集,20万Eclipse Bug、死囚遗言等
        • 一周消息树:我们从WWDC 2014收获了什么?
        • Talend为Hadoop更新开源大数据平台,性能大幅提高
        • 郭蕴华:Spark监控实战
        • 李巍:TDW与PostgreSQL数据互访问功能
        • 马淑婧:TDW Protobuf存储格式功能介绍

        已有84条评论

        还可以再输入500个字
        您还没有登录! 请 登录 或 注册

        • 最新评论
        • 最热评论

        山依然  6秒前
           回复
        armstrongoyw  1小时前
        太厉害了,高手呀,膜拜中...!
           回复
        sinat_16225025  2小时前
        Joan
           回复
        hua田木又寸下  4小时前
        马克
           回复
        arcopengl  5小时前
        mark
           回复
        qq_16213461  5小时前
        厉害啊
           回复
        qq_16212153  5小时前
        厉害!
           回复
        龙门威甲  5小时前
        太厉害了,推荐的书我仅仅是听说过!
           回复
        中国电信广东网厅  7小时前  来自 新浪微博
        还有比世界杯没有卡卡,上网卡卡更悲催的事儿吗?电信光纤拯救你,无线路由白送[呵呵]你,京东卡属于你,网速太快,请系安全带>>http://t.cn/RvJQwQP
           回复
        ZZW_19951211  7小时前
           回复
        中国电信广东网厅  7小时前  来自 新浪微博
        还有比世界杯没有卡卡,[呵呵]上网卡卡更悲催的事儿吗?电信光纤拯救你,无线路由白送你,京东卡属于你,网速太快,请系安全带>>http://t.cn/RvJHiSz
           回复
        FunnyThan  7小时前
        校友啊!
           回复
        afeng13142  9小时前
        牛b
           回复
        caolaosanahnu  9小时前
        值得学习
           回复
        disappearedgod  10小时前
        mark
           回复
        逸卿  11小时前
        不错不错
           回复
        诸峰之巅  11小时前
        不错,我的学习是以C为主体编程语言的,您的博文使我对如何进行更好的学习很有帮助,谢谢。
           回复
        ben大神点C  11小时前
        风景很漂亮~~/BRBen Tang
           回复
        qq_16191315  13小时前
        好啊
           回复
        xiaolugood  20小时前
        markzhi
           回复
        yhuihon  20小时前
        赞一个,都不知道如何学习看源码,无疑这篇博文,为我点亮了学习的道路,谢谢
           回复
        ceofit  20小时前
        必须顶啊!
           回复
        boylinux  22小时前
        非常赞!
           回复
        reed2014  2014-06-06 18:49
        赞一个,都不知道如何学习看源码,无疑这篇博文,为我点亮了学习的道路,谢谢
           回复
        rogerjie  2014-06-06 17:58
        膜拜下。。。。
           回复
        rationalgo  2014-06-06 17:42
        mark
           回复
        小人物-  2014-06-06 16:51
        mark
           回复
        bzhxuexi  2014-06-06 16:23
        学长啊,必须顶啊!
           回复
        todo9351  2014-06-06 15:37
        "2. 清楚要分析产品的大体框架和关键性的概念,也就是理解清楚architecture和key concept。"真受不了这装逼,你不会说体系和关键概念吗?非得满口的术语。
           回复
        zsmd000  10小时前
        不是帮他辩解,其实我觉得术语比中文翻译更好理解,中文译出来的各不一样反而感觉晦涩,做个demo,功能showcase,诸如此类
           回复
        hn441907002  2014-06-06 15:36
        牛人你好
           回复
        晒乾幸情  2014-06-06 15:34
           回复
        zxfishhack  2014-06-06 15:12
        mark
           回复
        qq_16174335  2014-06-06 15:03
        谢谢
           回复
        qq_16174321  2014-06-06 15:02
        谢谢分享
           回复
        wallaceno1  2014-06-06 13:12
        写得挺实用的
           回复
        博晓  2014-06-06 13:05
        MARK
           回复
        magicfuzzx  2014-06-06 13:04
        mark,大家啊
           回复
        飞天鼠  2014-06-06 12:45
        mark
           回复
        aCoder2013  2014-06-06 12:19
        mark
           回复
        lazy_virus  2014-06-06 11:35
        念念不忘,必有回响!
        1票,来自doglesss    回复
        断肠草007  2014-06-06 11:24
        共勉
           回复
        星夜落尘  2014-06-06 11:04
        有干货
           回复
        lys07962000  2014-06-06 11:04
        !@#¥#@¥%#¥……56关注下,路过!!!
           回复
        荒颜  2014-06-06 10:48
        很能激励人,很多人都想看源码,但是实际往往会无从下手然后放弃,希望自己能慢慢的做到!
           回复
        V_wo独尊  2014-06-06 10:42
        mark
           回复
        back_ystone  2014-06-06 10:40
        makr,牛人
           回复
        IT_sBird  2014-06-06 10:24
        mark ...
           回复
        bzhxuexi  2014-06-06 10:23
        膜拜大牛,努力!
           回复
        kamen0949  2014-06-06 10:15
        mark
           回复
        eziowayne  2014-06-06 10:10
        干货,对理解大项目很有帮助。此人是个低调的大师啊。
           回复
        请您注意
        • ·自觉遵守:爱国、守法、自律、真实、文明的原则
        • ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规
        • ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品
        • ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
        • ·您在CSDN新闻评论发表的作品,CSDN有权在网站内保留、转载、引用或者删除
        • ·参与本评论即表明您已经阅读并接受上述条款
        • CSDN官方微信
        • 扫描二维码,向CSDN吐槽
        • 微信号:CSDNnews
        专访许鹏:谈C程序员修养及大型项目源码阅读与学习_第6张图片
        程序员杂志for iPad 免费下载
        每日资讯快速浏览

        微博关注

        相关热门文章

        • 专访许鹏:谈C程序员修养及大型项目源码阅读与学习
        • 专访谈天霆:超越PC,绝非妄言
        • 周末巨献:100+诡异的数据集,20万Eclipse Bug、死囚遗言等
        • 专访Google数据科学家彭晨:大数据成为潮流走近各行各业!
        • 大数据计算新贵Spark在腾讯雅虎优酷成功应用解析
        • Amazon继续登顶IaaS魔力象限,榜眼是微软而非Google
        • 深度分享:我所参加的2014年人机交互(CHI)大会
        • 【技术博客推荐】张安站:大数据时代下的商业存储
        • 感受英特尔生态观:一切皆为计算
        • 中国式大数据与分析的现状和未来趋势

        热门标签

        • Java
        • VPN
        • Android
        • iOS
        • ERP
        • IE10
        • Eclipse
        • CRM
        • JavaScript
        • Ubuntu
        • NFC
        • WAP
        • jQuery
        • 数据库
        • BI
        • HTML5
        • Spring
        • Apache
        • Hadoop
        • .NET
        • API

        热门专区

        • IBM新兴技术大学
        • 专访许鹏:谈C程序员修养及大型项目源码阅读与学习_第7张图片京东云电商解决方案
        • 专访许鹏:谈C程序员修养及大型项目源码阅读与学习_第8张图片高通开发者专区
        • 专访许鹏:谈C程序员修养及大型项目源码阅读与学习_第9张图片异构编程专区
        • 专访许鹏:谈C程序员修养及大型项目源码阅读与学习_第10张图片Cloud Foundry论坛
        Top_arrow
        公司简介| 招贤纳士| 广告服务| 银行汇款帐号| 联系方式| 版权声明| 法律顾问| 问题报告| 合作伙伴| 论坛反馈
        网站客服  杂志客服  微博客服  [email protected]  400-600-2320
        京 ICP 证 070598 号
        北京创新乐知信息技术有限公司 版权所有
        江苏乐知网络技术有限公司 提供商务支持
        Copyright © 1999-2014, CSDN.NET, All Rights Reserved  GongshangLogo

        你可能感兴趣的:(专访许鹏:谈C程序员修养及大型项目源码阅读与学习)