ElasticSearch

1.為什么要使用Elasticsearch?

  因為在我們商城中的數(shù)據(jù),將來會非常多,所以采用以往的模糊查詢,模糊查詢前置配置,會放棄索引,導致商品查詢是全表掃面,在百萬級別的數(shù)據(jù)庫中,效率非常低下,而我們使用ES做一個全文索引,我們將經(jīng)常查詢的商品的某些字段,比如說商品名,描述、價格還有id這些字段我們放入我們索引庫里,可以提高查詢速度。

2.Elasticsearch是如何實現(xiàn)Master選舉的?

Elasticsearch的選主是ZenDiscovery模塊負責的,主要包含Ping(節(jié)點之間通過這個RPC來發(fā)現(xiàn)彼此)和Unicast(單播模塊包含一個主機列表以控制哪些節(jié)點需要ping通)這兩部分;

對所有可以成為master的節(jié)點(node.master: true)根據(jù)nodeId字典排序,每次選舉每個節(jié)點都把自己所知道節(jié)點排一次序,然后選出第一個(第0位)節(jié)點,暫且認為它是master節(jié)點。

如果對某個節(jié)點的投票數(shù)達到一定的值(可以成為master節(jié)點數(shù)n/2+1)并且該節(jié)點自己也選舉自己,那這個節(jié)點就是master。否則重新選舉一直到滿足上述條件。

補充:master節(jié)點的職責主要包括集群、節(jié)點和索引的管理,不負責文檔級別的管理;data節(jié)點可以關(guān)閉http功能。

3.Elasticsearch中的節(jié)點(比如共20個),其中的10個選了一個master,另外10個選了另一個master,怎么辦?

當集群master候選數(shù)量不小于3個時,可以通過設(shè)置最少投票通過數(shù)量(discovery.zen.minimum_master_nodes)超過所有候選節(jié)點一半以上來解決腦裂問題;

當候選數(shù)量為兩個時,只能修改為唯一的一個master候選,其他作為data節(jié)點,避免腦裂問題。

es 寫數(shù)據(jù)過程

客戶端選擇一個 node 發(fā)送請求過去,這個 node 就是?coordinating node(協(xié)調(diào)節(jié)點)。

coordinating node?對 document 進行路由,將請求轉(zhuǎn)發(fā)給對應的 node(有 primary shard)。[路由的算法是?]

實際的 node 上的?primary shard?處理請求,然后將數(shù)據(jù)同步到?replica node。

coordinating node?如果發(fā)現(xiàn)?primary node?和所有?replica node?都搞定之后,就返回響應結(jié)果給客戶端。


es 讀數(shù)據(jù)過程

可以通過?doc id?來查詢,會根據(jù)?doc id?進行 hash,判斷出來當時把?doc id?分配到了哪個 shard 上面去,從那個 shard 去查詢。

客戶端發(fā)送請求到任意一個 node,成為?coordinate node。

coordinate node?對?doc id?進行哈希路由,將請求轉(zhuǎn)發(fā)到對應的 node,此時會使用?round-robin隨機輪詢算法,在?primary shard?以及其所有 replica 中隨機選擇一個,讓讀請求負載均衡。

接收請求的 node 返回 document 給?coordinate node。

coordinate node?返回 document 給客戶端。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容