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

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

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

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

[[281098]]

Elasticsearch雖然能從更強(qiáng)大的硬件中獲得更好的性能,但是縱向擴(kuò)展有它的局限性。真正的擴(kuò)展應(yīng)該是橫向的,它通過(guò)增加節(jié)點(diǎn)來(lái)均攤負(fù)載和增加可靠性。

對(duì)于大多數(shù)數(shù)據(jù)庫(kù)而言,橫向擴(kuò)展意味著你的程序?qū)⒆龇浅4蟮母膭?dòng)才能利用這些新添加的設(shè)備。對(duì)比來(lái)說(shuō),Elasticsearch天生就是分布式的:它知道如何管理節(jié)點(diǎn)來(lái)提供高擴(kuò)展和高可用。這意味著你的程序不需要關(guān)心這些。

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

添加索引

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

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

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

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

我們啟動(dòng)三個(gè)ES節(jié)點(diǎn),當(dāng)前hotel_idx 分配3個(gè)主分片(primary shard),每個(gè)主分片1個(gè)副本分片(replica shard)。 

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

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

  1. shard=hash(routing)%number_of_primary_shards 

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

2,寫(xiě)完P(guān)0后就會(huì)同步到他的副本R0中去,同步成功則會(huì)返回給協(xié)調(diào)節(jié)點(diǎn)Node1,最后返回Client

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

如何保證高可用

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

如何可擴(kuò)展

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

我們一般的做法是事先進(jìn)行預(yù)分配,通過(guò)事先規(guī)劃,我們可以使用 預(yù)分配 的方式來(lái)完全避免這個(gè)問(wèn)題。

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

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

如何預(yù)估分片容量

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

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

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

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

3,運(yùn)行實(shí)際的查詢(xún)和聚合(或者盡可能接近實(shí)際)。

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

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

 

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2019-05-30 09:22:06

5G網(wǎng)絡(luò)互聯(lián)網(wǎng)

2024-05-28 07:53:35

2023-11-07 08:13:53

分布式網(wǎng)絡(luò)

2023-05-29 14:07:00

Zuul網(wǎng)關(guān)系統(tǒng)

2022-08-28 09:05:34

分布式存儲(chǔ)Ceph

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式

2022-04-29 09:00:00

Platform架構(gòu)內(nèi)核線(xiàn)程

2016-11-02 12:06:27

分布式系統(tǒng)大數(shù)據(jù)

2022-10-09 09:57:39

物聯(lián)網(wǎng)IoT

2020-03-05 08:00:05

分布式事務(wù)數(shù)據(jù)庫(kù)

2022-06-21 08:27:22

Seata分布式事務(wù)

2020-04-14 11:14:02

PostgreSQL分布式數(shù)據(jù)庫(kù)

2018-01-30 09:07:36

Ceph分布式存儲(chǔ)

2020-07-06 14:53:24

分布式鎖系統(tǒng)單機(jī)鎖

2018-01-09 15:44:57

2015-05-14 10:23:13

ElasticSear分布式搜索配置文件

2024-03-18 00:00:01

分布式搜索引擎

2021-05-07 06:08:03

分布式框架NIO

2018-05-31 09:27:38

服務(wù)器架構(gòu)原理

2017-09-04 08:49:17

存儲(chǔ)原理架構(gòu)
點(diǎn)贊
收藏

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