分布式搜索的面試題1


 

1、面試題

 

es分布式架構原理能說一下么(es如何實現分布式的啊)?

 

2、面試官心里分析

 

在搜索這塊,lucene是最流行的搜索庫。幾年前業內一般都問,你了解lucene嗎?你知道倒排索引的原理嗎?現在早已經out了,因為現在很多項目都是直接用基於lucene的分布式搜索引擎——elasticsearch,簡稱為es

 

而現在分布式搜索基本已經成為大部分互聯網行業的java系統的標配,其中尤為流行的就是es,前幾年es沒火的時候,大家一般用solr。但是這兩年基本大部分企業和項目都開始轉向es了。

 

所以互聯網面試,肯定會跟你聊聊分布式搜索引擎,也就一定會聊聊es,如果你確實不知道,那你真的就out了。

 

如果面試官問你第一個問題,確實一般都會問你es的分布式架構設計能介紹一下么?就看看你對分布式搜索引擎架構的一個基本理解。

 

3、額外的友情提示

 

同學啊,如果你看到這里發現自己對es一無所知,沒事兒,保持淡定,暫停一下課程。然后上百度搜一下es是啥?本機啟動個es?然后寫個eshello world感受一下?然后搜個帖子把es常見的幾個操作都執行一遍(聚合、常見搜索語法之類的)?ok了,1~2小時熟悉足夠了,回來吧,繼續看我們的課程。

 

4、面試題剖析

 

elasticsearch設計的理念就是分布式搜索引擎,底層其實還是基於lucene的。

 

核心思想就是在多台機器上啟動多個es進程實例,組成了一個es集群。

 

es中存儲數據的基本單位是索引,比如說你現在要在es中存儲一些訂單數據,你就應該在es中創建一個索引,order_idx,所有的訂單數據就都寫到這個索引里面去,一個索引差不多就是相當於是mysql里的一張表。index -> type -> mapping -> document -> field

 

indexmysql里的一張表

 

type:沒法跟mysql里去對比,一個index里可以有多個type,每個type的字段都是差不多的,但是有一些略微的差別。

 

好比說,有一個index,是訂單index,里面專門是放訂單數據的。就好比說你在mysql中建表,有些訂單是實物商品的訂單,就好比說一件衣服,一雙鞋子;有些訂單是虛擬商品的訂單,就好比說游戲點卡,話費充值。就兩種訂單大部分字段是一樣的,但是少部分字段可能有略微的一些差別。

 

所以就會在訂單index里,建兩個type,一個是實物商品訂單type,一個是虛擬商品訂單type,這兩個type大部分字段是一樣的,少部分字段是不一樣的。

 

很多情況下,一個index里可能就一個type,但是確實如果說是一個index里有多個type的情況,你可以認為index是一個類別的表,具體的每個type代表了具體的一個mysql中的表

 

每個type有一個mapping,如果你認為一個type是一個具體的一個表,index代表了多個type的同屬於的一個類型,mapping就是這個type的表結構定義,你在mysql中創建一個表,肯定是要定義表結構的,里面有哪些字段,每個字段是什么類型。。。

 

mapping就代表了這個type的表結構的定義,定義了這個type中每個字段名稱,字段是什么類型的,然后還有這個字段的各種配置

 

實際上你往index里的一個type里面寫的一條數據,叫做一條document,一條document就代表了mysql中某個表里的一行給,每個document有多個field,每個field就代表了這個document中的一個字段的值

 

接着你搞一個索引,這個索引可以拆分成多個shard,每個shard存儲部分數據。

 

接着就是這個shard的數據實際是有多個備份,就是說每個shard都有一個primary shard,負責寫入數據,但是還有幾個replica shardprimary shard寫入數據之后,會將數據同步到其他幾個replica shard上去。

 

通過這個replica的方案,每個shard的數據都有多個備份,如果某個機器宕機了,沒關系啊,還有別的數據副本在別的機器上呢。高可用了吧。

 

es集群多個節點,會自動選舉一個節點為master節點,這個master節點其實就是干一些管理的工作的,比如維護索引元數據拉,負責切換primary shardreplica shard身份拉,之類的。

 

要是master節點宕機了,那么會重新選舉一個節點為master節點。

 

如果是非master節點宕機了,那么會由master節點,讓那個宕機節點上的primary shard的身份轉移到其他機器上的replica shard。急着你要是修復了那個宕機機器,重啟了之后,master節點會控制將缺失的replica shard分配過去,同步后續修改的數據之類的,讓集群恢復正常。

 

其實上述就是elasticsearch作為一個分布式搜索引擎最基本的一個架構設計

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM