這篇具有很好參考價(jià)值的文章主要介紹了ES 的分布式架構(gòu)原理能說一下么(ES 是如何實(shí)現(xiàn)分布式的?。??。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。
目錄
一、面試官心理分析
二、面試題剖析
一、面試官心理分析
????????在搜索這塊,lucene
是最流行的搜索庫(kù)。幾年前業(yè)內(nèi)一般都問,你了解
lucene
嗎?你知道倒排索引的原理嗎?現(xiàn)在早已經(jīng) out
了,因?yàn)楝F(xiàn)在很多項(xiàng)目都是直接用基于
lucene
的分布式搜索引 擎—— ElasticSearch
,簡(jiǎn)稱為
ES
。
????????而現(xiàn)在分布式搜索基本已經(jīng)成為大部分互聯(lián)網(wǎng)行業(yè)的 Java
系統(tǒng)的標(biāo)配,其中尤為流行的就是 ES,前幾年
ES
沒火的時(shí)候,大家一般用
solr
。但是這兩年基本大部分企業(yè)和項(xiàng)目都開始轉(zhuǎn)向 ES 了。
????????所以互聯(lián)網(wǎng)面試,肯定會(huì)跟你聊聊分布式搜索引擎,也就一定會(huì)聊聊 ES
,如果你確實(shí)不知道,那你真的就 out
了。
????????如果面試官問你第一個(gè)問題,確實(shí)一般都會(huì)問你 ES
的分布式架構(gòu)設(shè)計(jì)能介紹一下么?就看看 你對(duì)分布式搜索引擎架構(gòu)的一個(gè)基本理解。 ???
二、面試題剖析
????????ElasticSearch 設(shè)計(jì)的理念就是分布式搜索引擎,底層其實(shí)還是基于
lucene
的。核心思想就是在多臺(tái)機(jī)器上啟動(dòng)多個(gè) ES
進(jìn)程實(shí)例,組成了一個(gè)
ES
集群。
????????ES 中存儲(chǔ)數(shù)據(jù)的
基本單位是索引
,比如說你現(xiàn)在要在
ES
中存儲(chǔ)一些訂單數(shù)據(jù),你就應(yīng)該在 ES 中創(chuàng)建一個(gè)索引
order_idx
,所有的訂單數(shù)據(jù)就都寫到這個(gè)索引里面去,一個(gè)索引差不多就是相當(dāng)于是 mysql
里的一張表。(
index -> type -> mapping -> document -> field)
????????這樣吧,為了做個(gè)更直白的介紹,我在這里做個(gè)類比。但是切記,不要?jiǎng)澋忍?hào),類比只是為了便于理解。
????????index 相當(dāng)于
mysql
里的一張表。而
type
沒法跟
mysql
里去對(duì)比,一個(gè)
index
里可以有多個(gè)
type
,每個(gè)
type
的字段都是差不多的,但是有一些略微的差別。假設(shè)有一個(gè)
index
,是訂單 index,里面專門是放訂單數(shù)據(jù)的。就好比說你在
mysql 中建表,有些訂單是實(shí)物商品的訂單,比如一件衣服、一雙鞋子;有些訂單是虛擬商品的訂單,比如游戲點(diǎn)卡,話費(fèi)充值。就兩種訂單大部分字段是一樣的,但是少部分字段可能有略微的一些差別。
所以就會(huì)在訂單
index
里,建兩個(gè)
type
,一個(gè)是實(shí)物商品訂單
type
,一個(gè)是虛擬商品訂單?type,這兩個(gè)
type
大部分字段是一樣的,少部分字段是不一樣的。
????????很多情況下,一個(gè) index
里可能就一個(gè)
type
,但是確實(shí)如果說是一個(gè)
index
里有多個(gè)
type
的情況(
注意
,
mapping types
這個(gè)概念在
ElasticSearch 7. X
已被完全移除,詳細(xì)說明可以參考
官方文檔
),你可以認(rèn)為
index
是一個(gè)類別的表,具體的每個(gè)
type
代表了
mysql
中的一個(gè)表。每個(gè) type
有一個(gè)
mapping
,如果你認(rèn)為一個(gè)
type
是具體的一個(gè)表,
index
就代表多個(gè)
type
同屬于的一個(gè)類型,而 mapping
就是這個(gè)
type
的
表結(jié)構(gòu)定義
,你在
mysql
中創(chuàng)建一個(gè)表,肯定是要定義表結(jié)構(gòu)的,里面有哪些字段,每個(gè)字段是什么類型。實(shí)際上你往 index
里的一個(gè)
type里面寫的一條數(shù)據(jù),叫做一條 document
,一條
document
就代表了
mysql
中某個(gè)表里的一行,每個(gè) document
有多個(gè)
field
,每個(gè)
field
就代表了這個(gè)
document
中的一個(gè)字段的值。
文章來源:http://www.zghlxwxcb.cn/news/detail-839959.html
????????你搞一個(gè)索引,這個(gè)索引可以拆分成多個(gè)
shard
,每個(gè)
shard
存儲(chǔ)部分?jǐn)?shù)據(jù)。拆分多個(gè)
shard
是有好處的,一是
支持橫向擴(kuò)展
,比如你數(shù)據(jù)量是
3T
,
3
個(gè)
shard
,每個(gè)
shard
就
1T
的數(shù)據(jù),若現(xiàn)在數(shù)據(jù)量增加到 4T
,怎么擴(kuò)展,很簡(jiǎn)單,重新建一個(gè)有
4
個(gè)
shard
的索引,將數(shù)據(jù)導(dǎo)進(jìn) 去;二是
提高性能
,數(shù)據(jù)分布在多個(gè)
shard
,即多臺(tái)服務(wù)器上,所有的操作,都會(huì)在多臺(tái)機(jī)器上并行分布式執(zhí)行,提高了吞吐量和性能。、
????????接著就是這個(gè) shard
的數(shù)據(jù)實(shí)際是有多個(gè)備份,就是說每個(gè)
shard
都有一個(gè)
primary shard
,負(fù)責(zé)寫入數(shù)據(jù),但是還有幾個(gè)
replica shard
。
primary shard
寫入數(shù)據(jù)之后,會(huì)將數(shù)據(jù)同步到其他幾個(gè)
replica shard
上去。
文章來源地址http://www.zghlxwxcb.cn/news/detail-839959.html
????????通過這個(gè) replica
的方案,每個(gè)
shard
的數(shù)據(jù)都有多個(gè)備份,如果某個(gè)機(jī)器宕機(jī)了,沒關(guān)系啊,還有別的數(shù)據(jù)副本在別的機(jī)器上呢。高可用了吧。
????????ES 集群多個(gè)節(jié)點(diǎn),會(huì)自動(dòng)選舉一個(gè)節(jié)點(diǎn)為
master
節(jié)點(diǎn),這個(gè)
master
節(jié)點(diǎn)其實(shí)就是干一些管理的工作的,比如維護(hù)索引元數(shù)據(jù)、負(fù)責(zé)切換 primary shard
和
replica shard
身份等。要是 master 節(jié)點(diǎn)宕機(jī)了,那么會(huì)重新選舉一個(gè)節(jié)點(diǎn)為
master
節(jié)點(diǎn)。
????????如果是非 master
節(jié)點(diǎn)宕機(jī)了,那么會(huì)由
master
節(jié)點(diǎn),讓那個(gè)宕機(jī)節(jié)點(diǎn)上的
primary shard
的身份轉(zhuǎn)移到其他機(jī)器上的 replica shard
。接著你要是修復(fù)了那個(gè)宕機(jī)機(jī)器,重啟了之后,
master 節(jié)點(diǎn)會(huì)控制將缺失的 replica shard
分配過去,同步后續(xù)修改的數(shù)據(jù)之類的,讓集群恢復(fù)正常。
????????說得更簡(jiǎn)單一點(diǎn),就是說如果某個(gè)非 master
節(jié)點(diǎn)宕機(jī)了。那么此節(jié)點(diǎn)上的
primary shard
不就沒了。那好,master
會(huì)讓
primary shard
對(duì)應(yīng)的
replica shard
(在其他機(jī)器上)切換為
primary
shard
。如果宕機(jī)的機(jī)器修復(fù)了,修復(fù)后的節(jié)點(diǎn)也不再是
primary shard
,而是
replica shard
。
????????其實(shí)上述就是 ElasticSearch
作為分布式搜索引擎最基本的一個(gè)架構(gòu)設(shè)計(jì)。
ps:一個(gè)點(diǎn)贊一份愛,點(diǎn)個(gè)關(guān)注不迷路!
到了這里,關(guān)于ES 的分布式架構(gòu)原理能說一下么(ES 是如何實(shí)現(xiàn)分布式的?。??的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!
本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(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í),立即刪除!