新聞中心
之前分享的一篇《赤壁之戰(zhàn),曹操大敗只因缺了Service Mesh》受到不少好評,今天我們繼續(xù)通過“三國”學(xué)技術(shù),講的是 Elasticsearch 的前世今生。

創(chuàng)新互聯(lián)服務(wù)項目包括臺州網(wǎng)站建設(shè)、臺州網(wǎng)站制作、臺州網(wǎng)頁制作以及臺州網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,臺州網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到臺州省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
話說吧,有這么三個人,劉備、關(guān)羽和張飛,劉備是老大,關(guān)羽是二哥,張飛是老三,三兄弟每天玩在一起,打魔獸玩星際,一起吃雞,整天無所事事。
于是在一個白天不見月亮的早上,三人從網(wǎng)吧出來,劉備就說,咱們這樣下去也不是事啊,這互聯(lián)網(wǎng)是個機(jī)會,要不咱們做電商吧!
三人一商量,說干就干,于是乎,他們?nèi)撕匣镌谔覉@注冊成立了一家公司,起名叫徐州草鞋,主要是通過網(wǎng)絡(luò)做天然有機(jī)草鞋生意(其實啊,劉備一堆草鞋賣不出去,也只能做這個業(yè)務(wù),汗)。
劉備是總經(jīng)理,負(fù)責(zé)商務(wù),負(fù)責(zé)開拓客戶市場。既然是搞電子商務(wù),還得開發(fā)一個電子商務(wù)網(wǎng)站,于是關(guān)羽自告奮勇說他負(fù)責(zé)后端技術(shù),張飛繡過花,會畫畫,說他可以負(fù)責(zé)前端。
好戲剛剛開始......
需求的誕生
劉備一大早就來到了公司,一看張飛和關(guān)羽已經(jīng)在公司了,就問道:“兩位賢弟,今天來的還蠻早啊。”
張飛一聽就炸毛了,“大哥,你讓我和二哥去做什么搜索功能,我們已經(jīng)一晚沒睡了,昨天就沒回去好嘛?!?/p>
關(guān)羽也來氣,“大哥,是啊,我們剛剛才上線電商網(wǎng)站,你這邊又要加什么需求,現(xiàn)在用數(shù)據(jù)庫檢索不是好好的么,能不能讓我們歇口氣?!?/p>
“兩位兄弟辛苦了,我也不想啊,最近咱們一單生意都沒有啊。昨天我和一位朋友聊,他說我們的網(wǎng)站很不好用,找不到他想要的鞋,結(jié)果只好去別的地方買了。不過他給我推薦了一位黑客高手,叫諸葛亮的家伙,說是啥都懂,我們今天找他取經(jīng)去。”
三顧茅廬
三人一行來找諸葛亮,不過前面兩次都碰了壁。據(jù)諸葛亮?xí)f,諸葛亮不在家,到了第三次,還是不在家。
張飛仔細(xì)一聽,明明是有人在家啊,而且玩游戲喊的聲音還這么大,張飛怒了,搭梯子把諸葛亮家的保險給拔了。
諸葛亮正郁悶?zāi)?,咋停電了?算了,今天沒得玩了,于是讓書童請他們進(jìn)來。
“在下諸葛名亮,字孔明,不知三位...”,三人一說,是這么這么回事。
諸葛亮一聽,“哦,原來是這么這么回事啊,你們的網(wǎng)站我剛看了,你們家的草鞋品種確實不 Nan 少 Kan。如今客戶上網(wǎng)站找東西,都是先用網(wǎng)站的搜索來搜一下,但是你們網(wǎng)站的搜索功能實在是太 La 弱 Ji,明擺在那里的商品我都搜不出來,實在是大問題啊。”
“這樣啊,我看你們仨都是好人,給你們推薦一個好東西,叫做 Elasticsearch,這個肯定可以幫助你們?!?/p>
“翼德,把先生放下來吧?!?/p>
“是,大哥。二哥,你把刀也放下吧。”
關(guān)羽一聽,好像在哪里聽說過 Elasticsearch,“大哥,這個東西好像有點(diǎn)耳熟啊,哦,諸葛亮先生這一說,我倒是記起來了,隔壁公司的呂布最近神神秘秘的,好像就是在用這個,難怪他們最近公司業(yè)務(wù)好的很”。
Elasticsearch 的故事
諸葛亮清了清嗓子,又從抽屜里摸出一把扇子,“還是讓我來給你們講講吧”。
“Elasticsearch 以前叫 Elastic Search。顧名思義,就是“彈性的搜索”。
很明顯,它一開始是圍繞著搜索功能,打造了一個分布式搜索引擎,底層是基于開源的搜索引擎庫 Lucene,是由 Java 語言編寫的,項目大概是 2010 年 2 月份在 Github 正式落戶的。
咳咳,有必要首先給你介紹一下 Lucene。Lucene 是一個非常古老的搜索引擎工具包,也是用 Java 編寫,主要用來構(gòu)建倒排索引(一種數(shù)據(jù)結(jié)構(gòu))和對這些索引進(jìn)行檢索,從而實現(xiàn)全文檢索功能。
Lucene 很強(qiáng)大,使用起來也非常靈活,缺點(diǎn)是它僅僅是一個基礎(chǔ)類庫,也沒有考慮到高并發(fā)和分布式的場景。
如果你想在自己的程序里面使用 Lucene,還是需要做很多工作,并且涉及很多搜索原理和索引數(shù)據(jù)結(jié)構(gòu)的知識,這就給我們帶來了不少挑戰(zhàn)。所以,Lucene 的上手時間一般都比較長?!?/p>
關(guān)羽插了一句,“Lucene 我知道,確實賊難用,使用起來一堆問題啊,我之前試過來著?!?關(guān)羽說完,臉又紅了。
諸葛亮接著說:“時間一晃來到 2004 年,有一個以色列小伙子,名字叫謝伊·班農(nóng)( Shay Banon),他成親不久來到倫敦,因為當(dāng)時他的夫人正好在倫敦學(xué)廚師。
初來乍到,也沒有找到工作,于是班農(nóng)就打算寫一個叫作 iCook 的小程序來管理和搜索菜譜,一來練練手,方便找工作;二來這個小工具還可以給其夫人用。
班農(nóng)在編寫 iCook 的過程中,使用了 Lucene,感受到了直接使用 Lucene 開發(fā)程序的各種暴擊和痛苦。
于是他在 Lucene 之上,封裝了一個叫作 Compass 的程序框架,與 Hibernate 和 JPA 等 ORM 框架進(jìn)行集成,通過操作對象的方式來自動地調(diào)用 Lucene 以構(gòu)建索引。
這樣做的好處是,可以很方便地實現(xiàn)對‘領(lǐng)域?qū)ο蟆M(jìn)行索引的創(chuàng)建,并實現(xiàn)‘字段級別’的檢索,以及實現(xiàn)‘全文搜索’功能。
可以說,Compass 大大簡化了給 Java 程序添加搜索功能的開發(fā)。Compass 開源出來,變得很流行。
在 Compass 編寫到 2.x 版本的時候,社區(qū)里面出現(xiàn)了更多需求,比如需要有處理更多數(shù)據(jù)的能力以及分布式的設(shè)計。
班農(nóng)發(fā)現(xiàn)只有重寫 Compass ,才能更好地實現(xiàn)這些分布式搜索的需求,于是 Compass 3.0 就沒有了,取而代之的是一個全新的項目,也就是 Elasticsearch。”
讓人砰然心動的 Elasticsearch
看到劉備三人聽的入迷,諸葛亮輕揮羽扇,繼續(xù)說了下去。
“得益于 Compass 項目的積累,Elasticsearch 問世之初就考慮到了功能的易用性。
Elasticsearch 作為一個獨(dú)立的搜索服務(wù)器,提供了非常方便的搜索功能。用戶完全不用關(guān)心底層 Lucene 的細(xì)節(jié),只需要通過標(biāo)準(zhǔn)的 HTTP+RESTful 風(fēng)格的 API,就可以進(jìn)行索引數(shù)據(jù)的增刪改查。數(shù)據(jù)的輸入輸出采用 JSON 格式,以文檔和面向?qū)ο蟮姆绞剑@樣就能非常方便地理解和表達(dá)領(lǐng)域數(shù)據(jù)?!?/p>
張飛一拍桌子,“Elasticsearch 簡直就是一個 Compass 的 RESTful 實現(xiàn)啊!”
“沒錯。同時,Elasticsearch 基于分片和副本的方式實現(xiàn)了一個分布式的 Lucene Directory,再結(jié)合 Map-reduce 的理念,實現(xiàn)了一個簡單的搜索請求分發(fā)合并的策略,能輕松化解海量索引和分布式高可用的問題。
可以說,僅僅依靠這兩點(diǎn),Elasticsearch 就已經(jīng)秒殺了當(dāng)時市面上所有的搜索引擎服務(wù)或是程序庫,我當(dāng)時看到 Elasticsearch 也眼前一亮。
如今,Elasticsearch 基本上已經(jīng)是搜索引擎市場排名第一的產(chǎn)品了,從 DB-Engines 網(wǎng)站的排名可以看到,Elasitcsearch 基本上是一騎絕紅塵,拉開第二名遠(yuǎn)遠(yuǎn)一大截?!?/p>
統(tǒng)計數(shù)據(jù)來源:https://db-engines.com/en/ranking/search+engine
ELK 橫空出世
諸葛亮口水狂飆,顯得很興奮,“如果只是 Elasticsearch 單獨(dú)使用,那我們的故事也就結(jié)束了,事實上好戲這才剛剛開始。俗話說,一個好漢三個幫,開源社區(qū)亦是如此。”
“這一個好漢三個幫,說的不就是咱仨嘛?!?劉備接過話茬。
“別打岔,”諸葛亮繼續(xù)說,“這里我要說的是 ‘ELK’ 的出現(xiàn),不過首先我要給你們講講 Logstash。”
“Logstash 是一個開源的日志處理工具,用 JRuby 寫的,主要特點(diǎn)是基于靈活的 Pipeline 管道架構(gòu)來處理數(shù)據(jù)。
什么意思呢?可以理解為將數(shù)據(jù)放進(jìn)一個管道內(nèi)進(jìn)行處理,并且就跟真正的自來水管一樣,管道由一截一截管子組成,每一個小管代表著一個數(shù)據(jù)處理的流程,每一個流程只做一件事情,然后可以根據(jù)數(shù)據(jù)的處理需要,選擇多個不同類型的管子靈活組裝。
Logstash 社區(qū)非?;钴S,支持多種輸入數(shù)據(jù)源和多種輸出數(shù)據(jù)源。一開始, Elasticsearch 只是作為其中一個輸出的存儲,主要用于日志數(shù)據(jù)的存儲。
不過,隨著大家把日志發(fā)送到 Elasticsearch 之后,大家發(fā)現(xiàn)這家伙用起來很方便嘛,不僅能夠存儲大量的數(shù)據(jù),水平伸縮還很方便。更關(guān)鍵的是,你能夠很方便地把數(shù)據(jù)找出來,也就是進(jìn)行全文搜索。
全文搜索在日志分析里面是非?;A(chǔ)的一個功能,通過一個關(guān)鍵字就能定位具體的詳細(xì)日志,相比存放到關(guān)系型數(shù)據(jù)庫和普通的文件存儲,Elasticsearch 優(yōu)勢非常明顯。于是 Logstash 搭配 Elasticsearch 變得很受歡迎。
Kibana 的故事
不過 Logstash 自帶的 UI 查詢?nèi)罩镜慕缑嬗悬c(diǎn)簡陋,于是有一個叫作 Rashid Khan 的運(yùn)維工程師表示完全忍不了了,用 PHP 寫了一個叫作 Kibana 的程序,一個更好看和更好用的前端界面。
PHP 寫完一版,他又用 Ruby 寫一版,后面又用 AngularJS 寫了一版,不僅有日志的搜索和查看,還加上了一些統(tǒng)計展示功能。
Kibana 的名字其實是倆個水果的名字的組合(Kiwi+Banana)。
張飛聽到這里:“工作不飽和啊這家伙”??酌鞯闪怂谎?,繼續(xù)說道。
“這個時候,Elasticsearch 已經(jīng)有 Facet 概念,也就是分面統(tǒng)計( 注:1.0 之后推出了 Aggregation 來代替 Facet),可以對數(shù)據(jù)里面的某個字段進(jìn)行單個維度的統(tǒng)計,支持多種統(tǒng)計類型。
比如,Term Facet 可以計算字段里面某些值出現(xiàn)了多少次;Histogram Facet 還可以按時間區(qū)間進(jìn)行匯總統(tǒng)計等。
這些統(tǒng)計功能在前端 UI 就可以被利用起來,展示一些餅圖、時間曲線等等,在運(yùn)維的分析里面自然也都是需要的。
慢慢的 Kibana 越做越復(fù)雜,支持的功能越來越多,Kibana 3 變得流行起來。
于是乎,ELK 橫空出世(Elasticsearch、Logstash 和 Kibana 這三個產(chǎn)品的首字母縮寫),風(fēng)靡了整個運(yùn)維界。
故事講到這里,相信你們對于 Elasticsearch 就有了一個大概的認(rèn)識,可以用它做搜索,也可以用它做日志?!?/p>
張飛點(diǎn)點(diǎn)頭,“還是相當(dāng)?shù)膹?qiáng)悍嘛?!?/p>
Elastic Stack 平臺的魅力
“不過,這還沒完。”諸葛亮吞了吞口水,繼續(xù)說。
“Elastic 后面又引入了 Beats 家族。這是一系列非常輕量級的數(shù)據(jù)收集端,我給你介紹幾個比較典型的,比如:
- Packetbeat 可以實時監(jiān)聽網(wǎng)卡流量,并實時解析網(wǎng)絡(luò)協(xié)議數(shù)據(jù),可用來做 NPM 網(wǎng)絡(luò)數(shù)據(jù)分析。
- Metricbeat 可以用來收集服務(wù)器,以及服務(wù)器上部署的應(yīng)用服務(wù)的各項監(jiān)控指標(biāo)數(shù)據(jù),這樣就可以替代 Zabbix 等傳統(tǒng)的監(jiān)控軟件,來做服務(wù)器的性能指標(biāo)分析。
- Auditbeat 可以實時收集服務(wù)器的行為事件,用于安全方面的入侵檢測和安全日志審計分析。
- Winlogbeat 用于 Windows 平臺的事件日志收集。
- Filebeat 用于日志文件的收集等。
Elasticsearch、Logstash、Kibana、Beats ,這幾個放在一起,就叫作 Elastic Stack。
如今,Elastic 的版圖越來越大,前年,Elastic 收購 Opbeat,開源了業(yè)界第一個完整的 APM 解決方案,通過探針可以實現(xiàn)無侵入的代碼級別的應(yīng)用性能監(jiān)控。
去年 7 月又收購了代碼搜索 Insight.IO,后續(xù)可以實現(xiàn)代碼級別的語義檢索。今年又收購了一個做終端安全的廠商 Endgame。
這樣 Elastic Stack 這一個平臺就可以同時做到:
- 日志分析
- 性能指標(biāo)分析
- 安全日志分析
- APM 應(yīng)用性能分析
- NPM 網(wǎng)絡(luò)性能分析
- 網(wǎng)站站內(nèi)搜索
- 企業(yè)級搜索
- 代碼搜索
- 實時 BI 業(yè)務(wù)分析
- SIEM 解決方案
- 終端設(shè)備安全
- ......
試想一下:在一個風(fēng)和日麗的下午,你手機(jī)上收到一條告警短信,于是點(diǎn)擊鏈接,打開 Kibana 的監(jiān)控儀表盤,發(fā)現(xiàn)某臺服務(wù)器的 CPU 達(dá)到 100% 了。
于是,你順手點(diǎn)擊過濾這臺服務(wù)器的所有相關(guān)信息,可以看到相關(guān)的日志顯示,是這臺服務(wù)器上面部署的某一個業(yè)務(wù)服務(wù)的 QPS 有顯著下降,然后過濾到這個業(yè)務(wù)的日志,發(fā)現(xiàn)有很多異常的日志信息,前端 Nginx 代理日志還顯示有很多請求被拒絕,看樣子是后端的微服務(wù)處理能力達(dá)到瓶頸。
這個時候,繼續(xù)點(diǎn)擊 APM 的分析面板,切換到事務(wù)和會話分析界面,看到有很多數(shù)據(jù)庫鏈接處于開啟狀態(tài)。
你點(diǎn)擊查看調(diào)用代碼,立馬就找到了性能瓶頸的原因,原來是某個類的某個方法調(diào)用 MySQL 卻沒有及時釋放鏈接造成了泄露,于是修改這行代碼,提交上線,問題解決。然后,你可以若無其事地繼續(xù)瀏覽相親網(wǎng)站啦。
盡管這是一個假想的例子,但是可以看到,基于 Elastic Stack ,你可以覆蓋一整套完整的,從全局性能監(jiān)控到具體代碼級別的排障和解決問題的過程,并且使用起來要比很多現(xiàn)有的方案更加高效和便捷。
好了,現(xiàn)在你們是否對 Elasticsearch 已經(jīng)有了一個初步的了解呢?是不是也有躍躍欲試的打算?”
劉備點(diǎn)點(diǎn)頭:“今天來先生這里真的是收獲不少,之前多有冒犯,還請多多包涵啊?!?/p>
關(guān)羽也說:“大哥,明天我就和三弟開始研究 Elasticsearch,爭取早日改造好咱們的網(wǎng)站?!?/p>
“剛說的相親網(wǎng)站要不也發(fā)我一下”,張飛連忙問道。劉備沒好氣白了一眼張飛。
“天色已晚,告辭了!”
劉備三人作別孔明,各自高興的回家了。
“慢走不送,有空來喝茶啊?!?/p>
孔明抹了一把額頭,總算送走這仨了,恐怕從此江湖上估計要不平靜嘍。
Elasticsearch 的基本概念
張飛帶著筆記本來到會議室(今天的位置是關(guān)羽家),因為關(guān)羽今天要給大家講講 Elasticsearch 的調(diào)研成果。
關(guān)羽部門的其他成員也都來了,其實也就關(guān)平和周倉(隔壁村硬拽的)兩個人。
沒辦法,創(chuàng)業(yè)初期,徐州草鞋網(wǎng)一共就這么幾條槍,這不劉總經(jīng)理今天去城門口擺攤搞線下直銷業(yè)務(wù)去了,因為線上網(wǎng)站不是還在開發(fā)中嘛。
關(guān)羽把投影儀擺弄好,就開場了:“兄弟們,大哥、翼德和我前些日子見過茅廬的諸葛先生,諸葛先生給我們介紹了非常不錯的工具,叫做 Elasticsearch(簡稱:ES),可以用來改進(jìn)我們的網(wǎng)站搜索,非常有前途,今天我給大家介紹一下?!?/p>
張飛點(diǎn)點(diǎn)頭:“二哥,你能不能給我們講講 Elasticsearch 和咱們用的的數(shù)據(jù)庫有什么區(qū)別啊?”
“三弟,你不按套路出牌啊,我還沒開始講,你就問問題,我這不都準(zhǔn)備了 PPT 么?”
“二哥,別整這些花里胡哨的,大哥今天又不在,我昨晚和兄弟們喝酒喝大了,頭痛的要命,簡單點(diǎn),能不能簡單點(diǎn)?!?/p>
“丫給老子出去?!标P(guān)羽氣的臉紅脖子粗,張飛一聽就老實了,“是是是,我不說話行了吧?!?/p>
ES 與數(shù)據(jù)庫比較
“要說 Elasticsearch 和咱們現(xiàn)有數(shù)據(jù)庫的區(qū)別,先從我們的數(shù)據(jù)庫說起吧?!?/p>
“我們的數(shù)據(jù)庫主要用來存儲草鞋網(wǎng)的業(yè)務(wù)數(shù)據(jù),如訂單、商品介紹、會員等信息,數(shù)據(jù)庫是由表組成的結(jié)構(gòu),一張表里面存放若干條記錄,一張表有若干個列,每列就是一個字段。
他們之間有各種關(guān)系,所以傳統(tǒng)的這類數(shù)據(jù)庫也叫關(guān)系型數(shù)據(jù)庫, 因為我們可以進(jìn)行多張表的聯(lián)合查詢。關(guān)平你上次寫的幾百行的 SQL 還記得嗎,很溜啊,你這是在用 SQL 寫散文啊?!?/p>
“就是速度稍微有點(diǎn)慢,呵呵?!标P(guān)平撓了撓頭,不好意思地說。
“呵,好笑,那是相當(dāng)慢好嗎。咱們先來看看這個 Elasticsearch 是干嘛的。它是一個專門的搜索引擎,大家平常用的曹阿蠻公司家的漢搜,就是搜索引擎的技術(shù),底層技術(shù)原理都是一樣的。
大家用的數(shù)據(jù)庫里面不是可以對字段創(chuàng)建索引嘛,這樣查起來才快,而 Elasticsearch 則是專門存索引的,索引就是為了優(yōu)化查詢而生的,有了索引,查詢起來自然就快啦。
在 Elasticsearch 中也有和庫表類似的概念,不過叫作索引(Index),索引里面的每一條記錄叫做一個文檔,每個文檔里面有多個字段,和數(shù)據(jù)庫相比,Elasticsearch 不支持索引間的任意關(guān)聯(lián)查詢(Join),也不支持?jǐn)?shù)據(jù)庫的事務(wù)操作,無法滿足對數(shù)據(jù)有強(qiáng)一致性要求的場景。”
周倉舉手道:“少爺,看樣子,Elasticsearch 和數(shù)據(jù)庫不是一個東西哈,但是這些事務(wù)一致性可都是基本要求啊,Elasticsearch 居然不支持。”
“沒錯,咱們引入 Elasticsearch 本來就不是要替換掉咱們目前的數(shù)據(jù)庫,我們只需要借助它提升我們的搜索查詢性能就可以了。Elasticsearch 是一個Java 程序,運(yùn)行在 JVM 虛擬機(jī)之上,可以說是跨平臺的?!?/p>
RESTful+HTTP+JSON
“Java 的啊,咱們沒人會 Java 啊!”張飛又叫起來,“又要學(xué)一門新語言啊,坑人不?”
“急什么啊?!标P(guān)羽繼續(xù)說,“雖然 Elasticsearch 是 Java 寫的,但是它對外提供的是 RESTful API,所以,也就是我們都熟悉的 HTTP 協(xié)議,通過使用標(biāo)準(zhǔn)的 HTTP 接口來訪問 Elasticsearch,不用 Java 語言也能用的??梢哉f是跨語言的?!?/p>
“媽呀,嚇俺一跳,我們前端界的新東西我都忙不過來了,什么 React、Angular、Vue 已經(jīng)把我累得夠嗆,可別再讓我學(xué)什么 Java 了?!睆堬w這下總算是松了一口氣。
“另外,Elasticsearch 各種語言的 SDK 也有提供,根本不用擔(dān)心語言調(diào)用的問題,就算是自己封裝一個 API 調(diào)用,也就是拼接出一個 HTTP 請求就可以了。
Elasticsearch 的輸入輸出都是 JSON 數(shù)據(jù)結(jié)構(gòu),這是一種 JavaScript 里面常用的數(shù)據(jù)結(jié)構(gòu),翼德應(yīng)該非常熟悉了?!?/p>
“JSON 當(dāng)然熟練了,今天晚上誰請我喝酒,我就教他” 張飛一臉得意。
“額,地球人都知道,還要你教,讓我給你們看看一個在 Elasticsearch 里面創(chuàng)建索引的例子啊。”
只見關(guān)羽快速的切換了一張早已準(zhǔn)備好的幻燈片:
- POST index/doc/1
- {
- "name":"關(guān)羽",
- "age":32,
- "address":"徐州大道201號",
- "date":"2018-11-11"
- }
張飛一看興奮了:“恩,JSON 這個好,簡潔易懂,也支持復(fù)雜的結(jié)構(gòu)表達(dá),一個對象包含若干屬性,屬性又可以是另外一個 JSON 對象,用來描述業(yè)務(wù)對象真的是非常方便。這個例子的雙十一也比較符合二哥的身份。”
分布式、可伸縮
“找抽是吧,你還不是一樣”,講完了 ES 和數(shù)據(jù)庫的區(qū)別,打消了語言調(diào)用的疑慮,關(guān)羽接著說了下去。
“咱們業(yè)務(wù)剛起步,沒有多少數(shù)據(jù)量,可是咱大哥的目標(biāo)是把咱徐州草鞋做到全國。
你想想咱們?nèi)珖卸嗌匐p腳,要是每個人腳上都是穿咱的草鞋,那業(yè)務(wù)量有多大啊,那訂單,那客戶資料還不海了去啊,所以咱們要考慮后續(xù)的擴(kuò)容升級的問題。這時從門口進(jìn)來一位打掃衛(wèi)生的大娘,“來來來,抬腳,讓一讓”。
被突如其來的干擾影響,關(guān)羽臉色有點(diǎn)不悅,無奈,打掃衛(wèi)生的大娘就是他老娘。
“Elasticsearch 支持集群部署,Elasticsearch 的每一個進(jìn)程叫做一個節(jié)點(diǎn)(Node),如果再啟動另外一個節(jié)點(diǎn),它們相互之間能夠自動組成一個集群?!?/p>
“牛群倒是聽說過,什么雞群鴨群的?!贝竽镆荒樢苫??!靶£P(guān),今天叫兄弟們在家里吃了晚飯再走啊”。
“這位大娘,你掃完就撤好吧,真是的,啥也不懂。",“兔崽子,回頭收拾你”。
關(guān)羽繼續(xù)給大家講道"集群啊,就是讓服務(wù)器在一起協(xié)作完成一件任務(wù),也就是說,它們可以共享服務(wù)器資源,相互之間進(jìn)行通信。
在 Elasticsearch 的集群里,咱們通過訪問任意節(jié)點(diǎn)的 RESTful API 端口,就可以訪問到整個集群里面的所有索引信息,而不用去關(guān)心數(shù)據(jù)的具體分布,另外數(shù)據(jù)也有副本,能夠自動分布和進(jìn)行故障處理,就算其中一個機(jī)器節(jié)點(diǎn)掛了,另外的節(jié)點(diǎn)也還能繼續(xù)對外提供服務(wù),同時也能保證數(shù)據(jù)也是完整的不受故障影響,不丟數(shù)據(jù),你們說是不是很神奇啊?”
“嗯,高級、高級!”幾個人異口同聲。
“Elasticsearch 里面的索引是以分片的方式來組織的,一個索引底層會有多個分片,以分片為單位分布在集群中。
這樣的分布方式,跟數(shù)據(jù)庫的 Sharding 有一拼,同樣的原理,目的是避免單個索引太大,拆分成若干分片就可以解決單個大索引的問題。
未來如果我們要支持搜索業(yè)務(wù)的增長,我們只需要增加 Elasticsearch 的節(jié)點(diǎn),就能夠給集群添加資源,Elasticsearch 還會自動遷移舊機(jī)器的部分?jǐn)?shù)據(jù)到新節(jié)點(diǎn)上,從而充分利用硬件資源,擴(kuò)充處理能力。我聽說西域有人部署過成百上千個節(jié)點(diǎn)的規(guī)模呢,這么大規(guī)模,好家伙。”
QueryDSL、查詢與聚合分析
“二哥,你快說說,Elasticsearch 到底怎么用,剛剛聽你說了這么多,感覺牛逼轟轟的,像我一搞前端打雜的,能不能很快也用起來?”張飛有點(diǎn)著急地說。
“三弟,你是前端大將軍,不是前端打雜好嘛,Elasticsearch 對外提供的是 RESTful API,你用它的時候,不用關(guān)心底層的諸多細(xì)節(jié)。
你要創(chuàng)建索引,你就往里面 POST 一條 JSON 數(shù)據(jù),你要查詢,你就寫一個查詢的 GET 請求就行了。
在 Elasticsearch 里面,有一個專門的查詢表達(dá)式叫做 QueryDSL,也是用 JSON 描述的,支持很多的查詢類型。
此外,我們還能對數(shù)據(jù)進(jìn)行統(tǒng)計分析,比如可以對咱們網(wǎng)站的訪問者統(tǒng)計分析他們的訪問時段、所在州郡、以及點(diǎn)擊過哪些頁面,這些在 Elasticsearch 通過一個叫作“聚合”的功能就能實現(xiàn)。
不管是查詢還是聚合,Elasticsearch 給你返回的結(jié)果也是 JSON 格式的文檔,拿到返回結(jié)果之后,咱們就可以在前端進(jìn)行展示了。這塊兒主要是三弟你的工作了?!?/p>
“如此甚好,這個小 Case ,交給俺了,前端對于俺那還不是分分鐘的事情?!睆堬w拍著胸脯說。
插件與擴(kuò)展
“Elasticsearch 功能還比較多,周倉、關(guān)平,你們倆要好好研究一下,我們的一些需求不一定都能滿足,不過 Elasticsearch 有非常好的插件機(jī)制,它自己就提供了很多功能,就是以插件形式放出來的。
從前面的 API 查詢到底層的網(wǎng)絡(luò)通信都可以通過寫插件來進(jìn)行擴(kuò)展,有些需求 Elasticsearch 沒有提供的,我們也可以通過自己寫插件來實現(xiàn),不過插件需要用 Java 來編寫。另外就是 Elasticsearch 的部署安裝你們倆研究一下?!?/p>
“遵命,關(guān)將軍!”周倉和關(guān)平一起點(diǎn)頭。
“二哥,我好像有點(diǎn)餓了,你們家有啥吃的不?!?/p>
“拳頭吃不吃?”
“來倆唄?!?/p>
“哎呀,不敢了?!?.....
劉備在城門口賣完今天的第五雙草鞋,抬頭看到徐州今天上空的月亮感覺特別圓,心想明天肯定又是晴朗的一天。
欲知后事,且聽下回分解。
分享文章:劉備三顧茅廬,請Elasticsearch出山
本文地址:http://m.fisionsoft.com.cn/article/ccdcssi.html


咨詢
建站咨詢
