最近一篇比较火的文章中提到,techcrunch上有一篇文章,列举了当前最火的开源软件列表

https://techcrunch.com/2017/04/07/tracking-the-explosive-growth-of-open-source-software/

THE BATTERY OPEN-SOURCE SOFTWARE INDEX
Rank Project Name Overall Project Rating Category Sample of Related Companies
1 Linux 100.00 IT Operations Red Hat, Ubuntu
2 Git 31.10 DevOps GitHub, GitLab
3 MySQL 25.23 Data & Analytics Oracle
4 Node.js 22.75 DevOps NodeSource, Rising Stack
5 Docker 22.61 DevOps Docker
6 Hadoop 16.19 Data & Analytics Cloudera, Hortonworks
7 Elasticsearch 15.72 Data & Analytics Elastic
8 Spark 14.99 Data & Analytics Databricks
9 MongoDB 14.68 Data & Analytics MongoDB
10 Selenium 12.81 DevOps Sauce Labs, BrowserStack
11 NPM 12.31 DevOps NPM
12 Redis 11.61 Data & Analytics Redis Labs
13 Tomcat 11.04 IT Operations NA
14 Jenkins 10.47 DevOps CloudBees
15 Vagrant 8.15 IT Operations HashiCorp
16 Postgres 8.02 Data & Analytics EnterpriseDB
17 Gradle 7.68 DevOps Gradle
18 Nginx 7.57 IT Operations Nginx
19 Ansible 7.42 IT Operations Ansible
20 Kafka 7.22 Data & Analytics Confluent
21 GitLab 6.42 DevOps GitLab
22 Hbase 6.41 Data & Analytics Cloudera, Hortonworks
23 Chef 6.37 IT Operations Chef*
24 TensorFlow 5.97 Data & Analytics Google
25 Cassandra 5.74 Data & Analytics DataStax

如此多如火如荼的开源软件,的确给我们开发人员带来了很多福利,很多东西不需要从零开始做了,都会有开源帮你搞定。

但是同时也对开发人员造成了困惑,开源软件层出不穷,一会出一个,不看代码吧,有时候出现了问题搞不定,看了代码吧,一会儿代码又变了,或者出了新的开源软件,代码又得重新看,痛苦无比。

下面分享一下我的基本方法,不一定对谁都管用哦,这里以OpenStack,Hadoop,Kubernetes为例子

一、手动安装起来,一定要手动

当你要开始看一款开源软件的时候,网上会有形形色色的文档,博客,原理讲解,到官方网站上也有大量的文档等着你看,还有源代码等等,信息量实在太大了,当你不动手,只看这些文字的时候,基本是没有什么感觉的,看了也很容易遗忘,过一段时间,有哪些组件,组件之间的相互关系都搞不清楚了。

所以首先要安装起来,当然成熟的开源软件往往有自动化安装的工具,例如OpenStack的DevStack,Hadoop的Ambari,Kubernetes的kubeadm基于容器化的安装等。

但是一开始十分不建议这样做,一方面这让你丧失了详细了解开源软件的配置细节的机会,因为以后你了解原理的时候,会看到相关的信息,如果完全自动化,你将一点感觉都没有,另一方面,在你没有深入了解一个开源软件的时候,很不幸,自动化的安装往往因为环境差异问题不成功,开源软件往往就是这样欺负人,当你熟悉了他的时候,怎么安装都顺利,当你不熟悉他的时候,一步一个坑,你还不容易找到。而且自动化的安装一共做了一百步,错在了哪一步,不熟悉他的你连怎么看错误都不知道,搜索起来都是表面的原因,很可能背后其他的配置,或者网卡,或者iptables,或者systemd等有问题,从表面的报错看不出来,使得你一头雾水,不得不删了环境重新安装,再删除再重新安装,看起来自动化,其实时间可能更长。

所以不要怕麻烦,按照官方的安装文档,一步一步的安装。官方的安装文档的好处是往往会大概讲一下原理,这样会使得你有个全局的了解。这个时候,对你来说,每一步都是一个Linux操作,对Linux的基本操作的debug能力使得你更容易定位执行到了哪一步出来错误,到底是出了什么错误,是否要进行一些官方文档里面没有的,但是你的环境特殊的操作,例如安装依赖软件,配置iptables规则,默认文件路径权限有问题等等。

不要怕麻烦,配置文件一个一个的填写,将来你还是要看文档,弄明白每个配置项是什么意思,当出现了性能瓶颈的时候,还需要调整这里面的参数,而且填写这些配置文件的时候,往往会有一些相应的注释,告诉你更加详细的情况,例如配置范围,影响等等。这里需要强调一点的是,无论你按照哪个安装文档来,请完全按照人家的来,不要在不熟悉的地方耍小聪明,利用自己的已有的常识做一些小的修改,往往的结果是你觉得和人家做的一模一样,结果就是运行不起来。例如文档要求配置密码统一为password,你不知道这串数字到底哪里用了,就乖乖的统一用password,别觉得说密码太简单,我改成一个复杂的吧,结果到时候认证匹配不上,再如文档要求安装的用户名为hduser,就不要用root,你可能觉得root权限更高没有问题,结果很可能后面运行任务报的权限问题就是因为root。

对于OpenStack,原来官方文档不好的时候,陈沙克http://www.chenshake.com/还是写了非常好的安装教程的,着实帮助大家趟了很多的坑,现在官方文档也慢慢完善了起来。

对于Hadoop,官方文档还是有些粗糙,个人觉得《Hadoop + Spark 大数据巨量分析与机器学习整合开发实战》这本书非常不错,一步一步的做,过程非常详细,熟手看着有些啰嗦,但是对于新手很有帮助。

对于Kubernetes,绝对推荐这个https://github.com/opsnull/follow-me-install-kubernetes-cluster,写的非常详细,并且完全手动。

二、使用一下,推荐XXX in Action系列

安装完毕之后,接下来就是先试用一下,尝试几个经典的使用场景,一方面能够验证安装的是否完全正确,一方面可以成为一个开源软件的合格使用者。

一般的开源软件都会有XXX in Action系列的丛书,一般看完了这本书,对这个软件的方方面面的功能的使用都有了一个概况的了解。

例如hadoop有hadoop in action,OpenStack也有openstack in action,Kubernetes也马上会有kubernetes in action了。

当你非常熟练的掌握了开源软件之后,你会发现XXX in action系列里面的东西其实官方文档都有,但是一开始你找不到,也不知道从哪里下手,面对官方文档的茫茫大海,不知道哪里是边界,如何组合成场景使用,这就是XXX in action系列的作用。

三、读文档,读所有的官方文档,记不住,看不懂也要读下来

安装好了,也基本会用了,接下来就是练苦工的时候了,官方文档往往非常的多,但是要了解一个开源软件,必须要把官方文档完全读下来,这里面你会发现一些你已经知道的基本原理,你已经体验过的安装过程,你似乎配置过的参数,也会遇到你不熟悉的使用场景,深入的原理解析等等,但是一定要读下来。

虽然官方文档往往是零散的,不成体系的,可能不是一个作者写的,不同的地方会有出入,但是是最新的,所以熟悉一个开源软件,官方文档是必须的,当以后出现了问题,正常的方式应该是回头去查官方文档,而非查你当时看的那本书,因为书可能会过时。

当第一遍看完所有的官方文档,你会发现脑子都快炸了,信息量实在太大了,没关系,形成一个印象,在大脑中建立一个索引,有问题知道到哪里去查就可以了,另外多看几遍,就会发现老是那些东西,这个时候,就说明你对这个开源软件开始熟悉起来。

很多人不看官方文档,然后就去社区里面这问那问的,是非常不提倡的,这样会永远是一个门外汉。

四、了解核心的原理和算法,推荐XXX the definitive guide系列

每个开源软件都有自己的核心的亮点,在于核心的原理和算法。

当然不了解这些原理和算法,或者大概了解一下也能顺利使用,但是非常可惜,这些原理和算法,才是开源软件的精髓。

很多人抱怨说开源软件层出不穷,看不过来,但是如果能够深入原理的话,还是能够发现很多共性的东西,只不过从新组合了一下,或者做了一个变异,从而适应新的应用场景。

例如你如果本身比较熟悉Linux,网络,存储的原理的话,会发现OpenStack就是一个壳,当你熟悉了OpenStack之后,你会发现容器平台所需要考虑的,也差不多就是这些因素,当你熟悉了Kubernetes了以后,你会发现Swarm, DCOS的概念也是如此的像。

通过下面这一系列文章,可以看到OpenStack,Kubernetes,Mesos那些可以相互借鉴的核心原理

支撑大规模公有云的Kubernetes改进与优化 (1)

支撑大规模公有云的Kubernetes改进与优化 (2)

支撑大规模公有云的Kubernetes改进与优化 (3)

再如从学习Memcached的时候了解了一致性哈希,后来发现swift也用到类似的思想,后来发现Ceph也是使用了类似的思想。

了解核心的原理与算法,推荐the definitive guide系列,例如hadoop有hadoop the definitive guide,kubernetes有著名的黑宝书

五、看一本源码分析的书,会让你的源码阅读之旅事半功倍

了解了核心原理还不够,如果不看代码如何实现的,心里不踏实,而且也没办法为以后的代码实践借鉴,并且运维过程中遇到exception,不熟悉源代码,不知道哪里出错了,也不行。

但是开源软件代码纷繁复杂,一开始看肯定晕,如果市面上已经有了比较好的源码分析的书,将会是很大的帮助。

例如我开始阅读hadoop源代码的时候,对于老版的map-reduce过程比较熟悉了,但是到了map-reduce v2的时候,一读代码,里面的消息机制和状态机一下子就把我干蒙了,幸亏有董西成的《Hadoop技术内幕:深入解析YARN架构设计与实现原理》,看了他的解析,回头再看代码,就清晰多了。

对于kubernetes,权威指南中已经有了代码分析的章节了,另外推荐另一本书,容器与容器云,浙大出的,也很不错。

六、开始阅读核心逻辑源代码

不能光看别人进行代码解析,按照别人指点的路,自己深入到代码里面去看,才有感觉,当然一开始阅读代码不要纠结一城一池的得失,而聚焦于核心的逻辑的代码,例如创建一个pod的整个过程,运行一个map-reduce任务的过程等等。

七、编译并Debug源代码

读核心代码还属于纸上谈兵,要想修改,需要自己会编译,通过单元测试,并且能够Debug,这个过程可不轻松,看代码容易编译难,通过单元测试如果有场景也需要花费些时间,然后真正的debug,看核心的流程里面,每个变量是多少,跳到了哪个子类里面去,只有debug了才知道。

八、开发一个插件,或者对组件做少量的修改

接下来可以尝试做一些自己的修改了,首推的方式是看看这个开源软件是否允许开发一些插件,一般设计好的开源软件都会有相应的模式的,里面打上一行日志,或者发送个消息都可以,如果插件做不到,能够找到可做少量修改的地方,重新编译,打包,部署,看看是否符合希望,才是一个开源软件开发者的起始。

九、大量的运维实践经验和面向真实场景的定制开发

前面说了这么多,都是万里长征第一步,也即今天说的上手的环节,如果是运维,仅仅熟悉上面基本的操作是不够的,生产环境会有大量的不可控因素,尤其是集群规模大的更是如此,因而大量的运维经验是实战来的,不能光靠读书。如果是开放,也是这样的,进行少量修改容易,但是一旦面临真实的客户场景,会发现改哪儿都不是,还要考虑扩展和兼容,也是非得真实项目才能练出来的。

如何快速上手一款开源软件相关推荐

  1. 2016年开源软件排名TOP50,最受IT公司欢迎的50款开源软件

    2016年开源软件排名TOP50,最受IT公司欢迎的50款开源软件 过去十年间,许多科技公司已开始畅怀拥抱开源.许多公司使用开源工具来运行自己的 IT 基础设施和网站,一些提供与开源工具相关的产品和服 ...

  2. 最受程序员欢迎的30款开源软件,个个都很能打,值得拥有!

    作者:IT程序猿的科技营 链接:toutiao.com/i6837606893884539399 所谓开源,就是把软件的源代码开放出来,大家都能看到源代码,大家可以一起研究源代码并对软件进行功能扩展和 ...

  3. 3款开源软件帮你缩短链接

    导读 没有人喜欢一个非常长的 URL.它们很难解析.但有时候,站点的深层目录结构还有最后加上的大量参数使得 URL 开始变得冗长.在 Twitter 添加自己的链接缩短服务之前的那些日子里,一个长的 ...

  4. 玩转Windows下40款开源软件 (转)

    玩转Windows下40款开源软件   <script src="http://blog.csdn.net/count.aspx?ID=1789004&Type=Rank&qu ...

  5. 玩转Windows下40款开源软件

    这是国外较有影响的网站于2007年9月8日发布的新文章,算是windows下20款开源软件的续篇.发出不久,digg数已上千.xbeta进行简译,以便于国内用户在免费软件方面有更多选择. 信息安全 这 ...

  6. 开源公司黄页 关于/ 阿里巴巴的50款开源软件[大部分为Java语言]

    服务框架 Dubbo Dubbo 是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. 主要核心部件: Remot ...

  7. 最受 IT 公司欢迎的 30 款开源软件

    来源: http://www.360doc.com/content/20/0613/14/49290572_918245894.shtml 所谓开源,就是把软件的源代码开放出来,大家都能看到源代码,大 ...

  8. 最受IT公司欢迎的50款开源软件

    过去十年间,许多科技公司已开始畅怀拥抱开源.许多公司使用开源工具来运行自己的 IT 基础设施和网站,一些提供与开源工具相关的产品和服务,或基于开源工具而建的产品和服务,还有一些在为开源代码贡献代码或支 ...

  9. 最受IT公司欢迎的 30 款开源软件

    来源:360doc.com/content/20/0613/14/49290572_918245894.shtml 所谓开源,就是把软件的源代码开放出来,大家都能看到源代码,大家可以一起研究源代码并对 ...

最新文章

  1. 笔记-信息系统开发基础-CMMI组织能力成熟度模型-连续式和阶梯式的分组
  2. 《乐在C语言》一2.2 数据类型
  3. 未来教育计算机二级Excel解析,Excel操作小技巧,助你学好计算机二级office!
  4. 统计问题(HDU-2563)
  5. html正方形对话框素材,10种展示效果的弹出层对话框插件method.js
  6. 数据包络分析方法与maxdea软件_奥林巴斯OmniScan X3探伤仪软件升级,缺陷图像无处藏...
  7. 群晖系统硬盘损毁的修复
  8. 金立android手机怎么截图,金立手机怎么截屏
  9. 如何使用 CSS 颜色?
  10. LC振荡器的工作原理
  11. 7-3 计算职工工资
  12. linux cpu睿频,如何实现CPU单核睿频?
  13. 流式布局案例——京东网页
  14. 每日一练-1-CAD
  15. html中web字体图标,响应式Web图形篇 —— icon fonts(字体图标)在网页中的应用...
  16. MacBook M1电脑安装mysql 超详细
  17. ATeam社区(牛客网项目第三章)
  18. JQuery ajax使用总结
  19. 全球十大搜索引擎排名出炉 百度跃进到第三位
  20. python流量监控,python监控历程网络流量

热门文章

  1. BEC listen and translation exercise 26
  2. Wowza Media Server媒体服务器应用
  3. Cookie的小知识
  4. 《价值50亿的10句话》读后感(学生作业分享)
  5. 程序、进程、线程之间的区别
  6. 基于农业物联网的感知数据获取和可视化系统
  7. linux efi不要boot目录,LINUX下EFIBOOTMGR的使用,删除UEFI主板多余启动项和添加启动项-Go语言中文社区...
  8. python etree创建xml_利用 Python ElementTree 生成 xml的实例
  9. python绘制3d坐标轴_python – 尝试使用matplotlib更新3D图形坐标
  10. c++七参数坐标转换_深度 | 扒一扒坐标转换之七参数