什么是Elasticsearch?
介紹
當(dāng)人們問“什么是Elasticsearch?”時(shí),有些人可能會(huì)回答說它是“一個(gè)索引”,“一個(gè)搜索引擎”,“分析數(shù)據(jù)庫”,“一個(gè)大數(shù)據(jù)解決方案”,“它快速且可擴(kuò)展”,或者“它有點(diǎn)像谷歌”。根據(jù)您對(duì)這項(xiàng)技術(shù)的熟悉程度,這些答案可能會(huì)使您更接近啊哈時(shí)刻,或者讓您進(jìn)一步困惑。但事實(shí)是,所有這些答案都是正確的,這是Elasticsearch吸引力的一部分。多年來,Elasticsearch及其周圍被稱為“彈性堆棧”的組件生態(tài)系統(tǒng)已被用于越來越多的用例,從網(wǎng)站或文檔上的簡單搜索、收集和分析日志數(shù)據(jù),到用于數(shù)據(jù)分析和可視化的商業(yè)智能工具。那么,Elastic聯(lián)合創(chuàng)始人Shay Bannon為妻子的烹飪食譜創(chuàng)建的簡單搜索引擎是如何成長為當(dāng)今最受歡迎的企業(yè)搜索引擎和10個(gè)最受歡迎的數(shù)據(jù)庫管理系統(tǒng)之一的呢?在這篇文章中,我們將通過了解什么是Elasticsearch,它的工作原理以及它的使用方式來回答這個(gè)問題。讓我們潛入其中。
什么是Elasticsearch?
從其核心來說,您可以將Elasticsearch視為可以處理JSON請(qǐng)求并返回JSON數(shù)據(jù)的服務(wù)器。
Elasticsearch是一個(gè)基于Apache Lucene并在Java中開發(fā)的分布式開源搜索和分析引擎。它最初是Lucene開源搜索框架的可擴(kuò)展版本,然后增加了水平縮放Lucene指數(shù)的能力。Elasticsearch允許您快速、近實(shí)時(shí)地存儲(chǔ)、搜索和分析大量數(shù)據(jù),并在幾毫秒內(nèi)給出答案。它能夠?qū)崿F(xiàn)快速的搜索響應(yīng),因?yàn)樗皇侵苯铀阉魑谋荆撬阉魉饕K褂没谖臋n的結(jié)構(gòu),而不是表格和模式,并帶有廣泛的REST API來存儲(chǔ)和搜索數(shù)據(jù)。從其核心來說,您可以將Elasticsearch視為可以處理JSON請(qǐng)求并返回JSON數(shù)據(jù)的服務(wù)器。
Elasticsearch是如何工作的?
從根本上講,Elasticsearch將數(shù)據(jù)組織成文檔,這些文檔是基于JSON的代表實(shí)體的信息單元。文檔根據(jù)其特征分組為索引,類似于數(shù)據(jù)庫。Elasticsearch使用倒置索引,這是一種將單詞映射到文檔位置的數(shù)據(jù)結(jié)構(gòu),以進(jìn)行高效搜索。Elasticsearch的分布式架構(gòu)能夠以幾乎實(shí)時(shí)的性能快速搜索和分析大量數(shù)據(jù)。
為了更好地了解Elasticsearch的工作原理,讓我們介紹一些關(guān)于它如何組織數(shù)據(jù)及其后端組件的基本概念。
邏輯概念
文稿
文檔是信息的基本單位,可以在以JSON表示的Elasticsearch中索引,JSON是全球互聯(lián)網(wǎng)數(shù)據(jù)交換格式。您可以將文檔想象成關(guān)系數(shù)據(jù)庫中的行,代表給定的實(shí)體——您正在搜索的東西。在Elasticsearch中,文檔可以不僅僅是文本,它可以是任何用JSON編碼的結(jié)構(gòu)化數(shù)據(jù)。這些數(shù)據(jù)可以是數(shù)字、字符串和日期等。每個(gè)文檔都有一個(gè)唯一的ID和給定的數(shù)據(jù)類型,它描述了文檔的實(shí)體類型。例如,文檔可以代表百科全書文章或來自網(wǎng)絡(luò)服務(wù)器的日志條目。
目錄
索引是具有相似特征的文檔的集合。索引是您可以在Elasticsearch中查詢的最高級(jí)別實(shí)體。您可以認(rèn)為該索引類似于關(guān)系數(shù)據(jù)庫模式中的數(shù)據(jù)庫。索引中的任何文檔通常都與邏輯相關(guān)。例如,在電子商務(wù)網(wǎng)站的上下文中,您可以有一個(gè)客戶索引,一個(gè)產(chǎn)品索引,一個(gè)訂單索引,等等。索引由一個(gè)名稱標(biāo)識(shí),該名稱用于在對(duì)其中的文檔執(zhí)行索引、搜索、更新和刪除操作時(shí)引用索引。
倒置索引
Elasticsearch中的索引實(shí)際上是所謂的倒置索引,這是所有搜索引擎工作的機(jī)制。它是一種數(shù)據(jù)結(jié)構(gòu),存儲(chǔ)從內(nèi)容(如單詞或數(shù)字)到其在文檔或一組文檔中的位置的映射。基本上,它是一個(gè)類似哈希圖的數(shù)據(jù)結(jié)構(gòu),將您從一個(gè)單詞引導(dǎo)到文檔。倒置索引不會(huì)直接存儲(chǔ)字符串,而是將每個(gè)文檔拆分為單個(gè)搜索詞(即每個(gè)單詞),然后將每個(gè)搜索詞映射到這些搜索詞出現(xiàn)的文檔。例如,在下圖中,“最佳”一詞出現(xiàn)在文檔2中,因此它被映射到該文檔。這可以快速查找給定文檔中查找搜索詞的位置。通過使用分布式反向索引,Elasticsearch甚至可以從非常大的數(shù)據(jù)集中快速找到全文搜索的最佳匹配項(xiàng)。
倒置索引的視覺表示
后端組件
集群
Elasticsearch集群是由一個(gè)或多個(gè)節(jié)點(diǎn)實(shí)例連接在一起的一組。Elasticsearch集群的力量在于在集群中的所有節(jié)點(diǎn)上分配任務(wù)、搜索和索引。
節(jié)點(diǎn)
節(jié)點(diǎn)是集群一部分的單個(gè)服務(wù)器。節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)并參與集群的索引和搜索功能。Elasticsearch節(jié)點(diǎn)可以以不同的方式配置:
主節(jié)點(diǎn)—控制Elasticsearch集群,并負(fù)責(zé)所有集群范圍的操作,如創(chuàng)建/刪除索引和添加/刪除節(jié)點(diǎn)。
數(shù)據(jù)節(jié)點(diǎn)—存儲(chǔ)數(shù)據(jù)并執(zhí)行與數(shù)據(jù)相關(guān)的操作,如搜索和聚合。
客戶端節(jié)點(diǎn)—將集群請(qǐng)求轉(zhuǎn)發(fā)到主節(jié)點(diǎn),并將數(shù)據(jù)相關(guān)請(qǐng)求轉(zhuǎn)發(fā)到數(shù)據(jù)節(jié)點(diǎn)。
碎片
Elasticsearch提供了將索引細(xì)分為稱為碎片的多個(gè)部分的能力。每個(gè)碎片本身就是一個(gè)功能齊全且獨(dú)立的“索引”,可以托管在集群中的任何節(jié)點(diǎn)上。通過在多個(gè)碎片上分發(fā)索引中的文檔,并在多個(gè)節(jié)點(diǎn)上分發(fā)這些碎片,Elasticsearch可以確保冗余,這既可以防止硬件故障,又能隨著節(jié)點(diǎn)添加到集群時(shí)增加查詢?nèi)萘俊?/span>
復(fù)制品
Elasticsearch允許您制作一個(gè)或多個(gè)索引碎片的副本,這些碎片被稱為“復(fù)制碎片”或只是“復(fù)制碎片”。基本上,副本碎片是主碎片的副本。索引中的每個(gè)文檔都屬于一個(gè)主碎片。副本提供數(shù)據(jù)的冗余副本,以防止硬件故障,并增加服務(wù)讀取請(qǐng)求(如搜索或檢索文檔)的能力。
彈性堆棧(ELK)
什么是彈性堆棧(原ELK堆棧)?
Elasticsearch是Elastic Stack的核心組件,Elastic Stack是一套用于數(shù)據(jù)攝取、豐富、存儲(chǔ)、分析和可視化的開源工具。它通常以其組件Elasticsearch、Logstash和Kibana命名為“ELK”堆棧,現(xiàn)在還包括Beats。雖然搜索引擎是其核心,但用戶開始使用Elasticsearch進(jìn)行日志數(shù)據(jù),并希望找到一種輕松攝取和可視化這些數(shù)據(jù)的方法。
基巴納
Kibana是Elasticsearch的數(shù)據(jù)可視化和管理工具,提供實(shí)時(shí)直方圖、線圖、餅圖和地圖。它允許您可視化您的Elasticsearch數(shù)據(jù)并瀏覽Elastic Stack。您可以通過從一個(gè)問題開始選擇塑造數(shù)據(jù)的方式,以了解交互式可視化將引導(dǎo)您去哪里。例如,由于Kibana經(jīng)常用于日志分析,它允許您回答有關(guān)您的網(wǎng)絡(luò)點(diǎn)擊來自哪里、您的分發(fā)URL等問題。
如果您沒有在Elasticsearch之上構(gòu)建自己的應(yīng)用程序,Kibana是使用強(qiáng)大而靈活的用戶界面搜索和可視化索引的好方法。然而,一個(gè)主要缺點(diǎn)是,每個(gè)可視化只能針對(duì)單個(gè)索引/索引模式工作。因此,如果您有嚴(yán)格不同數(shù)據(jù)的索引,則必須為每個(gè)索引創(chuàng)建單獨(dú)的可視化。
原木
Logstash用于聚合和處理數(shù)據(jù),并將其發(fā)送到Elasticsearch。這是一個(gè)開源的服務(wù)器端數(shù)據(jù)處理管道,可以同時(shí)從多個(gè)來源攝取數(shù)據(jù),對(duì)其進(jìn)行轉(zhuǎn)換,然后將其發(fā)送進(jìn)行收集。它還通過識(shí)別命名字段來構(gòu)建結(jié)構(gòu),并將它們轉(zhuǎn)換為在通用格式上收斂,從而轉(zhuǎn)換和準(zhǔn)備數(shù)據(jù),無論格式如何。例如,由于數(shù)據(jù)通常以各種格式分散在不同的系統(tǒng)中,Logstash允許您將不同的系統(tǒng)(如Web服務(wù)器、數(shù)據(jù)庫、亞馬遜服務(wù)等)綁定在一起,并以連續(xù)的流媒體方式將數(shù)據(jù)發(fā)布到需要訪問的任何地方。
節(jié)拍
Beats是輕量級(jí)、單一用途的數(shù)據(jù)運(yùn)輸代理的集合,用于將數(shù)百或數(shù)千臺(tái)機(jī)器和系統(tǒng)的數(shù)據(jù)發(fā)送到Logstash或Elasticsearch。Beats非常適合收集數(shù)據(jù),因?yàn)樗鼈兛梢苑旁谀姆?wù)器上,與您的容器一起,或作為功能部署,然后在Elasticsearch中集中數(shù)據(jù)。例如,F(xiàn)ilebeat可以坐在您的服務(wù)器上,監(jiān)控日志文件進(jìn)入,解析它們,并近乎實(shí)時(shí)地導(dǎo)入Elasticsearch。
Elasticsearch是用來做什么的?
現(xiàn)在,我們已經(jīng)大致了解了什么是Elasticsearch,它背后的邏輯概念及其架構(gòu),我們更好地了解了它為什么以及如何用于各種用例。下面,我們將研究Elasticsearch的一些主要用例,并提供公司今天如何使用它的示例。
主要用例
應(yīng)用程序搜索——適用于嚴(yán)重依賴搜索平臺(tái)訪問、檢索和報(bào)告數(shù)據(jù)的應(yīng)用程序。
網(wǎng)站搜索——存儲(chǔ)大量內(nèi)容的網(wǎng)站發(fā)現(xiàn)Elasticsearch是有效和準(zhǔn)確搜索的非常有用的工具。Elasticsearch在網(wǎng)站搜索領(lǐng)域穩(wěn)步取得進(jìn)展,這并不奇怪。
企業(yè)搜索——Elasticsearch允許全企業(yè)范圍的搜索,包括文檔搜索、電子商務(wù)產(chǎn)品搜索、博客搜索、人員搜索以及您能想到的任何形式的搜索。事實(shí)上,它已經(jīng)穩(wěn)步滲透并取代了我們每天使用的大多數(shù)流行網(wǎng)站的搜索解決方案。從更特定于企業(yè)的角度來看,Elasticsearch習(xí)慣于在公司內(nèi)聯(lián)網(wǎng)中取得巨大成功。
日志和日志分析——正如我們所討論的,Elasticsearch通常用于以近實(shí)時(shí)和可擴(kuò)展的方式攝取和分析日志數(shù)據(jù)。它還提供了關(guān)于日志指標(biāo)的重要運(yùn)營見解,以推動(dòng)行動(dòng)。
基礎(chǔ)設(shè)施指標(biāo)和容器監(jiān)控——許多公司使用ELK堆棧來分析各種指標(biāo)。這可能涉及通過幾個(gè)性能參數(shù)收集數(shù)據(jù),這些參數(shù)因用例而異。
安全分析——Elasticsearch的另一個(gè)主要分析應(yīng)用程序是安全分析。訪問日志和有關(guān)系統(tǒng)安全的類似日志可以使用ELK堆棧進(jìn)行分析,從而更全面地實(shí)時(shí)了解整個(gè)系統(tǒng)正在發(fā)生的事情。
業(yè)務(wù)分析——ELK Stack中的許多內(nèi)置功能使其成為業(yè)務(wù)分析工具的一個(gè)不錯(cuò)的選擇。然而,在大多數(shù)組織中,實(shí)施該產(chǎn)品和應(yīng)用有陡峭的學(xué)習(xí)曲線。在公司除了Elasticsearch之外還有多個(gè)數(shù)據(jù)源的情況下尤其如此,因?yàn)镵ibana只處理Elasticsearch數(shù)據(jù)。一個(gè)好的替代方案是Knowi,這是一個(gè)分析平臺(tái),與Elasticsearch原生集成,甚至允許非技術(shù)業(yè)務(wù)用戶在沒有ELK Stack知識(shí)或?qū)I(yè)知識(shí)的情況下對(duì)Elasticsearch數(shù)據(jù)創(chuàng)建可視化和執(zhí)行分析。
公司用例
Netflix
Netflix在各種用例中依靠ELK Stack來監(jiān)控和分析客戶服務(wù)運(yùn)營和安全日志。例如,Elasticsearch是其消息系統(tǒng)背后的底層引擎。此外,該公司選擇Elasticsearch是因?yàn)樗淖詣?dòng)分片和復(fù)制、靈活的模式、漂亮的擴(kuò)展模型以及具有許多插件的生態(tài)系統(tǒng)。Netflix已穩(wěn)步將Elasticsearch的使用從幾個(gè)孤立的部署增加到由數(shù)百個(gè)節(jié)點(diǎn)組成的十幾個(gè)集群。
eBay
憑借無數(shù)以Elasticsearch為支柱的業(yè)務(wù)關(guān)鍵型文本搜索和分析用例,eBay創(chuàng)建了一個(gè)自定義的“Elasticsearch-as-a-Service”平臺(tái),允許在其內(nèi)部基于OpenStack的云平臺(tái)上輕松配置Elasticsearch集群。
沃爾瑪
沃爾瑪利用彈性堆棧揭示其數(shù)據(jù)的隱藏潛力,以深入了解客戶購買模式,跟蹤商店績效指標(biāo)和假日分析——所有這些都近乎實(shí)時(shí)。它還利用ELK的安全功能與SSO一起進(jìn)行安全,為異常檢測(cè)發(fā)出警報(bào),并監(jiān)控DevOps
為什么Elasticsearch很受歡迎
根據(jù)Stackshare的這項(xiàng)調(diào)查,以下是開發(fā)人員和公司選擇Elasticsearch的主要原因:
- 強(qiáng)大的API
- 很棒的搜索引擎
- 開源
- 寧靜
- 近實(shí)時(shí)搜索
- 免費(fèi)
- 搜索一切
- 易于開始
- 分析
- 分布式
摘要
那么,什么是Elasticsearch?在這篇文章中,我們?cè)噲D通過了解它是什么、它如何工作以及它如何使用的視角來回答這個(gè)問題,但我們?nèi)匀恢皇敲銖?qiáng)觸及學(xué)習(xí)它的一切。但根據(jù)我們所涵蓋的內(nèi)容,我們可以簡要總結(jié)一下,Elasticsearch是搜索引擎的核心,其底層架構(gòu)和組件使其快速且可擴(kuò)展,位于互補(bǔ)工具生態(tài)系統(tǒng)的核心,這些工具一起可用于許多用例,包括搜索、分析、數(shù)據(jù)處理和存儲(chǔ)。

浙公網(wǎng)安備 33010602011771號(hào)