1. 程式人生 > >為什麼說程式設計師一定要看 ElasticSearch 原始碼

為什麼說程式設計師一定要看 ElasticSearch 原始碼

前提

人工智慧、大資料快速發展的今天,對於 TB 甚至 PB 級大資料的快速檢索已然成為剛需,大型企業早已淹沒在系統生成的浩瀚資料流當中。大資料技術業已集中在如何儲存和處理這些海量的資料上。Elasticsearch 作為開源領域的後起之秀,從2010年至今得到飛躍式的發展。 Elasticsearch 以其開源、分散式、RESTFul API 三大優勢,已經成為當下風口中“會飛的豬”。

在我的電腦本地寫了幾篇 ElasticSearch 的原始碼解析了,回過頭來想想應該也寫一篇為何我會去看它的原始碼?

為什麼呢?下面我講講自己從接觸搜尋到現在看原始碼的過程!

第一次接觸搜尋

搜尋,我們首先想到的是搜尋引擎:Google、百度,這個就算是接觸的最早的了。

我自己專案裡面接觸搜尋是大二暑假那時練習的一個專案,裡面用了 Solr,然後當時自己也稍微瞭解了下,並用在了專案裡面。

第二次接觸搜尋

從第一次專案裡面用到了搜尋,後面自己對這方面就比較感興趣。再一次接觸搜尋是實習的時候進公司。第一件事情就是被老大叫的去學習搭建 Elasticsearch 叢集,於是乎,電腦就裝了三個虛擬機器,Elasticsearch 就一個個的裝了起來了。也記錄了部落格下來:Elasticsearch 系列文章(二):全文搜尋引擎 Elasticsearch 叢集搭建入門教程,當時搭建的時候 ES 的版本才剛從 2.x 升級到 5.x 呢,截止本文時間 2018.08.04,現在 ES 版本已經是到 7.0 了,這版本升級是真的的快,這也說明了 ES 的活躍度很高,背後的開發工程師維護也快,側面突出要去看它原始碼的重要性。

當時自己在本地測試搭建集群后,給分配了另外一個任務就是去了解 ES 中的自帶分詞、英文分詞、中文分詞的相同與差異、以及自己建立分詞需要注意的點。於是乎:當時在公司 wiki 貢獻了這篇文章:Elasticsearch 系列文章(一):Elasticsearch 預設分詞器和中分分詞器之間的比較及使用方法。這篇文章幾乎已經把市面上所有的分詞都寫進去了,包括他們的相同點、不同點、如何使用、如何自定義分詞器。

然後還有就是我同組的一個同學,她的任務就是 2.x 升級到 5.x 中 mapping 的大改變有哪些?後面我也看了她總結的文件,很詳細!

在這次接觸了 ES 後,因為我自己本地已經有環境了,所以自己測試了一些功能,給 ES 安裝外掛(IK、x-pack、支援 sql 的、),後面自己也去測試 ES 的索引、文件、REST API。

第三次接觸搜尋

由於是自己對其感興趣,所以後面就去找了些相關的視訊,比如:中華石衫的《Elasticsearch 頂尖高手系列-高手進階篇》幾個系列視訊教程個人感覺還是不錯的,看完這幾個系列估計入門肯定是沒有問題的。版權原因,不提供下載連結。

另外就是《Elasticsearch 權威指南》翻譯的版本,翻譯還沒有全,可以去看看,講得很詳細的,市面上應該還沒有哪本書講的有這麼清楚,如果英文不錯的可以直接啃英文吧。

還有就是官網的文件了,非常非常詳細,還有 demo,2.x 版本的是有中文的官方文件,可以湊合著看。

學習新東西,要學會先看官方文件,何況 Elasticsearch 的官方文件這麼詳細呢!

第四次接觸搜尋

後面實習的時候,又分配了公司中介軟體監控的兩個模組:Elasticsearch 和 HBase 元件的監控。於是乎,再次有機會接觸 Elasticsearch 了,這次主要還是利用 Elasticsearch 自帶的 REST API :_cluster/health 、_cluster/stats、_nodes、_nodes/stats 去獲取到叢集的健康資訊、節點資訊(記憶體、CPU、網路、JVM等資訊)。為了做這個專案自己當時也去找了網上很多類似的文章參考常用的監控指標和他們是怎麼做監控的。我當時的任務主要還是採集資訊,然後存到公司大專案的 influxdb 中,最後用 grafana 展示出來,後面我組的運維大佬給我看了監控大盤,介面挺酷炫的,哈哈哈,牛逼!

第五次接觸搜尋

後面就沒怎麼接觸 ElasticSearch 了,一直忙著其他的東西。

實習辭職後,畢業出來找工作的那段日子,自己又花了一星期稍微過了一遍 《Elasticsearch 權威指南》 這本書,話說還幫我面試挺過不少關呢,哈哈哈!因為我專案裡寫了 Elasticsearch 的監控,如果你對 Elasticsearch 其他的不熟悉,面試官稍微問些其他關於這方面的,那就不知道就有點尷尬了,所以還是準備了下。看完之後應付面試沒多大的問題。

第六次接觸

看起來我接觸了 Elasticsearch 很久了,其實真正專案裡面是沒有用到 Elasticsearch 做過專案的,沒有用到 Elasticsearch 的搜尋做什麼專案,於是自己當時找工作其實也打算找到工作後看能不能自己做個專案或者公司專案裡面用用 Elasticsearch 呢?

結果在新公司新專案裡,很快就用到了。只不過這次不是 Java 專案裡面用了,而是和 GoLang 整合。不過 API 都差不多,多熟悉幾次就很快上手了,關鍵還是要懂 Elasticsearch 如何構造 DSL 查詢語句,這樣再轉換成 GO 裡面的 API 就快了。

還有就是公司裡剛好有個中科院研究生大佬,他就寫過 Elasticsearch 這塊的書籍《從 lucene 到 Elasticsearch 全文檢索實戰》,另外他的 CSDN 部落格也很火,閱讀量很高,感興趣的可以買本書支援下。

中途自己遇到 Elasticsearch 實在不會的問題也會主動去找大佬諮詢,然後大佬耐心教教我這個渣渣菜雞,在文章這裡感謝下大佬這段時間的關照。

萌生閱讀原始碼的想法

既然接觸了這麼久的 Elasticsearch ,專案裡用過,書籍也看過,雖然還不是很熟,但是如果看看它的原始碼是不是會讓我對它的印象更深呢?

說幹就幹,晚上回家就從 GitHub clone 了原始碼在本地,那時剛好回家,就在火車上直接用 VS code 看了會原始碼,也沒有在 ide 裡 debug 起來。

寫這篇文章的時候已經把 Elasticsearch 的整個啟動流程(載入讀取配置、載入外掛等)、如何支援 REST API 看了下,後面會在下班後回家繼續閱讀原始碼,繼續分享我的原始碼解析的。

有想法就去幹,不嘗試下,怎麼知道適不適合你?

總結

其實閱讀原始碼的主要原因還是自己感興趣;另外就是這東西現在專案裡確實也用到了,如果我對原始碼熟悉的話可能會對我的理解會更加透徹點;還有就是 Elasticsearch 確實火,公司幾乎都用的,所以學習下還是有必要的。

如果你剛好是程式設計師,如果你剛好又是Java程式設計師,如果剛好你的技術又遇到了瓶頸但是你又拒絕平庸,期待蛻變,想進入一線網際網路公司或者給自己漲薪
我這裡剛好有一套自己儲存的Java進階學習資料。包含了Spring框架、Mybatis框架SpringBoot框架、SpringMVC框架、SpringCloud微服務、Dubbo框架、Redis快取、RabbitMq訊息、JVM調優、Tomcat容器、MySQL資料庫
之前的兩千人群滿了 這個是新群Java高階進階群:963,944…895,免費傳送的喲