如何快速上手一款开源软件
最近一篇比較火的文章中提到,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 | |
| 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了才知道。
?
八、開發一個插件,或者對組件做少量的修改
接下來可以嘗試做一些自己的修改了,首推的方式是看看這個開源軟件是否允許開發一些插件,一般設計好的開源軟件都會有相應的模式的,里面打上一行日志,或者發送個消息都可以,如果插件做不到,能夠找到可做少量修改的地方,重新編譯,打包,部署,看看是否符合希望,才是一個開源軟件開發者的起始。
?
九、大量的運維實踐經驗和面向真實場景的定制開發
前面說了這么多,都是萬里長征第一步,也即今天說的上手的環節,如果是運維,僅僅熟悉上面基本的操作是不夠的,生產環境會有大量的不可控因素,尤其是集群規模大的更是如此,因而大量的運維經驗是實戰來的,不能光靠讀書。如果是開放,也是這樣的,進行少量修改容易,但是一旦面臨真實的客戶場景,會發現改哪兒都不是,還要考慮擴展和兼容,也是非得真實項目才能練出來的。
總結
以上是生活随笔為你收集整理的如何快速上手一款开源软件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 那些让你起飞的计算机基础知识
- 下一篇: 我是怎么把一个项目带崩的