网站建设常见故障,淘宝网站的建设目的,襄城县住房和城乡建设局网站,搜索引擎优化宝典摘要#xff1a;阅读源码是开源项目最好的学习方式#xff0c;然而真正的执行起来却并不容易。这里我们为大家分享许鹏的源码阅读经验、C程序员的修养以及Spark和Storm源码走读博文。
对许鹏的第一印象来源于其Bolg的粗读#xff0c;最早时候更准确说应该是博文的粗略统计—…摘要阅读源码是开源项目最好的学习方式然而真正的执行起来却并不容易。这里我们为大家分享许鹏的源码阅读经验、C程序员的修养以及Spark和Storm源码走读博文。
对许鹏的第一印象来源于其Bolg的粗读最早时候更准确说应该是博文的粗略统计——1年零6个月完成55篇以上的博文基本每篇都附有代码其中更有多篇源码解读博文。而在浏览完大量的Storm和Spark源码阅读后笔者更认定了这是位Hadoop、Spark、Storm等相关技术从业人员。然而在与许鹏本人沟通之后才发现其实最贴近他本人的描述正是其Blog简介——“富贵有定数学问则无定数——求一分便得一分。”之所以说是贴近因为其中还少了乐于分享的部分。 关于许鹏花名徽沪一郎2000年毕业于南京邮电学院现就业于爱立信上海在UDM部门从事相关产品研发个人关注于Linux内核及实时计算框架如Storm、Spark等。
正如简介中的描述许鹏当下从事基于Linux的CC开发正如他所说的“老套、漂亮的不突出的技术”。言归正传在对许鹏有了简单的了解之后我们一起走进本次的主题——C程序员的修养、大型项目的源码学习以及Spark和Storm的源码走读。 免费订阅“CSDN云计算”微信公众号实时掌握第一手云中消息
CSDN作为国内最专业的云计算服务平台提供云计算、大数据、虚拟化、数据中心、OpenStack、CloudStack、Hadoop、Spark、机器学习、智能算法等相关云计算观点云计算技术云计算平台云计算实践云计算产业资讯等服务。 以下是采访原文
CSDN请介绍一下目前您正在从事的研究和工作内容
许鹏 目前在公司UDMUser Data Management部门从事AAA相关的东西用于用户Wi-Fi接入认证。由于产品需要迁移到Linux Cluster所以对IP Load Balance及OpenSAF都有比较深入的研究和理解。
开发是Linux平台上的CC编程常常遇到进程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则更为通用一些不仅支持实时流计算也支持批处理图及机器学习方面的应用。所以要对两者进行比较的话我们还是将目标缩小到流处理这一块。
从应用的广泛程度上来说Storm可能拥有更多的用户基础。从处理速度上而言似乎Spark更胜一筹。从当前整个项目的活跃度而言Spark更为活跃。Spark可以与Hadoop的新一代资源管理框架Yarn更为紧密的结合。Spark有Cloudera的大力支撑而Hortonwork则是Storm的最大推手两家都是大数据处理领域的翘楚一场龙争虎斗很值得期待。Spark目前还缺少Storm所支持rebalance功能不能动态利用新增加的节点。Spark和Storm在支持“exactly-once”的处理上有不同的实现Spark是依赖于Spark而Storm则是利用Trident来解决TridentTopology对storm中基础的bolt和spout做了封装让上层应用的开发更加关注于业务本身。二者有一个共同的缺点或毛病就是对资源在较细粒度的调配方面支持得还不够
CSDN大量开源项目使用和学习经验您对开源运动怎么看如何才能更好的学习一个开源项目开源项目使用时又该注意些什么
许鹏 开源项目离不开大家的广泛参与和支持要让一个开源项目取得成功有多个方面的因素。
产品本身的创新功能在实际项目中的应用和推广业界大佬企业的积极参与教育培训市场的积极跟进也是一个开源项目最终能够长久生存下来的必备因素
CSDN能否分享一些您对当下大数据的看法
许鹏 大数据要解决的两大基本问题是“数据存储”和“数据分析”在数据存储领域开源实现方面似乎大家都已经首肯HDFS的方式不再怀疑。
而在数据分析的计算框架方面目前还有大量的竞争或博弈出现。Spark就是一例分析领域除了基于传统关系型数据库的分析方式还有图计算相关和机器学习为代表的数据挖掘。显然机器学习是一个大热门这一方面个人所知甚少不敢胡说八道但门槛似乎很高数学底子一定要好决不是简简单单的调用几个API就完事了的。
云计算是大数据的支撑虽然脱胎于虚拟化不乏商业宣传的味道但是大量机器的安装部署如果全部使用物理机一台台去装肯定会让人发疯云计算让大规模部署和产品迁移变的更为简单。
CSDN对于阅读源码您有着丰富的经验对想阅读源码又不知道如何下手的同学可否做一些分享
许鹏 源码阅读其实是一个逆向的工程这期间必须会遇到种种问题。一般来说我会遵循这样一个思维范式——Problem domain→model→architectureimplementation→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的采访谢谢那些为开源项目耗费大量精力的开发者。由于本人代码阅读时间比较仓促错误在所难免有不对的地方敬请指出学无先后能者为师。
StormSpark源码走读
读源码是开源项目最好的学习方式然而当项目规模达到一定程度时就像许鹏所说源码阅读其实是一个逆向的工程这期间必须会遇到种种问题。这里我们为大家分享许鹏的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版