自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深入淺出spring-data-elasticsearch之ElasticSearch架構(gòu)初探

企業(yè)動(dòng)態(tài)
簡(jiǎn)單初探了下 ElasticSearch 的相關(guān)內(nèi)容。后面會(huì)主要落地到實(shí)戰(zhàn),關(guān)于 spring-data-elasticsearch 這塊的實(shí)戰(zhàn)。

本文目錄

一、Elasticsearch 基本術(shù)語(yǔ)

1.1 文檔(Document)、索引(Index)、類型(Type)文檔三要素

1.2 集群(Cluster)、節(jié)點(diǎn)(Node)、分片(Shard)分布式三要素

二、Elasticsearch 工作原理

2.1 文檔存儲(chǔ)的路由

2.2 如何健康檢查

2.3 如何水平擴(kuò)容

三、小結(jié)

一、Elasticsearch 基本術(shù)語(yǔ)

1.1 文檔(Document)、索引(Index)、類型(Type)文檔三要素

文檔(Document)

文檔,在面向?qū)ο笥^念就是一個(gè)對(duì)象。在 ES 里面,是一個(gè)大 JSON 對(duì)象,是指定了唯一 ID 的***層或者根對(duì)象。文檔的位置由 _index、_type 和 _id 唯一標(biāo)識(shí)。

索引(Index)

索引,用于區(qū)分文檔成組,即分到一組的文檔集合。索引,用于存儲(chǔ)文檔和使文檔可被搜索。比如項(xiàng)目存索引 project 里面,交易存索引 sales 等。

類型(Type)

類型,用于區(qū)分索引中的文檔,即在索引中對(duì)數(shù)據(jù)邏輯分區(qū)。比如索引 project 的項(xiàng)目數(shù)據(jù),根據(jù)項(xiàng)目類型 ui 項(xiàng)目、插畫項(xiàng)目等進(jìn)行區(qū)分。

和關(guān)系型數(shù)據(jù)庫(kù) MySQL 做個(gè)類比:

Document 類似于 Record

Type 類似于 Table

Index 類似于 Database

1.2 集群(Cluster)、節(jié)點(diǎn)(Node)、分片(Shard)分布式三要素

集群(Cluster)

服務(wù)器集群大家都知道,這里 ES 也是類似的。多個(gè) ElasticSearch 運(yùn)行實(shí)例(節(jié)點(diǎn))組合的組合體是 ElasticSearch 集群。

ElasticSearch 是天然的分布式,通過(guò)水平擴(kuò)容為集群添加更多節(jié)點(diǎn)。

集群是去中心化的,有一個(gè)主節(jié)點(diǎn)(Master)。主節(jié)點(diǎn)是動(dòng)態(tài)選舉,因此不會(huì)出現(xiàn)單點(diǎn)故障。

那分片和節(jié)點(diǎn)的配置呢?

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

一個(gè) ElasticSearch 運(yùn)行實(shí)例就是節(jié)點(diǎn)。順著集群來(lái),任何節(jié)點(diǎn)都可以被選舉成為主節(jié)點(diǎn)。主節(jié)點(diǎn)負(fù)責(zé)集群內(nèi)所以變更,比如索引的增加、刪除等。所以集群不會(huì)因?yàn)橹鞴?jié)點(diǎn)流量的增大成為瓶頸。因?yàn)槿魏喂?jié)點(diǎn)都會(huì)成為主節(jié)點(diǎn)。

下面有 3 個(gè)節(jié)點(diǎn),第 1 個(gè)節(jié)點(diǎn)有:2 個(gè)主分片和 1 個(gè)副分片。如圖:

那么,只有一個(gè)節(jié)點(diǎn)的 ElasticSearch 服務(wù)會(huì)存在瓶頸。如圖:

分片(Shard)

分片,是 ES 節(jié)點(diǎn)中最小的工作單元。分片僅僅保存全部數(shù)據(jù)的一部分,分片的集合是 ES 的索引。分片包括主分片和副分片,主分片是副分片的拷貝。主分片和副分片地工作基本沒(méi)有大的區(qū)別。

在索引中全文搜索,然后會(huì)查詢到每個(gè)分片,將每個(gè)分配的結(jié)果進(jìn)行全局地收集處理,并返回。

二、Elasticsearch 工作原理

2.1 文檔存儲(chǔ)的路由

當(dāng)索引到一個(gè)文檔(如:報(bào)價(jià)系統(tǒng)),具體的文檔數(shù)據(jù)(如:報(bào)價(jià)數(shù)據(jù))會(huì)存儲(chǔ)到一個(gè)分片。具體文檔數(shù)據(jù)會(huì)被切分,并分別存儲(chǔ)在分片 1 或者 分片 2 …

那么如何確定存在哪個(gè)分片呢?

存儲(chǔ)路由過(guò)程由下面地公式?jīng)Q定:

  1. shard = hash(routing) % number_of_primary_shards 

routing 是可變值,支持自定義,默認(rèn)文檔 _id。

hash 函數(shù)生成數(shù)字,經(jīng)過(guò)取余算法得到余數(shù),那么這個(gè)余數(shù)就是分片的位置。

這是不是有點(diǎn)負(fù)載均衡的類似。

2.2 如何健康檢查

集群名,集群的健康狀態(tài)

  1. GET http://127.0.0.1:9200/_cluster/stats {   "cluster_name":          "elasticsearch",   "status":                "green",  
  2.    "timed_out":             false,   "number_of_nodes":       1,   "number_of_data_nodes":  1,   "active_primary_shards": 0,   "active_shards":         0,   "relocating_shards":     0,   "initializing_shards":   0,   "unassigned_shards":     0} 

status 字段是需要我們關(guān)心的。狀態(tài)可能是下列三個(gè)值之一:

  • green所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
  • yellow
  • 所有的主分片已經(jīng)分片了,但至少還有一個(gè)副本是缺失的。不會(huì)有數(shù)據(jù)丟失,所以搜索結(jié)果依然是完整的。高可用會(huì)弱化把 yellow 想象成一個(gè)需要及時(shí)調(diào)查的警告。
  • red
  • 至少一個(gè)主分片(以及它的全部副本)都在缺失中。這意味著你在缺少數(shù)據(jù):搜索只能返回部分?jǐn)?shù)據(jù),而分配到這個(gè)分片上的寫入請(qǐng)求會(huì)返回一個(gè)異常。

active_primary_shards 集群中的主分片數(shù)量

active_shards 所有分片的匯總值

relocating_shards 顯示當(dāng)前正在從一個(gè)節(jié)點(diǎn)遷往其他節(jié)點(diǎn)的分片的數(shù)量。通常來(lái)說(shuō)應(yīng)該是 0,不過(guò)在 Elasticsearch 發(fā)現(xiàn)集群不太均衡時(shí),該值會(huì)上漲。比如說(shuō):添加了一個(gè)新節(jié)點(diǎn),或者下線了一個(gè)節(jié)點(diǎn)。

initializing_shards 剛剛創(chuàng)建的分片的個(gè)數(shù)。

unassigned_shards 已經(jīng)在集群狀態(tài)中存在的分片。

2.3 如何水平擴(kuò)容

主分片在索引創(chuàng)建已經(jīng)確定。讀操作可以同時(shí)被主分片和副分片處理。因此,更多的分片,會(huì)擁有更高的吞吐量。自然,需要增加更多的硬件資源支持吞吐量。

說(shuō)明,這里無(wú)法提高性能,因?yàn)槊總€(gè)分片獲得的資源會(huì)變少。

動(dòng)態(tài)調(diào)整副本分片數(shù),按需伸縮集群,比如把副本數(shù)默認(rèn)值為 1 增加到 2:

  1. PUT /blogs/_settings 
  2. "number_of_replicas" : 2} 

三、小結(jié)

簡(jiǎn)單初探了下 ElasticSearch 的相關(guān)內(nèi)容。后面會(huì)主要落地到實(shí)戰(zhàn),關(guān)于 spring-data-elasticsearch 這塊的實(shí)戰(zhàn)。

【本文為51CTO專欄作者“李強(qiáng)強(qiáng)”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)51CTO聯(lián)系作者獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專欄
相關(guān)推薦

2017-06-20 15:20:54

spring-data案例詳解

2017-06-14 10:53:58

spring-data快速入門

2022-01-12 08:54:52

Spring編程架構(gòu)設(shè)計(jì)

2025-03-27 09:38:35

2009-11-17 17:31:58

Oracle COMM

2011-01-27 10:11:46

J2EEjavaspring

2009-11-18 13:30:37

Oracle Sequ

2011-07-04 10:39:57

Web

2021-03-16 08:54:35

AQSAbstractQueJava

2013-11-14 15:53:53

AndroidAudioAudioFlinge

2020-05-27 20:25:47

SpringSpringBoot數(shù)據(jù)

2022-09-26 09:01:15

語(yǔ)言數(shù)據(jù)JavaScript

2013-09-16 09:56:29

TCP協(xié)議網(wǎng)絡(luò)協(xié)議send

2017-07-02 18:04:53

塊加密算法AES算法

2019-01-07 15:29:07

HadoopYarn架構(gòu)調(diào)度器

2021-07-20 15:20:02

FlatBuffers阿里云Java

2012-05-21 10:06:26

FrameworkCocoa

2017-07-17 11:52:54

jQuery源碼分析前端框架類庫(kù)

2022-01-13 09:38:25

Android架構(gòu)設(shè)計(jì)

2022-09-29 09:19:04

線程池并發(fā)線程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)