终于有人把 Elasticsearch 原理讲透了
上個(gè)世紀(jì)末,我在廣州做 PHP 程序員,那會(huì)兒程序員的門檻真低啊。我的上司是技術(shù)經(jīng)理,非常照顧我。有個(gè)客戶是開(kāi)律所的,過(guò)來(lái)提了一個(gè)私活的需求,要做個(gè)法律查詢的網(wǎng)站。
上司讓我賺點(diǎn)外塊,說(shuō)干就干,整個(gè) Mysql,把內(nèi)容導(dǎo)入進(jìn)去,寫個(gè)搜索查詢語(yǔ)句,用不了多久,搞定。客戶覺(jué)得,這開(kāi)發(fā)效率,牛,沒(méi)誰(shuí)了。
于是,問(wèn)題來(lái)了。搜索一個(gè)關(guān)鍵詞,要等好半天,SQL 的 like 語(yǔ)法么,當(dāng)時(shí)就會(huì)這個(gè),更不用說(shuō)負(fù)載問(wèn)題了,還好那時(shí)候還沒(méi)啥用戶使用。真是啥都不會(huì),所幸當(dāng)時(shí)整個(gè)行業(yè)的門檻都低,再往后,客戶就找別人去了。
后來(lái),我才知道搜索這玩意的開(kāi)銷、字索引和詞索引都是怎么回事,搜索引擎是如何實(shí)現(xiàn)的,也漸漸知道了各種第三方的開(kāi)源搜索平臺(tái)。
其實(shí),搜索是現(xiàn)代互聯(lián)網(wǎng)應(yīng)用必備的一項(xiàng)基礎(chǔ)功能,很多產(chǎn)品都需要內(nèi)建搜索系統(tǒng)。
而且,隨著時(shí)代的前進(jìn),搜索不再僅僅是關(guān)鍵詞匹配,比如隨著搜索出現(xiàn)的相關(guān)推薦,再比如基于地理位置的就近查詢,等等需求應(yīng)運(yùn)而生。
能夠勝任這樣的開(kāi)發(fā),可不是什么容易的事情。幸而有些強(qiáng)大的第三方工具,才能讓我們不用重復(fù)造輪子,Elasticsearch 就是一款功能強(qiáng)大的開(kāi)源分布式搜索與數(shù)據(jù)分析引擎。
它可以從海量數(shù)據(jù)中快速找到相關(guān)信息,在同領(lǐng)域內(nèi)幾乎沒(méi)有競(jìng)爭(zhēng)對(duì)手——近兩年 DBRanking 的數(shù)據(jù)庫(kù)評(píng)測(cè)中,ES 在搜索引擎領(lǐng)域始終位列第一。
當(dāng)你在 GitHub 上搜索時(shí),Elasticsearch 可以實(shí)現(xiàn)代碼級(jí)的搜索與高亮顯示 ;當(dāng)你在網(wǎng)上購(gòu)物時(shí),ES 可為你推薦喜歡的商品;當(dāng)你下班打車回家時(shí),ES 可以通過(guò)定位附近的乘客和司機(jī),幫助平臺(tái)優(yōu)化調(diào)度。
Elasticsearch 還被廣泛運(yùn)用于大數(shù)據(jù)近實(shí)時(shí)分析,包括日志分析、指標(biāo)監(jiān)控、信息安全等多個(gè)領(lǐng)域。
它可以探索海量結(jié)構(gòu)化、非結(jié)構(gòu)化數(shù)據(jù),按需創(chuàng)建可視化報(bào)表,對(duì)監(jiān)控?cái)?shù)據(jù)設(shè)置報(bào)警閾值,甚至通過(guò)使用機(jī)器學(xué)習(xí),做到自動(dòng)識(shí)別異常狀況。
作為目前最流行的開(kāi)源搜索引擎,ES 在全球的下載量已超過(guò) 3.5 億次,騰訊、滴滴、今日頭條、餓了么、360 安全、小米,vivo 等國(guó)內(nèi)諸多知名公司都在使用 Elasticsearch。
如何深入理解,并高效使用 ES ??
Elasticsearch?非常容易上手,具有開(kāi)箱即用的特性,你可以在極短的時(shí)間內(nèi)設(shè)置好開(kāi)發(fā)環(huán)境,然后快速上手使用,繼而在成百上千臺(tái)服務(wù)器上實(shí)現(xiàn) PB 級(jí)的數(shù)據(jù)處理。
雖然上手快,但要做到深入理解并高效使用,可就沒(méi)那么簡(jiǎn)單了,比如:
1. 為什么我的數(shù)據(jù)查不到,明明是有的啊!
2. 什么鬼?為什么這幾條數(shù)據(jù)出現(xiàn)在搜索結(jié)果的前幾位?
3. 生產(chǎn)環(huán)境我需要多少臺(tái)機(jī)器,索引的分片數(shù)怎么樣設(shè)置才是合理的?
4. 應(yīng)該關(guān)注哪些指標(biāo),才能保證集群健康高效地運(yùn)行?
5. 對(duì)于日志型應(yīng)用,如何設(shè)置 Hot & Warm Architecture 節(jié)約成本,怎樣管理和優(yōu)化基于時(shí)間序列的索引數(shù)據(jù),才能提高集群的整體性能?
6. 為什么我的集群腦裂了?數(shù)據(jù)損壞后,怎樣才能恢復(fù)?
其實(shí),想要掌握 Elasticsearch,除了要理解其分布式架構(gòu)的原理外,還要了解一些信息檢索領(lǐng)域的知識(shí)和相關(guān)技巧。
分享給你一張?Elasticsearch 核心知識(shí)圖譜,只有對(duì)每一個(gè)知識(shí)點(diǎn)仔細(xì)梳理并深入理解,才能解決工作中的實(shí)際問(wèn)題。
? ? ? ?
這張圖譜出自阮一鳴,我之前聽(tīng)過(guò)他在 Elastic 中國(guó)開(kāi)發(fā)者大會(huì)的分享,講得非常不錯(cuò)。
最近,得知他跟極客時(shí)間合作,推出了一門視頻課《Elasticsearch 核心技術(shù)與實(shí)戰(zhàn)》,有幸提前看到了目錄和一部分內(nèi)容,很想推薦給你。
在課程中,他用理論與實(shí)踐相結(jié)合的方式、深入淺出地講解了 Elasticsearch,只要你堅(jiān)持學(xué)習(xí),就能掌握 ES 的基本概念和服務(wù)搭建,了解其運(yùn)行機(jī)制和常用技巧,并通過(guò)上手實(shí)戰(zhàn)理解 ES 在實(shí)際項(xiàng)目中的應(yīng)用。
近幾年 ES 非常熱門,所以去年 Elastic 公司推出了官方的 Elastic 工程師認(rèn)證考試,需要考生在 3 個(gè)小時(shí)的線上考試中,動(dòng)手解決 12 個(gè)實(shí)際問(wèn)題,就算有多年工作經(jīng)驗(yàn)的老手都未必能通過(guò)。
所以,這個(gè)認(rèn)證的含金量還是挺高的,上面也提到,很多巨頭都在使用 ES 搭建自己的搜索系統(tǒng)。
你去應(yīng)聘的時(shí)候,有證跟沒(méi)證有可能就會(huì)影響你的錄取,收入也有可能差一個(gè)檔次。
阮一鳴說(shuō),這門課覆蓋了 Elastic 認(rèn)證考試的全部考點(diǎn),想?yún)⒓涌荚嚨呐笥芽梢詫⑦@門課作為參考教材,這也算是「學(xué)習(xí)技能之外的 bonus」了。
關(guān)于阮一鳴
阮一鳴,eBay Pronto 平臺(tái)技術(shù)負(fù)責(zé)人。Pronto 平臺(tái)管理了 eBay 內(nèi)部上百個(gè) Elasticsearch 集群,數(shù)據(jù)規(guī)模超過(guò)了 4000 個(gè)節(jié)點(diǎn)。
這些集群在 ebay 的生產(chǎn)環(huán)境中,支撐了包括訂單搜索,商品推薦,日志管理,風(fēng)險(xiǎn)控制,IT 運(yùn)維,安全監(jiān)控等不同領(lǐng)域的服務(wù)。
作為一名互聯(lián)網(wǎng)行業(yè)的老兵,他從業(yè)近 20 年了,在大數(shù)據(jù)、云計(jì)算和性能優(yōu)化方面積累了豐富的經(jīng)驗(yàn)。同時(shí),他還是一名連續(xù)創(chuàng)業(yè)者,創(chuàng)辦過(guò)手機(jī)游戲公司、個(gè)性化音樂(lè)推薦與分享平臺(tái) 8box。
他是如何講解 Elasticsearch 的?
如果你對(duì) Elasticsearch 有些了解,就會(huì)發(fā)現(xiàn) ES 的產(chǎn)品迭代速度非常快,很多老的 API 都已經(jīng)被廢棄不再使用,搜索到的參數(shù)配置也大多發(fā)生了變化。
市面上的書籍和教程都是基于 5.x 甚至是 2.x 版本。而在課程中,哥們兒使用Elasticsearch 最新的 7.1 版本進(jìn)行教學(xué)。
所有 ES 最新版本的特性,在課程里都會(huì)有全面和直觀地展現(xiàn),比如:用機(jī)器學(xué)習(xí)進(jìn)行異常檢測(cè);用 Canvas 展示數(shù)據(jù);用索引的生命周期管理工具對(duì)索引進(jìn)行優(yōu)化等等。
這個(gè)課大概分為 5 個(gè)部分:
1.?初識(shí) Elasticsearch:
Elasticsearch 核心概念、工作機(jī)制與應(yīng)用場(chǎng)景;本地開(kāi)發(fā)環(huán)境搭建;倒排索引的原理與 ES 中 Analysis 的具體細(xì)節(jié);Mapping 設(shè)置和一些基本的 Search & Aggregation API。
2.?深入了解 Elasticsearch:
理解 Elasticsearch 分布式架構(gòu)的原理;相關(guān)性算分的原理;數(shù)據(jù)建模的最佳實(shí)踐;深入搜索及聚合功能以提高搜索結(jié)果的相關(guān)度。
3.?管理 Elasticsearch 集群:
集群的水平擴(kuò)展、參數(shù)配置、性能優(yōu)化、故障診斷。
4.?利用 ELK 做大數(shù)據(jù)分析:
結(jié)合使用場(chǎng)景和數(shù)據(jù),探索 Logstash、Kibana 的各項(xiàng)功能。
5.?應(yīng)用實(shí)戰(zhàn)工作坊:
設(shè)計(jì)了電影搜索和 Stack Overflow 用戶調(diào)查問(wèn)卷數(shù)據(jù)分析兩個(gè)實(shí)戰(zhàn)項(xiàng)目,通過(guò)上手實(shí)踐,你可以鞏固所學(xué)的知識(shí)點(diǎn),并運(yùn)用到實(shí)際項(xiàng)目中。
需要什么基礎(chǔ),能獲得什么?
這門課不僅適合有 ES 使用經(jīng)驗(yàn)的人,也適合初學(xué)者。編程知識(shí)和數(shù)據(jù)庫(kù)的相關(guān)使用經(jīng)驗(yàn),會(huì)對(duì)你學(xué)習(xí) ES 有一定幫助,但并不是必須的。
針對(duì)開(kāi)發(fā)人員,搜索是一項(xiàng)被廣泛需要的功能,這個(gè)課程詳細(xì)地講解了相關(guān)的搜索概念在 Elasticsearch 中是如何對(duì)應(yīng)和具體實(shí)現(xiàn)的。
如果你是一名 ES 的運(yùn)維人員,管理了公司內(nèi)部的 Elasticsearch 集群:上線前的如何進(jìn)行容量規(guī)劃,上線后如何保證這些集群在生產(chǎn)環(huán)境內(nèi)穩(wěn)定高效的運(yùn)行,如何在凌晨識(shí)別出異常信號(hào),及時(shí)發(fā)出告警,以避免災(zāi)難的發(fā)生。
這些問(wèn)題,他在課程中都會(huì)給出相關(guān)的最佳實(shí)踐。
其實(shí),無(wú)論是開(kāi)發(fā)還是運(yùn)維,架構(gòu)師抑或數(shù)據(jù)分析師,甚至是產(chǎn)品經(jīng)理,如果想更多的掌握搜索相關(guān)的知識(shí)和能力,都可以學(xué)一學(xué) Elastic Stack。
哎,你可能要說(shuō),為什么產(chǎn)品經(jīng)理也要學(xué),因?yàn)橐院笥龅介_(kāi)發(fā)說(shuō)“這個(gè)搜索功能做不來(lái)”的時(shí)候,你可以理直氣壯地撕逼啊。
在大數(shù)據(jù)時(shí)代,近實(shí)時(shí)的搜索和分析能力,會(huì)讓你唯快不破,洞見(jiàn)未來(lái)。——這句 copy 了阮一鳴。
跟著認(rèn)真學(xué),結(jié)合課程中的練習(xí)和實(shí)踐,相信你一定能學(xué)以致用,基于 Elasticsearch 構(gòu)建出你自己的搜索和數(shù)據(jù)分析產(chǎn)品。
說(shuō)真的,搜索這種核心技術(shù)訴求,你只要在這行,遲早用得著。
總結(jié)
以上是生活随笔為你收集整理的终于有人把 Elasticsearch 原理讲透了的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL全面优化,速度飞起来!
- 下一篇: 学会这几个Redis技巧,让你的程序快如