日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Elasticsearch分布式架構(gòu)原理,我們真的需要知道,很重要

ElasticSearch分布式架構(gòu)原理,我們真的需要知道,很重要

作者:架構(gòu)師修煉 2019-11-04 08:54:53

開發(fā)

架構(gòu)

服務器

分布式 Elasticsearch用于構(gòu)建高可用和可擴展的系統(tǒng)。擴展的方式可以是購買更好的服務器(縱向擴展(vertical scale or scaling up))或者購買更多的服務器(橫向擴展(horizontal scale or scaling out))。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供松嶺網(wǎng)站建設、松嶺做網(wǎng)站、松嶺網(wǎng)站設計、松嶺網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、松嶺企業(yè)網(wǎng)站模板建站服務,十余年松嶺做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

Elasticsearch用于構(gòu)建高可用和可擴展的系統(tǒng)。擴展的方式可以是購買更好的服務器(縱向擴展(vertical scale or scaling up))或者購買更多的服務器(橫向擴展(horizontal scale or scaling out))。

Elasticsearch雖然能從更強大的硬件中獲得更好的性能,但是縱向擴展有它的局限性。真正的擴展應該是橫向的,它通過增加節(jié)點來均攤負載和增加可靠性。

對于大多數(shù)數(shù)據(jù)庫而言,橫向擴展意味著你的程序?qū)⒆龇浅4蟮母膭硬拍芾眠@些新添加的設備。對比來說,Elasticsearch天生就是分布式的:它知道如何管理節(jié)點來提供高擴展和高可用。這意味著你的程序不需要關心這些。

ES 如何實現(xiàn)分布式

添加索引

es 中存儲數(shù)據(jù)的基本單位是索引,我們?yōu)榱藢?shù)據(jù)添加到ES中,就需要添加索引(index)

這里需要說一下ES中索引與分片(shard)的關系:一個分片(shard)是一個最小級別“工作單元(worker unit)”,它只是保存了索引中所有數(shù)據(jù)的一部分;所有的文檔均存在分片中,而直接與應用程序進行交互的再而三索引。

下面我們以酒店搜索為例,添加所有酒店索引hotel_idx

  
 
 
 
  1. PUT /hotel_idx  
  2. {  
  3. "settings" : {  
  4. "number_of_shards" : 3,  
  5. "number_of_replicas" : 1  
  6. }  

我們啟動三個ES節(jié)點,當前hotel_idx 分配3個主分片(primary shard),每個主分片1個副本分片(replica shard)。 

1,ES Client 會挑一個Node,上面挑選了NODE1,則成為協(xié)調(diào)節(jié)點,進行寫入數(shù)據(jù),此時ES怎么才能知道將一個文檔(一條酒店數(shù)據(jù))路由到哪個分片中呢,實際上,他是根據(jù)這個公式:

  
 
 
 
  1. shard=hash(routing)%number_of_primary_shards 

routing 是一個可變值,默認是文檔的 _id ,也可以設置成一個自定義的值,這里可以是酒店的hotel_id。routing 通過 hash 函數(shù)生成一個數(shù)字,然后這個數(shù)字再除以 number_of_primary_shards (主分片的數(shù)量)后得到 余數(shù) 。這個分布在 0 到 number_of_primary_shards-1 之間的余數(shù),就是我們所尋求的文檔所在分片的位置。

2,寫完P0后就會同步到他的副本R0中去,同步成功則會返回給協(xié)調(diào)節(jié)點Node1,最后返回Client

3,ES client讀取數(shù)據(jù)均可以讀取主副分片

如何保證高可用

  • 如上NODE1-master節(jié)點宕機了,ES則會進行重新選舉(如果需要后面考慮分享一下分布式選舉專題),假如選了NODE2為master。
  • 如果是非master宕機(node2),master節(jié)點node1則會將Node3的R1副本轉(zhuǎn)為主分片P1接收寫操作,如果NODE2恢復了,則之前的P1轉(zhuǎn)為R1副本。

如何可擴展

ES在創(chuàng)建索引時就需要指定主分片的數(shù)量,所以主分片指定了是不能再擴充的,當存儲容量超過了目前的ES節(jié)點,一般有些生產(chǎn)做法是,重新再建立了新索引比目前多一點shard,然后導入數(shù)據(jù),但這種也是有些缺點的:這樣做將消耗的時間是我們無法提供的;

我們一般的做法是事先進行預分配,通過事先規(guī)劃,我們可以使用 預分配 的方式來完全避免這個問題。

其中,副本分片是可以動態(tài)擴展的,在讀取很大的場景下,適當?shù)臄U充副本會增加吞吐量。

  
 
 
 
  1. PUT /hotel_idx/_settings  
  2.  "number_of_replicas" : 2  

如何預估分片容量

其實這個是不好解釋的,因為實在有太多相關的因素了:你使用的硬件、文檔的大小和復雜度、文檔的索引分析方式、運行的查詢類型、執(zhí)行的聚合以及你的數(shù)據(jù)模型等等。

生產(chǎn)中經(jīng)驗建議:

1,基于你準備用于生產(chǎn)環(huán)境的硬件創(chuàng)建一個擁有單個節(jié)點的集群。

2,創(chuàng)建一個和你準備用于生產(chǎn)環(huán)境相同配置和分析器的索引,但讓它只有一個主分片無副本分片。索引實際的文檔(或者盡可能接近實際)。

3,運行實際的查詢和聚合(或者盡可能接近實際)。

基本來說,你需要復制真實環(huán)境的使用方式并將它們?nèi)繅嚎s到單個分片上直到它“掛掉。” 實際上 掛掉 的定義也取決于你:一些用戶需要所有響應在 50 毫秒內(nèi)返回;另一些則樂于等上 5 秒鐘。

所以,一旦你定義好了單個分片的容量,很容易就可以推算出整個索引的分片數(shù)。用你需要索引的數(shù)據(jù)總數(shù)加上一部分預期的增長,除以單個分片的容量,結(jié)果就是你需要的主分片個數(shù)。


當前文章:Elasticsearch分布式架構(gòu)原理,我們真的需要知道,很重要
轉(zhuǎn)載源于:http://www.dlmjj.cn/article/dpdocde.html