国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Elasticsearch架構(gòu)原理快速了解

這篇具有很好參考價(jià)值的文章主要介紹了Elasticsearch架構(gòu)原理快速了解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一、ES的簡單了解

(一)直面Elasticsearch

(二)Elasticsearch和關(guān)系型數(shù)據(jù)庫的對(duì)比

二、基本概念回顧

(一)索引、文檔、字段的概念

(二)映射

(三)集群和節(jié)點(diǎn)

(四)分片和副分片

(五)DSL

三、架構(gòu)原理

(一)節(jié)點(diǎn)職責(zé)

(二)主分片和副分片

(三)路由計(jì)算

Routing值

路由計(jì)算公式

路由的目的

路由的自定義和靈活性

案例舉例

(四)ES寫文檔的過程

(五)ES讀文檔的過程

四、基本問題的反思

(一)ES是如何提升數(shù)據(jù)的高可用性的呢?

(二)ES如何提升服務(wù)的高并發(fā)性能呢?


一、ES的簡單了解

(一)直面Elasticsearch

Elasticsearch(通常簡寫為ES)是一個(gè)開源的分布式搜索和分析引擎,它被設(shè)計(jì)用于快速、實(shí)時(shí)地搜索和分析大規(guī)模數(shù)據(jù)。以下是對(duì)Elasticsearch的簡單了解:

  1. 分布式搜索引擎:Elasticsearch是一個(gè)分布式系統(tǒng),它可以在多個(gè)節(jié)點(diǎn)上運(yùn)行,允許你存儲(chǔ)和搜索大量的數(shù)據(jù)。這使得它非常適合處理日志、文檔、地理空間數(shù)據(jù)等各種類型的信息。

  2. 文本搜索:Elasticsearch是一個(gè)強(qiáng)大的文本搜索引擎,它可以高效地搜索和匹配文本數(shù)據(jù)。它支持全文搜索、模糊搜索、多字段搜索等功能,使得用戶可以輕松地構(gòu)建搜索引擎、推薦系統(tǒng)和數(shù)據(jù)分析應(yīng)用。

  3. 實(shí)時(shí)性:Elasticsearch支持實(shí)時(shí)搜索,這意味著當(dāng)你添加、更新或刪除文檔時(shí),你可以立即在搜索結(jié)果中看到變化,這對(duì)于監(jiān)控、日志分析和實(shí)時(shí)報(bào)告非常有用。

  4. 多種數(shù)據(jù)類型支持:Elasticsearch不僅支持文本數(shù)據(jù)搜索,還支持地理空間數(shù)據(jù)、數(shù)值數(shù)據(jù)、日期和時(shí)間數(shù)據(jù)等多種數(shù)據(jù)類型的搜索和分析。

  5. 彈性和可擴(kuò)展性:Elasticsearch是彈性的,你可以根據(jù)需要添加或刪除節(jié)點(diǎn),以適應(yīng)不斷增長的數(shù)據(jù)和負(fù)載。它還具有自動(dòng)分片和復(fù)制機(jī)制,以確保數(shù)據(jù)的高可用性和可擴(kuò)展性。

  6. RESTful API:Elasticsearch提供了一個(gè)易于使用的RESTful API,使得與其交互變得簡單。你可以使用HTTP請(qǐng)求來執(zhí)行各種操作,例如索引文檔、執(zhí)行搜索查詢、管理索引和節(jié)點(diǎn)等。

  7. 生態(tài)系統(tǒng):Elasticsearch是Elastic公司的一個(gè)產(chǎn)品,它是ELK(Elasticsearch、Logstash和Kibana)堆棧的一部分,用于日志收集、分析和可視化。此外,有豐富的插件和工具,可以擴(kuò)展Elasticsearch的功能。

Elasticsearch在多個(gè)領(lǐng)域中都有廣泛的應(yīng)用,包括搜索引擎、日志和事件數(shù)據(jù)分析、業(yè)務(wù)智能、監(jiān)控和儀表板制作等。無論是構(gòu)建實(shí)時(shí)搜索引擎還是分析大規(guī)模數(shù)據(jù),Elasticsearch都是一個(gè)非常有價(jià)值的工具。

更多基本的了解可以見ES初識(shí)學(xué)習(xí)與簡單實(shí)踐總結(jié)-CSDN博客。

(二)Elasticsearch和關(guān)系型數(shù)據(jù)庫的對(duì)比

Elasticsearch和關(guān)系型數(shù)據(jù)庫是兩種不同類型的數(shù)據(jù)存儲(chǔ)系統(tǒng),它們?cè)跀?shù)據(jù)模型、用途和功能上有一些顯著的區(qū)別。以下是Elasticsearch和關(guān)系型數(shù)據(jù)庫的對(duì)比:

數(shù)據(jù)模型

  • Elasticsearch:Elasticsearch是一個(gè)面向文檔的分布式搜索引擎。它的數(shù)據(jù)模型基于文檔,每個(gè)文檔是一個(gè)包含了JSON格式數(shù)據(jù)的獨(dú)立單元。文檔可以屬于不同的索引,每個(gè)文檔可以具有不同的結(jié)構(gòu)。
  • 關(guān)系型數(shù)據(jù)庫:關(guān)系型數(shù)據(jù)庫使用表和行的結(jié)構(gòu)來存儲(chǔ)數(shù)據(jù)。表需要定義模式(Schema),所有行都必須遵循相同的結(jié)構(gòu)。

查詢語言

  • Elasticsearch:使用DSL(Domain-Specific Language)進(jìn)行查詢,這是一種結(jié)構(gòu)化的查詢語言,特別適用于全文搜索、實(shí)時(shí)數(shù)據(jù)分析和地理空間查詢。
  • 關(guān)系型數(shù)據(jù)庫:通常使用SQL(Structured Query Language)進(jìn)行查詢,適用于結(jié)構(gòu)化數(shù)據(jù)的查詢和操作。

搜索和全文檢索

  • Elasticsearch:專注于全文搜索和復(fù)雜查詢,支持分詞、模糊搜索、短語匹配等高級(jí)搜索功能。
  • 關(guān)系型數(shù)據(jù)庫:雖然關(guān)系型數(shù)據(jù)庫也可以進(jìn)行搜索,但不如Elasticsearch在全文搜索和復(fù)雜搜索方面高效。

實(shí)時(shí)性

  • Elasticsearch:支持實(shí)時(shí)索引,可以在文檔添加、更新或刪除時(shí)立即反映變化。
  • 關(guān)系型數(shù)據(jù)庫:通常更適用于批處理和事務(wù)性操作,實(shí)時(shí)性可能較低。

可擴(kuò)展性

  • Elasticsearch:具有良好的橫向擴(kuò)展性,可通過添加更多的節(jié)點(diǎn)來處理大規(guī)模數(shù)據(jù)和高負(fù)載。
  • 關(guān)系型數(shù)據(jù)庫:通常更適用于單節(jié)點(diǎn)或垂直擴(kuò)展,橫向擴(kuò)展性較差。

數(shù)據(jù)一致性

  • Elasticsearch:在分布式環(huán)境中強(qiáng)調(diào)性能和實(shí)時(shí)性,可能犧牲了一致性。它使用分片和副本來提高可用性,但在網(wǎng)絡(luò)分區(qū)等情況下可能會(huì)出現(xiàn)數(shù)據(jù)不一致。
  • 關(guān)系型數(shù)據(jù)庫:通常強(qiáng)調(diào)ACID(原子性、一致性、隔離性、持久性)事務(wù),確保數(shù)據(jù)一致性。

用途

  • Elasticsearch:適用于全文搜索、實(shí)時(shí)日志分析、監(jiān)控、數(shù)據(jù)分析、地理信息系統(tǒng)(GIS)等需要高級(jí)搜索和實(shí)時(shí)性的應(yīng)用。
  • 關(guān)系型數(shù)據(jù)庫:適用于事務(wù)性應(yīng)用、數(shù)據(jù)管理、企業(yè)應(yīng)用等傳統(tǒng)的關(guān)系型數(shù)據(jù)存儲(chǔ)需求。

總的來說,Elasticsearch和關(guān)系型數(shù)據(jù)庫在用途上有差異,選擇取決于你的具體需求。通常情況下,Elasticsearch更適合需要全文搜索和實(shí)時(shí)性的應(yīng)用,而關(guān)系型數(shù)據(jù)庫更適用于事務(wù)性和結(jié)構(gòu)化數(shù)據(jù)管理。有時(shí)候,也可以將它們結(jié)合使用,根據(jù)需求選擇最合適的工具。

二、基本概念回顧

當(dāng)使用Elasticsearch時(shí),有一些基本概念是很重要的,下面是一些ES基本概念的回顧:

(一)索引、文檔、字段的概念

當(dāng)使用Elasticsearch時(shí),理解以下核心概念非常重要:索引(Index)、文檔(Document)和字段(Field)。以下是對(duì)這些概念的詳細(xì)介紹和理解:

索引(Index)

  • 概念:索引是Elasticsearch中的一個(gè)邏輯容器,用于組織和存儲(chǔ)相關(guān)的文檔數(shù)據(jù)。它類似于關(guān)系數(shù)據(jù)庫中的表,但更靈活。
  • 理解:可以將索引看作是一個(gè)大型數(shù)據(jù)集的容器,用于存儲(chǔ)相似類型的數(shù)據(jù)。例如,你可以創(chuàng)建一個(gè)名為"products"的索引,用于存儲(chǔ)產(chǎn)品信息。

文檔(Document)

  • 概念:文檔是存儲(chǔ)在索引中的基本數(shù)據(jù)單元,通常以JSON格式表示。每個(gè)文檔代表了一個(gè)獨(dú)立的數(shù)據(jù)記錄。
  • 理解:文檔類似于關(guān)系數(shù)據(jù)庫中的一行記錄。例如,在"products"索引中,每個(gè)文檔可以代表一個(gè)產(chǎn)品,包括產(chǎn)品的名稱、描述、價(jià)格等信息。

字段(Field)

  • 概念:字段是文檔中的數(shù)據(jù)項(xiàng),它們包含了文檔的具體信息。每個(gè)字段都有一個(gè)名稱和一個(gè)對(duì)應(yīng)的值。
  • 理解:在一個(gè)文檔中,每個(gè)字段代表了一個(gè)屬性或特征,例如,一個(gè)產(chǎn)品文檔可以包含字段如“productName”、“productDescription”、“price”等,每個(gè)字段存儲(chǔ)相關(guān)信息。

綜合起來,可以將這些概念視為組織和存儲(chǔ)數(shù)據(jù)的層次結(jié)構(gòu):

  • 一個(gè)索引可以包含多個(gè)文檔,這些文檔代表了不同類型的數(shù)據(jù)。
  • 每個(gè)文檔包含多個(gè)字段,每個(gè)字段存儲(chǔ)文檔的具體數(shù)據(jù)。

Elasticsearch架構(gòu)原理快速了解,ES相關(guān),elasticsearch,大數(shù)據(jù)

這種層次結(jié)構(gòu)的彈性和靈活性使得Elasticsearch非常適合處理大規(guī)模、異構(gòu)數(shù)據(jù),并且具有強(qiáng)大的搜索和分析功能。通過理解這些概念,你可以更好地組織、檢索和分析你的數(shù)據(jù)。

(二)映射

映射(Mapping)是Elasticsearch中的一個(gè)重要概念,它用于定義索引中文檔的結(jié)構(gòu)和字段的屬性。映射指定了每個(gè)字段的數(shù)據(jù)類型、如何分析文本、是否存儲(chǔ)原始數(shù)據(jù)等信息。以下是關(guān)于映射的詳細(xì)介紹:

  1. 字段的數(shù)據(jù)類型:映射確定了每個(gè)字段的數(shù)據(jù)類型,例如文本、數(shù)值、日期、布爾值等。指定正確的數(shù)據(jù)類型有助于Elasticsearch正確地索引和搜索數(shù)據(jù)。

  2. 分析器(Analyzer):對(duì)于文本字段,映射可以指定使用哪種分析器來處理文本數(shù)據(jù)。分析器決定了如何將文本拆分成詞條,以及如何處理這些詞條,例如小寫化、刪除停用詞等。

  3. 存儲(chǔ)選項(xiàng):映射可以指定是否將字段的原始值存儲(chǔ)在索引中。存儲(chǔ)原始值可以提高檢索性能,但會(huì)占用更多的存儲(chǔ)空間。

  4. 多值字段:映射允許你指定字段是否可以包含多個(gè)值,這對(duì)于數(shù)組或多選字段非常有用。

  5. 日期格式:對(duì)于日期字段,映射可以定義日期的格式,以確保正確的日期解析和排序。

  6. 自定義字段屬性:你還可以在映射中定義自定義字段屬性,例如字段的權(quán)重、是否可搜索、是否可排序等。

  7. 嵌套對(duì)象:映射允許你在文檔中包含嵌套對(duì)象,這些對(duì)象可以具有自己的字段和映射。

映射的正確定義對(duì)于Elasticsearch的性能和數(shù)據(jù)質(zhì)量非常重要。它確保了索引中的文檔被正確地存儲(chǔ)和檢索,并允許執(zhí)行高級(jí)的搜索和分析操作。通常,映射可以自動(dòng)創(chuàng)建,但在需要更精細(xì)的控制時(shí),也可以手動(dòng)定義映射。

(三)集群和節(jié)點(diǎn)

在Elasticsearch中,集群(Cluster)和節(jié)點(diǎn)(Node)是兩個(gè)核心的概念,用于管理和處理數(shù)據(jù)。以下是有關(guān)集群和節(jié)點(diǎn)的詳細(xì)解釋:

Elasticsearch架構(gòu)原理快速了解,ES相關(guān),elasticsearch,大數(shù)據(jù)

集群(Cluster)

  • 概念:集群是一個(gè)或多個(gè)節(jié)點(diǎn)的集合,它們協(xié)同工作以存儲(chǔ)和處理數(shù)據(jù)。集群是Elasticsearch的最高級(jí)別的組織單元。

  • 用途:集群用于處理大規(guī)模數(shù)據(jù),提供高可用性和容錯(cuò)性。它允許將數(shù)據(jù)分布在多個(gè)節(jié)點(diǎn)上,從而實(shí)現(xiàn)數(shù)據(jù)的水平擴(kuò)展和負(fù)載均衡。

  • 特點(diǎn):集群有一個(gè)唯一的名稱,它可以包含任意數(shù)量的節(jié)點(diǎn)。集群中的節(jié)點(diǎn)可以加入或離開,使得集群可以動(dòng)態(tài)調(diào)整以適應(yīng)不同的負(fù)載。

節(jié)點(diǎn)(Node)

  • 概念:節(jié)點(diǎn)是集群中的單個(gè)實(shí)例,它可以是物理服務(wù)器或虛擬機(jī)器。每個(gè)節(jié)點(diǎn)是一個(gè)獨(dú)立的Elasticsearch實(shí)例,具有自己的配置和角色。

  • 用途:節(jié)點(diǎn)用于存儲(chǔ)數(shù)據(jù)和執(zhí)行搜索操作。每個(gè)節(jié)點(diǎn)負(fù)責(zé)管理分配給它的數(shù)據(jù)分片,并響應(yīng)來自客戶端的查詢請(qǐng)求。

  • 特點(diǎn):每個(gè)節(jié)點(diǎn)有一個(gè)唯一的名稱,可以配置為具有不同的角色,例如主節(jié)點(diǎn)(Master Node)、數(shù)據(jù)節(jié)點(diǎn)(Data Node)、協(xié)調(diào)節(jié)點(diǎn)(Coordinator Node)等。不同的角色決定了節(jié)點(diǎn)的功能。

集群是多個(gè)節(jié)點(diǎn)的集合,用于協(xié)同工作以存儲(chǔ)和處理數(shù)據(jù),提供高可用性和擴(kuò)展性。節(jié)點(diǎn)是集群中的獨(dú)立實(shí)例,負(fù)責(zé)具體的數(shù)據(jù)存儲(chǔ)和搜索任務(wù)。

(四)分片和副分片

在Elasticsearch中,分片(Shard)和副本分片(Replica Shard)是關(guān)于數(shù)據(jù)存儲(chǔ)和可用性的重要概念。它們?cè)试S你將數(shù)據(jù)分散存儲(chǔ)在多個(gè)節(jié)點(diǎn)上,以提高性能和容錯(cuò)性。

分片(Shard)

  • 概念:分片是將索引中的數(shù)據(jù)分割成更小的部分的方式。每個(gè)索引可以分成多個(gè)主分片,這些主分片之間是獨(dú)立的數(shù)據(jù)單元。

  • 用途:分片用于水平擴(kuò)展數(shù)據(jù)存儲(chǔ)和搜索性能。當(dāng)索引的大小超過單個(gè)節(jié)點(diǎn)的處理能力時(shí),分片使得數(shù)據(jù)可以分布在多個(gè)節(jié)點(diǎn)上。

  • 特點(diǎn):默認(rèn)情況下,每個(gè)索引有5個(gè)主分片。你可以在創(chuàng)建索引時(shí)指定分片的數(shù)量,但一旦創(chuàng)建,分片數(shù)量就不能更改。

副本分片(Replica Shard)

  • 概念:副本分片是主分片的精確復(fù)制。每個(gè)主分片可以有零個(gè)或多個(gè)副本分片。副本分片包含了主分片的完整拷貝。

  • 用途:副本分片用于提高數(shù)據(jù)的可用性和容錯(cuò)性。如果主分片丟失或不可用,副本分片可以頂替它,確保數(shù)據(jù)不會(huì)丟失。

  • 特點(diǎn):副本分片的數(shù)量可以在索引創(chuàng)建后隨時(shí)更改,以提高可用性和性能。通常,每個(gè)主分片至少有一個(gè)副本。

分片和副本分片是Elasticsearch中用于數(shù)據(jù)管理和可用性的關(guān)鍵概念。分片允許水平擴(kuò)展數(shù)據(jù),副本分片提供了數(shù)據(jù)的冗余和容錯(cuò)性。

Elasticsearch架構(gòu)原理快速了解,ES相關(guān),elasticsearch,大數(shù)據(jù)

一個(gè)分片的主分片和副分片分別存儲(chǔ)在不同的計(jì)算機(jī)上,如上圖為一個(gè)三個(gè)節(jié)點(diǎn)的集群,某索引設(shè)置了3個(gè)主分片,每個(gè)主分片分配了兩個(gè)副分片,P表示該分片的主分片,R表示該分片的副分片,P和R后面的數(shù)字表示其編號(hào)。在極端情況下,當(dāng)有一個(gè)節(jié)點(diǎn)時(shí),如果索引的副分片個(gè)數(shù)設(shè)置大于1,則系統(tǒng)只分配主分片,而不會(huì)分配副分片。

(五)DSL

在Elasticsearch中,DSL代表"Domain-Specific Language"(領(lǐng)域特定語言),它是一種用于構(gòu)建和執(zhí)行復(fù)雜查詢的結(jié)構(gòu)化查詢語言。DSL允許用戶以非常靈活和精確的方式定義搜索和分析操作。DSL是Elasticsearch查詢的核心組成部分,用于與Elasticsearch進(jìn)行交互,從而檢索和操作數(shù)據(jù)。

DSL查詢通常以JSON(JavaScript Object Notation)格式編寫,因此它是一種使用JSON語法的查詢語言。DSL查詢由一個(gè)或多個(gè)查詢子句組成,這些子句定義了搜索的條件、過濾條件、聚合操作等。以下是DSL查詢中常見的一些查詢子句和其作用:

  • Match Query:用于執(zhí)行全文搜索,根據(jù)文本匹配度對(duì)文檔進(jìn)行排序。

  • Term Query:用于精確匹配字段的值,不執(zhí)行分析。

  • Range Query:用于匹配指定范圍內(nèi)的數(shù)值或日期字段。

  • Bool Query:允許組合多個(gè)查詢子句,使用布爾邏輯(AND、OR、NOT)來構(gòu)建復(fù)雜的查詢。

  • Filter:用于精確過濾文檔,不影響文檔的相關(guān)性排序。

  • Aggregations:用于執(zhí)行數(shù)據(jù)分析操作,例如匯總、平均值、求和、直方圖等。

  • Nested Query:用于在嵌套文檔中執(zhí)行查詢。

  • Geo Queries:用于地理位置數(shù)據(jù)的查詢,如地理坐標(biāo)和地理形狀。

DSL查詢非常強(qiáng)大且靈活,允許根據(jù)具體的搜索和分析需求構(gòu)建高級(jí)查詢。它是Elasticsearch的一個(gè)關(guān)鍵特性,用于創(chuàng)建強(qiáng)大的搜索引擎和數(shù)據(jù)分析應(yīng)用。通過構(gòu)建復(fù)雜的DSL查詢,可以準(zhǔn)確地檢索和分析數(shù)據(jù),以滿足不同的用例和業(yè)務(wù)需求。

三、架構(gòu)原理

Elasticsearch的架構(gòu)原理允許用戶構(gòu)建高性能、可擴(kuò)展、實(shí)時(shí)的搜索和分析系統(tǒng)。然而,分布式系統(tǒng)的管理和維護(hù)可能具有一定的復(fù)雜性,需要謹(jǐn)慎規(guī)劃和配置,以確保數(shù)據(jù)的完整性和性能。

(一)節(jié)點(diǎn)職責(zé)

Elasticsearch中的節(jié)點(diǎn)可以扮演不同的職責(zé),根據(jù)其角色和配置,以下是常見的ES節(jié)點(diǎn)職責(zé)分析:

主節(jié)點(diǎn)(Master Node)

  • 主要職責(zé):主節(jié)點(diǎn)負(fù)責(zé)集群的管理和協(xié)調(diào),包括索引和分片的創(chuàng)建、刪除、重新分配等。它還負(fù)責(zé)維護(hù)集群狀態(tài)信息。
  • 配置特點(diǎn):通常,一個(gè)集群中只有一個(gè)主節(jié)點(diǎn),但可以有多個(gè)備用主節(jié)點(diǎn)以提供冗余和高可用性。

數(shù)據(jù)節(jié)點(diǎn)(Data Node)

  • 主要職責(zé):數(shù)據(jù)節(jié)點(diǎn)負(fù)責(zé)存儲(chǔ)索引數(shù)據(jù)和執(zhí)行搜索操作。它們存儲(chǔ)分片的副本,以提供高可用性。數(shù)據(jù)節(jié)點(diǎn)也負(fù)責(zé)處理文檔的索引和刪除操作。
  • 配置特點(diǎn):一個(gè)集群可以有多個(gè)數(shù)據(jù)節(jié)點(diǎn),具體數(shù)量取決于集群規(guī)模和性能需求。

協(xié)調(diào)節(jié)點(diǎn)(Coordinator Node)

  • 主要職責(zé):協(xié)調(diào)節(jié)點(diǎn)不存儲(chǔ)數(shù)據(jù),但負(fù)責(zé)接收來自客戶端的搜索和查詢請(qǐng)求,然后將請(qǐng)求分發(fā)到適當(dāng)?shù)臄?shù)據(jù)節(jié)點(diǎn)。這有助于減輕數(shù)據(jù)節(jié)點(diǎn)的負(fù)載。
  • 配置特點(diǎn):可以在大型集群中引入?yún)f(xié)調(diào)節(jié)點(diǎn),以處理大量的搜索請(qǐng)求。

候選主節(jié)點(diǎn)(Candidate Master Node)

  • 主要職責(zé):候選主節(jié)點(diǎn)是潛在的主節(jié)點(diǎn)候選者,當(dāng)主節(jié)點(diǎn)失敗時(shí)可以自動(dòng)接管主節(jié)點(diǎn)的角色。它們有能力成為主節(jié)點(diǎn),但不會(huì)主動(dòng)參與主節(jié)點(diǎn)的選舉。
  • 配置特點(diǎn):通常,每個(gè)節(jié)點(diǎn)都是候選主節(jié)點(diǎn),但只有一個(gè)會(huì)成為活動(dòng)主節(jié)點(diǎn)。

不同的節(jié)點(diǎn)角色和配置允許Elasticsearch在不同的用例和環(huán)境中發(fā)揮其強(qiáng)大的搜索和分析能力。根據(jù)需求和性能目標(biāo),可以選擇配置適當(dāng)數(shù)量和類型的節(jié)點(diǎn),以構(gòu)建高性能、高可用性的ES集群。

主節(jié)點(diǎn)(Master Node)、數(shù)據(jù)節(jié)點(diǎn)(Data Node)和協(xié)調(diào)節(jié)點(diǎn)(Coordinator Node)三種節(jié)點(diǎn)類型通常是Elasticsearch集群中的核心節(jié)點(diǎn),它們協(xié)同工作以實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)、搜索和協(xié)調(diào)。

為了降低Elasticsearch集群的負(fù)載并更好地處理大量搜索請(qǐng)求,可以配置某些節(jié)點(diǎn)作為專門的協(xié)調(diào)節(jié)點(diǎn)。這些協(xié)調(diào)節(jié)點(diǎn)不負(fù)責(zé)存儲(chǔ)數(shù)據(jù),而是負(fù)責(zé)接收來自客戶端的搜索和查詢請(qǐng)求,并將這些請(qǐng)求轉(zhuǎn)發(fā)到包含實(shí)際數(shù)據(jù)的數(shù)據(jù)節(jié)點(diǎn)上。

Elasticsearch架構(gòu)原理快速了解,ES相關(guān),elasticsearch,大數(shù)據(jù)

配置協(xié)調(diào)節(jié)點(diǎn)

  1. 創(chuàng)建協(xié)調(diào)節(jié)點(diǎn)配置文件:首先,創(chuàng)建一個(gè)新的Elasticsearch配置文件,通??梢栽诩褐械墓?jié)點(diǎn)上創(chuàng)建一個(gè)新的配置文件。

  2. 配置節(jié)點(diǎn)類型:在配置文件中,指定節(jié)點(diǎn)的類型為"coordinating-only"。這告訴Elasticsearch這是一個(gè)專門的協(xié)調(diào)節(jié)點(diǎn),不會(huì)存儲(chǔ)數(shù)據(jù)。

    node.master: false
    node.data: false
    node.ingest: false
  3. 配置其他設(shè)置:根據(jù)需要,可以配置其他節(jié)點(diǎn)設(shè)置,如網(wǎng)絡(luò)綁定、HTTP端口等。

  4. 啟動(dòng)節(jié)點(diǎn):使用配置文件啟動(dòng)協(xié)調(diào)節(jié)點(diǎn)。確保節(jié)點(diǎn)成功加入集群。

協(xié)調(diào)節(jié)點(diǎn)的作用分析

  • 負(fù)載均衡:協(xié)調(diào)節(jié)點(diǎn)的主要作用是分發(fā)搜索和查詢請(qǐng)求到數(shù)據(jù)節(jié)點(diǎn),從而實(shí)現(xiàn)負(fù)載均衡。這有助于減輕數(shù)據(jù)節(jié)點(diǎn)的負(fù)擔(dān),特別是在處理大量并發(fā)請(qǐng)求時(shí)。

  • 減少網(wǎng)絡(luò)開銷:協(xié)調(diào)節(jié)點(diǎn)可以減少客戶端與數(shù)據(jù)節(jié)點(diǎn)之間的網(wǎng)絡(luò)開銷??蛻舳酥恍枧c協(xié)調(diào)節(jié)點(diǎn)通信,協(xié)調(diào)節(jié)點(diǎn)負(fù)責(zé)將請(qǐng)求發(fā)送到適當(dāng)?shù)臄?shù)據(jù)節(jié)點(diǎn),然后將結(jié)果返回給客戶端。

  • 隔離查詢層和數(shù)據(jù)層:協(xié)調(diào)節(jié)點(diǎn)的存在將查詢邏輯與數(shù)據(jù)存儲(chǔ)分開,使得可以更容易管理和調(diào)整每個(gè)層的性能和資源。

  • 提高安全性:協(xié)調(diào)節(jié)點(diǎn)可以用作防火墻前端,允許你在協(xié)調(diào)節(jié)點(diǎn)上實(shí)施訪問控制和安全策略,以保護(hù)數(shù)據(jù)節(jié)點(diǎn)免受未經(jīng)授權(quán)的訪問。

協(xié)調(diào)節(jié)點(diǎn)在Elasticsearch集群中起到非常重要的作用,特別是在大規(guī)模集群和高并發(fā)環(huán)境中。它們可以有效降低數(shù)據(jù)節(jié)點(diǎn)的負(fù)載,提高集群的性能和可伸縮性。配置協(xié)調(diào)節(jié)點(diǎn)是一種智能的方式來優(yōu)化Elasticsearch集群的性能和資源利用率。

(二)主分片和副分片

Elasticsearch為了支持分布式搜索和提高高可用性,采用了以下機(jī)制:

  • 數(shù)據(jù)分片:索引被分成多個(gè)分片,每個(gè)分片可擁有零個(gè)或多個(gè)副本。這些分片和副本分散在不同的節(jié)點(diǎn)上,增強(qiáng)了數(shù)據(jù)的可用性和并發(fā)性能。

  • 主分片和副本:每個(gè)分片包括一個(gè)主分片和其可能的多個(gè)副本分片。主分片負(fù)責(zé)存儲(chǔ)數(shù)據(jù),副本分片提供冗余和高可用性。如果主分片所在節(jié)點(diǎn)宕機(jī),某個(gè)副本分片將晉升為主分片以繼續(xù)提供服務(wù)。

這種分布式結(jié)構(gòu)允許Elasticsearch在多個(gè)節(jié)點(diǎn)上同時(shí)執(zhí)行搜索和查詢操作,提高了性能和吞吐量。此外,副本分片確保數(shù)據(jù)的冗余性,防止了單點(diǎn)故障。當(dāng)主分片不可用時(shí),系統(tǒng)能夠迅速切換到副本分片,確保數(shù)據(jù)的持續(xù)可用性。這些機(jī)制一起使得Elasticsearch成為一款強(qiáng)大的分布式搜索和分析引擎。

我們?cè)俅螌⒁暯抢氐缴厦娴暮唵渭海绻鹡ode1發(fā)生故障宕機(jī),集群感知到分片0的主分片P0將要丟失,此時(shí)集群會(huì)立即將其他節(jié)點(diǎn)(如node3)上的分片0對(duì)應(yīng)的副分片R0作為主分片P0進(jìn)行服務(wù)。集群中由node2和node3對(duì)外提供服務(wù),所有的分片相關(guān)的服務(wù)不受影響。

Elasticsearch架構(gòu)原理快速了解,ES相關(guān),elasticsearch,大數(shù)據(jù)

如果node1恢復(fù)了服務(wù)并加入集群中,因?yàn)樵趎ode1上還保留有分片0的數(shù)據(jù),此時(shí)node1上的分片P0會(huì)變成副分片R0,在此期間缺失的數(shù)據(jù)會(huì)通過node3上的主分片P0進(jìn)行補(bǔ)充。并且node1上的分片R1和R2也會(huì)分別從node3和node2上對(duì)應(yīng)的P1和P2分片上補(bǔ)充數(shù)據(jù),如下圖所示:

Elasticsearch架構(gòu)原理快速了解,ES相關(guān),elasticsearch,大數(shù)據(jù)

當(dāng)客戶端對(duì)某個(gè)索引的請(qǐng)求被分發(fā)到ES的協(xié)調(diào)節(jié)點(diǎn)時(shí),協(xié)調(diào)節(jié)點(diǎn)會(huì)將請(qǐng)求進(jìn)行轉(zhuǎn)發(fā),轉(zhuǎn)發(fā)的對(duì)象是包含這個(gè)索引的所有分片的部分節(jié)點(diǎn)。協(xié)調(diào)節(jié)點(diǎn)中有一份分片-節(jié)點(diǎn)路由表,該表主要存放分片和節(jié)點(diǎn)的對(duì)應(yīng)關(guān)系。協(xié)調(diào)節(jié)點(diǎn)采用輪詢算法,選取該索引的主/副分片所在的節(jié)點(diǎn)進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)。一個(gè)索引的主分片設(shè)定后就不能再修改,如果想繼續(xù)提升索引的并發(fā)性能,則可以增加索引的副分片個(gè)數(shù),此時(shí)協(xié)調(diào)節(jié)點(diǎn)會(huì)將這些副分片加入輪詢算法中。

(三)路由計(jì)算

Elasticsearch的路由計(jì)算是指確定文檔應(yīng)該存儲(chǔ)在哪個(gè)主分片上的過程。路由計(jì)算使用一個(gè)叫做routing的值來決定文檔的歸屬,然后將文檔路由到相應(yīng)的主分片。

Routing值

  • routing 是一個(gè)用戶或應(yīng)用程序定義的值,通常用于標(biāo)識(shí)文檔應(yīng)該被路由到哪個(gè)主分片。
  • routing 可以是任何字符串或數(shù)字,通常是與應(yīng)用程序中的特定邏輯相關(guān)的標(biāo)識(shí)符,比如用戶ID、產(chǎn)品ID、地理位置等。
  • 客戶端在寫入文檔時(shí)可以明確指定 routing 值,也可以讓Elasticsearch根據(jù)文檔內(nèi)容自動(dòng)計(jì)算。

路由計(jì)算公式

Elasticsearch使用以下路由計(jì)算公式來確定文檔的路由目標(biāo)主分片:

shard = hash(routing) % number_of_primary_shards

  • hash(routing) 表示對(duì) routing 值進(jìn)行哈希計(jì)算,以得到一個(gè)哈希碼。
  • % number_of_primary_shards 表示取哈希碼與主分片數(shù)量取模的結(jié)果,從而確定目標(biāo)主分片的編號(hào)。

路由的目的

  • 路由的目的是將文檔均勻地分布到索引的各個(gè)主分片上,以實(shí)現(xiàn)數(shù)據(jù)的分散存儲(chǔ)和負(fù)載均衡。
  • 良好的路由策略可以確保索引數(shù)據(jù)在不同主分片上的分布較為均勻,避免了數(shù)據(jù)傾斜,提高了性能和可擴(kuò)展性。

路由的自定義和靈活性

  • 客戶端可以根據(jù)應(yīng)用程序的需求自定義 routing 值,以控制文檔的路由。
  • Elasticsearch還支持使用自定義的路由計(jì)算器,允許應(yīng)用程序定義更復(fù)雜的路由策略,以滿足特定的業(yè)務(wù)需求。

總之,Elasticsearch的路由計(jì)算機(jī)制允許根據(jù)文檔的 routing 值將數(shù)據(jù)路由到適當(dāng)?shù)闹鞣制?,以?shí)現(xiàn)數(shù)據(jù)的分布式存儲(chǔ)和負(fù)載均衡。當(dāng)一個(gè)文檔需要被寫入Elasticsearch索引時(shí),路由計(jì)算用于確定該文檔應(yīng)該存儲(chǔ)在哪個(gè)主分片上。

案例舉例

以下是一個(gè)示例,以幫助更清晰地理解路由計(jì)算的工作原理:

假設(shè)有一個(gè)名為 "user" 的索引,它有5個(gè)主分片(number_of_primary_shards為5)?,F(xiàn)在,我們要將一個(gè)用戶的信息文檔寫入到這個(gè)索引中,并使用用戶的ID來作為 routing 值。用戶ID可以是任何字符串或數(shù)字,但為了示例簡化,我們使用數(shù)字:

文檔信息

  • 用戶ID: 12345
  • 文檔內(nèi)容: 用戶名、電子郵件等用戶信息

路由計(jì)算

我們使用以下路由計(jì)算公式來確定文檔的目標(biāo)主分片:

shard = hash(routing) % number_of_primary_shards

在示例中,用戶ID為12345,所以 routing 值就是12345。接下來,我們將計(jì)算哈希值:hash(12345),得到一個(gè)哈希碼。假設(shè)哈希碼為3,然后我們?nèi)」4a與主分片數(shù)量5取模:3 % 5,結(jié)果為3。

結(jié)果

根據(jù)路由計(jì)算,文檔應(yīng)該路由到主分片3上。協(xié)調(diào)節(jié)點(diǎn)將該寫入請(qǐng)求發(fā)送到負(fù)責(zé)主分片3的數(shù)據(jù)節(jié)點(diǎn),然后數(shù)據(jù)節(jié)點(diǎn)存儲(chǔ)該文檔。

通過這個(gè)路由計(jì)算過程,Elasticsearch確保文檔被均勻地分布到索引的各個(gè)主分片上,實(shí)現(xiàn)了數(shù)據(jù)的分散存儲(chǔ)。這有助于提高性能、負(fù)載均衡和高可用性,因?yàn)閿?shù)據(jù)存儲(chǔ)在不同的節(jié)點(diǎn)上,同時(shí)也確保了數(shù)據(jù)冗余,以應(yīng)對(duì)節(jié)點(diǎn)故障。這是Elasticsearch分布式架構(gòu)的核心部分。

(四)ES寫文檔的過程

當(dāng)Elasticsearch的協(xié)調(diào)節(jié)點(diǎn)接收到客戶端發(fā)送的寫入文檔請(qǐng)求,它會(huì)執(zhí)行以下關(guān)鍵步驟來確保文檔的成功寫入:

1.路由計(jì)算

  • 協(xié)調(diào)節(jié)點(diǎn)首先執(zhí)行路由計(jì)算,這是通過一定的路由算法來確定文檔應(yīng)該存儲(chǔ)在哪個(gè)主分片上。
  • 路由計(jì)算通常使用文檔的routing值來計(jì)算目標(biāo)主分片,確保文檔被分配到正確的位置。

2.寫入主分片

  • 協(xié)調(diào)節(jié)點(diǎn)將寫入請(qǐng)求轉(zhuǎn)發(fā)到目標(biāo)主分片所在的數(shù)據(jù)節(jié)點(diǎn)。目標(biāo)主分片負(fù)責(zé)實(shí)際存儲(chǔ)文檔。
  • 數(shù)據(jù)節(jié)點(diǎn)將文檔寫入主分片的Lucene索引,確保文檔的持久化存儲(chǔ)。

3.主分片副本同步

  • 如果索引配置了副本分片,主分片在寫入后會(huì)將數(shù)據(jù)同步到所有副本分片所在的節(jié)點(diǎn)。這確保了數(shù)據(jù)的冗余性和高可用性。
  • 同步操作確保即使某個(gè)節(jié)點(diǎn)發(fā)生故障,數(shù)據(jù)仍然可用。

4.寫入確認(rèn)

  • 一旦主分片和所有副本分片都成功寫入文檔,數(shù)據(jù)節(jié)點(diǎn)會(huì)向協(xié)調(diào)節(jié)點(diǎn)發(fā)送寫入確認(rèn)。
  • 協(xié)調(diào)節(jié)點(diǎn)知道文檔已經(jīng)成功寫入索引。

5.響應(yīng)客戶端

  • 協(xié)調(diào)節(jié)點(diǎn)將寫入成功的確認(rèn)信息發(fā)送給客戶端,以通知客戶端文檔已經(jīng)成功寫入索引。

完全一致性

Elasticsearch確保寫入操作的完全一致性。這意味著只有在主分片和所有副本分片都成功寫入后,寫入操作才會(huì)被確認(rèn)為成功。這確保了數(shù)據(jù)的可靠性。

高可用性

主分片和副本分片的機(jī)制確保了數(shù)據(jù)的高可用性。即使在節(jié)點(diǎn)故障的情況下,數(shù)據(jù)仍然可以從副本分片中檢索。

這個(gè)過程確保了文檔的安全寫入和持久存儲(chǔ),同時(shí)保障了數(shù)據(jù)的高可用性和一致性。Elasticsearch的寫入操作是其分布式性能和可用性的核心組成部分,支持實(shí)時(shí)數(shù)據(jù)的索引和檢索。

Elasticsearch架構(gòu)原理快速了解,ES相關(guān),elasticsearch,大數(shù)據(jù)

上圖中,一個(gè)包含3個(gè)節(jié)點(diǎn)的ES集群,假設(shè)索引中只有3個(gè)主分片和6個(gè)副分片,客戶端向節(jié)點(diǎn)1發(fā)起向索引寫入一條文檔的請(qǐng)求,在本次請(qǐng)求中,節(jié)點(diǎn)1被稱為協(xié)調(diào)節(jié)點(diǎn)。節(jié)點(diǎn)1判斷數(shù)據(jù)應(yīng)該映射到哪個(gè)分片上。假設(shè)將數(shù)據(jù)映射到分片1上,因?yàn)榉制?的主分片在節(jié)點(diǎn)2上,因此節(jié)點(diǎn)1把請(qǐng)求轉(zhuǎn)發(fā)到節(jié)點(diǎn)2上。節(jié)點(diǎn)2接收客戶端的數(shù)據(jù)并進(jìn)行存儲(chǔ),然后把請(qǐng)求轉(zhuǎn)發(fā)到副分片1所在的節(jié)點(diǎn)1和節(jié)點(diǎn)3上,當(dāng)所有副分片所在的節(jié)點(diǎn)全部完成存儲(chǔ)后,協(xié)調(diào)節(jié)點(diǎn)也就是節(jié)點(diǎn)1向客戶端返回成功標(biāo)志。

(五)ES讀文檔的過程

Elasticsearch讀取文檔的過程相對(duì)簡單,但仍然包括幾個(gè)關(guān)鍵步驟,下面是這個(gè)過程的詳細(xì)分析:

1.客戶端發(fā)起讀取請(qǐng)求

  • 當(dāng)客戶端需要檢索一個(gè)或多個(gè)文檔時(shí),它會(huì)向Elasticsearch集群中的任何一個(gè)節(jié)點(diǎn)發(fā)送讀取請(qǐng)求。
  • 請(qǐng)求通常包括索引名稱、文檔ID以及任何其他檢索條件。

2.路由計(jì)算

  • 接收讀取請(qǐng)求的節(jié)點(diǎn)會(huì)執(zhí)行路由計(jì)算,以確定文檔存儲(chǔ)在哪個(gè)主分片上。這通常使用文檔的routing值來計(jì)算目標(biāo)主分片。

3.讀取主分片

  • 一旦目標(biāo)主分片確定,節(jié)點(diǎn)將讀取請(qǐng)求轉(zhuǎn)發(fā)到擁有該主分片的數(shù)據(jù)節(jié)點(diǎn)。
  • 數(shù)據(jù)節(jié)點(diǎn)從主分片的Lucene索引中檢索文檔數(shù)據(jù)。

4.返回文檔數(shù)據(jù)

  • 數(shù)據(jù)節(jié)點(diǎn)將檢索到的文檔數(shù)據(jù)返回給協(xié)調(diào)節(jié)點(diǎn),然后協(xié)調(diào)節(jié)點(diǎn)將其傳遞給客戶端。
  • 客戶端接收到文檔數(shù)據(jù)后,可以對(duì)其進(jìn)行處理或顯示。

5.數(shù)據(jù)一致性和高可用性

  • Elasticsearch確保讀取操作的數(shù)據(jù)一致性。這意味著只有在主分片上的數(shù)據(jù)被讀取后,讀取操作才會(huì)返回成功。
  • 如果主分片不可用,Elasticsearch會(huì)自動(dòng)從副本分片中選擇一個(gè)來滿足讀取請(qǐng)求,以確保數(shù)據(jù)的高可用性。

6.查詢處理(可選)

  • 在讀取文檔時(shí),客戶端可以使用查詢條件來篩選文檔,例如執(zhí)行全文搜索或過濾文檔。
  • Elasticsearch支持強(qiáng)大的查詢語言和過濾器,允許客戶端定制檢索條件。

7.近實(shí)時(shí)性

  • 讀取操作通常是近實(shí)時(shí)的,文檔數(shù)據(jù)會(huì)盡快對(duì)外可見。但需要注意,在某些情況下,由于分片的同步延遲,可能會(huì)存在短暫的延遲。

8.負(fù)載均衡

  • Elasticsearch的協(xié)調(diào)節(jié)點(diǎn)負(fù)責(zé)將讀取請(qǐng)求路由到正確的主分片上,以實(shí)現(xiàn)負(fù)載均衡和高性能的檢索操作。
  • 查詢請(qǐng)求可以在多個(gè)節(jié)點(diǎn)上并行執(zhí)行,以提高響應(yīng)速度。

總之,Elasticsearch的讀取文檔過程涉及路由計(jì)算、數(shù)據(jù)檢索和返回,以及數(shù)據(jù)一致性和高可用性的保障。這使得Elasticsearch成為一個(gè)強(qiáng)大的實(shí)時(shí)數(shù)據(jù)檢索引擎,支持在大規(guī)模數(shù)據(jù)集上執(zhí)行復(fù)雜的查詢操作。

Elasticsearch架構(gòu)原理快速了解,ES相關(guān),elasticsearch,大數(shù)據(jù)

上圖所示,一個(gè)包含3個(gè)節(jié)點(diǎn)的ES集群,假設(shè)索引中只有3個(gè)主分片和6個(gè)副分片,客戶端向節(jié)點(diǎn)1發(fā)起向索引獲取文檔的請(qǐng)求,在本次請(qǐng)求中,節(jié)點(diǎn)1被稱為協(xié)調(diào)節(jié)點(diǎn)。節(jié)點(diǎn)1判斷數(shù)據(jù)應(yīng)該映射到哪個(gè)分片上。假設(shè)將數(shù)據(jù)映射到分片1上,分片1有主/副兩種分片,分別在節(jié)點(diǎn)2、節(jié)點(diǎn)1和節(jié)點(diǎn)3上。假設(shè)此時(shí)協(xié)調(diào)節(jié)點(diǎn)的輪詢算法選擇的是節(jié)點(diǎn)3,那么它會(huì)將請(qǐng)求轉(zhuǎn)發(fā)到節(jié)點(diǎn)3上,然后節(jié)點(diǎn)3會(huì)把數(shù)據(jù)傳輸給協(xié)調(diào)節(jié)點(diǎn),也就是節(jié)點(diǎn)1,最后由節(jié)點(diǎn)1向客戶端返回文檔數(shù)據(jù)。

四、基本問題的反思

(一)ES是如何提升數(shù)據(jù)的高可用性的呢?

Elasticsearch通過多種方式提升數(shù)據(jù)的高可用性,以確保數(shù)據(jù)在集群中的持久性和可用性。以下是一些關(guān)鍵的機(jī)制和策略,ES用來提高高可用性:

分片和副本

  • Elasticsearch將每個(gè)索引劃分為多個(gè)分片(Shard),這些分片可以分布在不同的節(jié)點(diǎn)上,以實(shí)現(xiàn)數(shù)據(jù)的水平分割和負(fù)載均衡。
  • 每個(gè)分片都可以配置多個(gè)副本分片(Replica Shard),這些副本分片存儲(chǔ)了分片的復(fù)制,確保了數(shù)據(jù)的冗余性。如果主分片不可用,副本分片可以頂替它,保證數(shù)據(jù)的可用性。

主從架構(gòu)

  • Elasticsearch的集群通常包括一個(gè)主節(jié)點(diǎn)(Master Node)和多個(gè)數(shù)據(jù)節(jié)點(diǎn)(Data Node)。主節(jié)點(diǎn)負(fù)責(zé)管理集群的元數(shù)據(jù),包括索引和分片的創(chuàng)建和重新分配。數(shù)據(jù)節(jié)點(diǎn)負(fù)責(zé)存儲(chǔ)和處理數(shù)據(jù)。
  • 主節(jié)點(diǎn)選舉機(jī)制確保了在主節(jié)點(diǎn)故障時(shí)能夠選舉出新的主節(jié)點(diǎn),從而保持集群的可用性。

節(jié)點(diǎn)冗余性

  • Elasticsearch支持配置多個(gè)主節(jié)點(diǎn)、數(shù)據(jù)節(jié)點(diǎn)和協(xié)調(diào)節(jié)點(diǎn),以提供節(jié)點(diǎn)級(jí)別的冗余性。如果一個(gè)節(jié)點(diǎn)故障,其他節(jié)點(diǎn)可以繼續(xù)處理請(qǐng)求。
  • 仲裁節(jié)點(diǎn)(Voting-Only Node)用于提高主節(jié)點(diǎn)選舉的可靠性,防止腦裂問題。

故障檢測和自動(dòng)恢復(fù)

  • Elasticsearch具有內(nèi)置的故障檢測機(jī)制,可以檢測到節(jié)點(diǎn)的故障或不可用性。
  • 當(dāng)節(jié)點(diǎn)不可用時(shí),Elasticsearch會(huì)自動(dòng)重新分配分片和副本,以將數(shù)據(jù)從不可用節(jié)點(diǎn)中恢復(fù)到其他可用節(jié)點(diǎn)上。

數(shù)據(jù)持久性

  • Elasticsearch會(huì)將索引數(shù)據(jù)持久化到磁盤,確保數(shù)據(jù)在節(jié)點(diǎn)重啟或崩潰后不會(huì)丟失。
  • 定期的快照和備份策略可以幫助保護(hù)數(shù)據(jù)的持久性,并支持災(zāi)難恢復(fù)。

數(shù)據(jù)恢復(fù)策略

  • 當(dāng)新節(jié)點(diǎn)加入集群或舊節(jié)點(diǎn)重新加入集群時(shí),Elasticsearch使用數(shù)據(jù)恢復(fù)策略來高效地將數(shù)據(jù)重新分配到節(jié)點(diǎn)上,以加快數(shù)據(jù)的可用性。

總之,Elasticsearch通過分片和副本、主從架構(gòu)、節(jié)點(diǎn)冗余性、故障檢測和自動(dòng)恢復(fù)、數(shù)據(jù)持久性等多種機(jī)制來提高數(shù)據(jù)的高可用性。這使得Elasticsearch適用于構(gòu)建可靠的分布式搜索和分析系統(tǒng),即使在節(jié)點(diǎn)故障或網(wǎng)絡(luò)問題的情況下,也可以保持?jǐn)?shù)據(jù)的可用性和一致性。

(二)ES如何提升服務(wù)的高并發(fā)性能呢?

Elasticsearch可以通過一系列優(yōu)化和配置來提升其服務(wù)的高并發(fā)性能,確保能夠快速響應(yīng)大量的查詢請(qǐng)求。以下是一些提高Elasticsearch高并發(fā)性能的關(guān)鍵策略和方法:

合理分片設(shè)計(jì)

  • 確保索引的分片數(shù)量合理。如果分片數(shù)量太少,可能無法充分利用集群中的節(jié)點(diǎn);如果分片數(shù)量太多,會(huì)增加集群管理的復(fù)雜性。
  • 根據(jù)數(shù)據(jù)量和查詢負(fù)載來確定分片數(shù)量,避免分片過多或過少。

節(jié)點(diǎn)擴(kuò)展和負(fù)載均衡

  • 隨著負(fù)載的增加,可以擴(kuò)展集群,添加更多的數(shù)據(jù)節(jié)點(diǎn)和協(xié)調(diào)節(jié)點(diǎn),以增加處理能力。
  • 使用負(fù)載均衡器來分發(fā)查詢請(qǐng)求,確保它們均勻分布到不同的節(jié)點(diǎn)上,減輕單個(gè)節(jié)點(diǎn)的壓力。

使用副本分片

  • 副本分片提供了數(shù)據(jù)的冗余和負(fù)載均衡。每個(gè)主分片可以有多個(gè)副本,這些副本可以處理讀請(qǐng)求,從而提高讀取性能。
  • 注意,增加副本分片會(huì)增加存儲(chǔ)需求,因此需要根據(jù)資源和需求來平衡。

查詢優(yōu)化

  • 使用Elasticsearch的DSL查詢語言構(gòu)建高效的查詢,避免不必要的查詢和過濾操作。
  • 使用查詢緩存來緩存頻繁執(zhí)行的查詢,以減輕查詢負(fù)載。

數(shù)據(jù)模型優(yōu)化

  • 映射(Mapping)的設(shè)計(jì)對(duì)性能有重要影響。選擇合適的數(shù)據(jù)類型、分析器和索引選項(xiàng)可以提高搜索性能。
  • 使用近實(shí)時(shí)(Near Real-Time)索引設(shè)置來實(shí)現(xiàn)快速的數(shù)據(jù)可用性。

分布式搜索和聚合

  • 使用Elasticsearch的分布式搜索功能,允許查詢?cè)谒泄?jié)點(diǎn)上并行執(zhí)行,提高搜索性能。
  • 避免在查詢中執(zhí)行大量的聚合操作,因?yàn)樗鼈兛赡軙?huì)消耗大量計(jì)算資源。

監(jiān)控和性能調(diào)整

  • 使用監(jiān)控工具來監(jiān)視集群性能,包括CPU、內(nèi)存、磁盤和網(wǎng)絡(luò)使用情況。
  • 根據(jù)監(jiān)控?cái)?shù)據(jù)對(duì)集群進(jìn)行性能調(diào)整,例如增加節(jié)點(diǎn)、調(diào)整分片設(shè)置等。

硬件優(yōu)化

  • 選擇性能強(qiáng)大的硬件,特別是對(duì)于數(shù)據(jù)節(jié)點(diǎn),包括高速CPU、大內(nèi)存、快速磁盤等。
  • 使用固態(tài)硬盤(SSD)來提高磁盤性能,以加速讀寫操作。

查詢預(yù)熱

  • 預(yù)熱(Warm-Up)查詢可以在啟動(dòng)集群或重新加載索引后執(zhí)行,以使緩存和查詢性能優(yōu)化達(dá)到最佳狀態(tài)。

數(shù)據(jù)壓縮和編碼

  • 使用數(shù)據(jù)壓縮和編碼技術(shù)來減小索引的存儲(chǔ)占用,提高數(shù)據(jù)傳輸效率。

通過以上策略和方法,可以有效提高Elasticsearch的高并發(fā)性能,確保它能夠應(yīng)對(duì)大規(guī)模和高負(fù)載的查詢請(qǐng)求,同時(shí)保持穩(wěn)定性和可伸縮性。要注意的是,性能調(diào)優(yōu)是一個(gè)持續(xù)的過程,需要根據(jù)實(shí)際需求和監(jiān)控?cái)?shù)據(jù)進(jìn)行不斷優(yōu)化和調(diào)整。文章來源地址http://www.zghlxwxcb.cn/news/detail-715706.html

到了這里,關(guān)于Elasticsearch架構(gòu)原理快速了解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ES(ElasticSearch)快速入門和集群搭建

    ES(ElasticSearch)快速入門和集群搭建

    ? ES作為一個(gè)索引及搜索服務(wù),對(duì)外提供豐富的REST接口,快速入門部分的實(shí)例使用kibana來測試,目的是對(duì)ES的使用方法及流程有個(gè)初步的認(rèn)識(shí)。 創(chuàng)建index 索引庫。包含若干相似結(jié)構(gòu)的 Document 數(shù)據(jù),相當(dāng)于數(shù)據(jù)庫的database。 語法: PUT /index_name 如: number_of_shards - 表示一個(gè)索引

    2024年02月07日
    瀏覽(18)
  • ElasticSearch架構(gòu)介紹及原理解析_elasticsearch+sqlserver架構(gòu)

    ElasticSearch架構(gòu)介紹及原理解析_elasticsearch+sqlserver架構(gòu)

    - 索引是一個(gè)包含多個(gè)文檔的數(shù)據(jù)庫,文檔是可搜索的數(shù)據(jù)單元。 ? ?- 索引可以被看作是關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)庫。 ? ?- 每個(gè)索引由多個(gè)分片(Shards)組成,分片是數(shù)據(jù)的物理副本。 ????????4. **分片(Shards)**: ? ?- 分片是索引的物理分割,用于提高數(shù)據(jù)的可擴(kuò)展性和

    2024年04月17日
    瀏覽(34)
  • ElasticSearch 快速上手教程(一)—— ES 的安裝

    ElasticSearch 快速上手教程(一)—— ES 的安裝

    ElasticSearch 是一個(gè)開源的搜索引擎,基于 Lucene 開發(fā)與構(gòu)建,是當(dāng)前流行的企業(yè)級(jí)搜索引擎,在許多應(yīng)用場景當(dāng)中都有使用,如商品全文檢索,書籍查詢等。在這個(gè)系列的文章,會(huì)帶你從零到一,快速上手 ElasticSearch 。這個(gè)系列的文章主要包括三部分,第一部分是安裝

    2024年02月08日
    瀏覽(18)
  • 【ES】Elasticsearch-深入理解索引原理

    【ES】Elasticsearch-深入理解索引原理

    索引(Index) ES將數(shù)據(jù)存儲(chǔ)于一個(gè)或多個(gè)索引中,索引是具有類似特性的文檔的集合。類比傳統(tǒng)的關(guān)系型數(shù)據(jù)庫領(lǐng)域來說,索引相當(dāng)于SQL中的一個(gè)數(shù)據(jù)庫,或者一個(gè)數(shù)據(jù)存儲(chǔ)方案(schema)。索引由其名稱(必須為全小寫字符)進(jìn)行標(biāo)識(shí),并通過引用此名稱完成文檔的創(chuàng)建、搜索、更新

    2024年02月04日
    瀏覽(24)
  • ElasticSearch第八講 ES索引字段映射類型以及動(dòng)態(tài)映射相關(guān)操作

    ElasticSearch第八講 ES索引字段映射類型以及動(dòng)態(tài)映射相關(guān)操作

    ES的映射:映射就是 Mapping,它用來定義一個(gè)文檔以及文檔所包含的字段該如何被存儲(chǔ)和索引。所以,它其實(shí)有點(diǎn)類似于關(guān)系型數(shù)據(jù)庫中表的定義。其中ES中映射可以分為動(dòng)態(tài)映射和靜態(tài)映射,靜態(tài)映射就是提前創(chuàng)建好對(duì)應(yīng)字段文檔映射關(guān)系,如果插入的類型不對(duì)會(huì)出錯(cuò),而動(dòng)

    2024年02月10日
    瀏覽(26)
  • 深入了解Elasticsearch搜索引擎篇:倒排索引、架構(gòu)設(shè)計(jì)與優(yōu)化策略

    深入了解Elasticsearch搜索引擎篇:倒排索引、架構(gòu)設(shè)計(jì)與優(yōu)化策略

    倒排索引是一種用于快速檢索的數(shù)據(jù)結(jié)構(gòu),常用于搜索引擎和數(shù)據(jù)庫中。與傳統(tǒng)的正排索引不同,倒排索引是根據(jù)來建立索引,而不是根據(jù)文檔ID。 倒排索引的建立過程如下:首先,將每個(gè)文檔拆分成一系列的或詞項(xiàng),然后建立一個(gè)詞項(xiàng)到文檔的映射。對(duì)每個(gè)關(guān)

    2024年02月12日
    瀏覽(40)
  • Elasticsearch、Kibana以及Java操作ES 的快速使用

    Elasticsearch、Kibana以及Java操作ES 的快速使用

    ? 創(chuàng)建docker自定義網(wǎng)絡(luò) docker自定義網(wǎng)絡(luò)可以使得 容器之間使用容器名網(wǎng)絡(luò)互連 ,默認(rèn)的網(wǎng)絡(luò)不會(huì)有這功能。 一定要配置自定義網(wǎng)絡(luò),并將兩個(gè)容器同時(shí)加到網(wǎng)絡(luò)中,否則下面的 http://es:9200 會(huì)無法訪問到es ? 啟動(dòng)elastic search、kibana容器 啟動(dòng) elastic search容器 訪問 http://192.168

    2024年02月09日
    瀏覽(26)
  • Elasticsearch架構(gòu)原理

    Elasticsearch架構(gòu)原理

    1、Elasticsearch的節(jié)點(diǎn)類型 在Elasticsearch主要分成兩類節(jié)點(diǎn),一類是Master,一類是DataNode。 1.1 Master節(jié)點(diǎn) 在Elasticsearch啟動(dòng)時(shí),會(huì)選舉出來一個(gè)Master節(jié)點(diǎn)。當(dāng)某個(gè)節(jié)點(diǎn)啟動(dòng)后,然后使用Zen Discovery機(jī)制找到集群中的其他節(jié)點(diǎn),建立連接,并從候選主節(jié)點(diǎn)中選舉出一個(gè)主節(jié)點(diǎn)。 Master節(jié)

    2024年04月10日
    瀏覽(29)
  • ElasticSearch集群架構(gòu)原理

    ElasticSearch集群架構(gòu)原理

    1、Elasticsearch的節(jié)點(diǎn)類型 在Elasticsearch主要分成兩類節(jié)點(diǎn),一類是Master(主節(jié)點(diǎn)),一類是DataNode(數(shù)據(jù)節(jié)點(diǎn)),還有一種叫客戶端節(jié)點(diǎn)。 在配置文件中體現(xiàn)為: ????????主節(jié)點(diǎn) 選舉資格 :node.master:true ????????數(shù)據(jù)節(jié)點(diǎn) 選舉資格 : node.data: true 默認(rèn)兩個(gè)配置都為true,代表

    2024年02月01日
    瀏覽(23)
  • 文檔存儲(chǔ)Elasticsearch系列--2 ES內(nèi)部原理

    文檔存儲(chǔ)Elasticsearch系列--2 ES內(nèi)部原理

    前言:ES作為nosql 的數(shù)據(jù)存儲(chǔ),為什么它在承載PB級(jí)別的數(shù)據(jù)的同時(shí),又可以對(duì)外提高近實(shí)時(shí)的高效搜索,它又是通過什么算法完成對(duì)文檔的相關(guān)性分析;又是怎么保證聚合的高效性; 1 ES 分布式文檔存儲(chǔ): 1.1 文檔存儲(chǔ): 所謂分布式文檔存儲(chǔ),就是我們?cè)谙隕S存入數(shù)據(jù)時(shí),

    2024年02月11日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包