分布式 ES 操作流程解析

2022-03-27 04:14:51 字數 2847 閱讀 6134

curd 操作都是針對具體的某個或某些文件的操作,每個文件的 routing 都是確認的,所以其所在分片也是可以事先確定的。該過程對應 es 的 document api。

搜尋操作是指通過查詢條件從 es 中獲取匹配的文件的過程,搜尋前不知道哪個文件會匹配查詢。該過程對應 es 的 search api。

分片的確定,都是由路由來完成的,具體計算公式如下:

shard = hash(routing) % number_of_primary_shards
新建、索引和刪除請求都是寫(write)操作,它們必須在主分片上成功完成才能複製到相關的複製分片上。並且要等所有複製分片完成後才向請求節點返回。

在主分片和複製分片上成功新建、索引或刪除乙個文件必要的順序步驟:

客戶端接收到成功響應的時候,文件的修改已經被應用於主分片和所有的複製分片。

由於要主分片和複製分片都成功後才返回成功,所以寫操作是比較耗時的。

replication:

replication 預設為 sync。也就是要等所有複製分片都操作完後才返回。

設定為 async 執行在主分片操作完成後即返回。

檢索文件為讀(read)操作,請求只需分片的任意乙個副本返回操作結果即完成。

在主分片或複製分片上檢索乙個文件必要的順序步驟:

對於讀請求,為了平衡負載,協調節點會為每個分片的請求選擇不同的副本——它會迴圈所有分片副本。

更新過程整體流程就是 「讀」 + 「寫」 操作。

執行更新必要的順序步驟:

批量檢索(mget)和批量新建、索引、更新、刪除(bulk)操作和單個文件的操作過程類似。

區別在於協調節點知道所有文件所在的分片,並將請求的文件根據所在的分片來分組。然後同時請求需要的節點。

一旦收到所有節點的響應,協調節點再將這多個節點的響應組合成乙個響應結果返回給客戶端。

mget 操作

mget操作過程基本步驟:

bulk操作

bulk操作過程基本步驟:

文件的 crud 操作一次只處理乙個單獨的文件(批量操作也是單個執行)。crud 操作中,文件的唯一性由 _index , _type 和 routing (通常預設是該文件的 _id )的組合來確定。這意味著我們可以準確知道集群中的哪個分片有這個文件。

搜尋過程,由於不知道哪個文件會匹配查詢(文件可能存放在集群中的任意分片上),所以搜尋需要乙個更複雜的模型。搜尋通過查詢每乙個我們感興趣的索引的分片副本,來看是否含有任何匹配的文件。

搜尋的執行過程分兩個階段,稱為查詢然後取回(query then fetch)。

1. 客戶端傳送乙個 search(搜尋) 請求給 node 3 , node 3 建立了乙個長度為 from+size 的空優先順序佇列。

2. node 3 **這個搜尋請求到索引中每個分片的原本或副本。搜尋請求可以被每個分片的原本或任意副本處理。

(並非所有副本都處理同樣的請求,而是輪詢處理不同的請求,所以多副本能夠提高吞吐)

3. 每個分片在本地執行這個查詢並且結果將結果到乙個大小為 from+size 的有序本地優先佇列裡去。

4. 每個分片返回document的id和它優先佇列裡的所有document的排序值給協調節點 node 3 。 node 3 把這些值合併到自己的優先佇列裡產生全域性排序結果。

5. 對於多(multiple)或全部(all)索引的搜尋的工作機制和這完全一致——僅僅是多了一些分片而已。

查詢階段辨別出那些滿足搜尋請求的document,但我們仍然需要取回那些document本身。這就是取回階段的工作。

1. 協調節點(請求節點)辨別出哪個document需要取回(比如只取前100項),並且向相關分片發出 get 請求。

2. 每個分片載入document並且根據需要豐富(enrich)它們,然後再將document返回協調節點。

3. 一旦所有的document都被取回,協調節點會將結果返回給客戶端。

1. preference:

preference 引數允許你控制使用哪個分片或節點來處理搜尋請求。她接受如下一些引數 _primary , _primary_first ,_local , _only_node:xyz , _prefer_node:xyz 和 _shards:2,3

2. timeout:

通常,協調節點會等待接收所有分片的回答。如果有乙個節點遇到問題,它會拖慢整個搜尋請求。timeout 引數告訴協調節點最多等待多久,就可以放棄等待而將已有結果返回。

3. routing:

指定乙個或多個 routing 值來限制只搜尋那些分片而不是搜尋index裡的全部分片。

4. search_type:

分布式 Git 分布式工作流程

同傳統的集中式版本控制系統 cvcs 不同,開發者之間的協作方式因著 git 的分布式特性而變得更為靈活多樣。在集中式系統上,每個開發者就像是連線在集線器上的節點,彼此的工作方式大體相像。而在 git 網路中,每個開發者同時扮演著節點和集線器的角色,這就是說,每乙個開發者都可以將自己的 貢獻到另外乙...

分布式 Git 分布式工作流程

你現在擁有了乙個遠端 git 版本庫,能為所有開發者共享 提供服務,在乙個本地工作流程下,你也已經熟悉了基本 git 命令。你現在可以學習如何利用 git 提供的一些分布式工作流程了。這一章中,你將會學習如何作為貢獻者或整合者,在乙個分布式協作的環境中使用 git。你會學習為乙個專案成功地貢獻 並接...

ES分布式文件系統

es在分配單個索引的分片時會將每個分片盡可能分配到更多的節點上。但是,實際情況取決於集群擁有的分片和索引的數量以及它們的大小,不一定總是能均勻地分布。es不允許primary和它的replica放在同乙個節點中,並且同乙個節點不接受完全相同的兩個replica 同乙個節點允許多個索引的分片同時存在。...