系列文字 Elasticsearch集群架構(gòu)&&如何保證分片數(shù)據(jù)一致性
本文主要分享ES的數(shù)據(jù)查詢(xún)流程
Elasticsearch的數(shù)據(jù)檢索流程涉及多個(gè)步驟千康,從客戶(hù)端請(qǐng)求到最終返回結(jié)果,底層實(shí)現(xiàn)依賴(lài)于其分布式搜索引擎的架構(gòu)世吨。以下是Elasticsearch數(shù)據(jù)檢索的基本流程及其底層實(shí)現(xiàn):
數(shù)據(jù)檢索流程
分為根據(jù)ID檢索和字段檢索叹卷。
根據(jù)ID檢索流程
- 客戶(hù)端發(fā)送put請(qǐng)求到任意節(jié)點(diǎn)屯吊,該節(jié)點(diǎn)將作為協(xié)調(diào)節(jié)點(diǎn)惑灵。
- 使用 doc id 確定數(shù)據(jù)所在主分片「id 到分片的映射是基于 doc id 的哈希值和集群分片數(shù)量計(jì)算的」路由到 shard 所在節(jié)點(diǎn)柴信。
- 將數(shù)據(jù)返回協(xié)調(diào)節(jié)點(diǎn)。
- 協(xié)調(diào)節(jié)點(diǎn)處理結(jié)果返回客戶(hù)端彤侍。如果啟動(dòng)了緩存肠缨,在協(xié)調(diào)節(jié)點(diǎn)命中緩存,會(huì)將緩存結(jié)果直接返回客戶(hù)端盏阶。
根據(jù)字段檢索
- 客戶(hù)端發(fā)送put請(qǐng)求到任意節(jié)點(diǎn)晒奕,
該節(jié)點(diǎn)將作為協(xié)調(diào)節(jié)點(diǎn)。 - 協(xié)調(diào)節(jié)點(diǎn)進(jìn)行 query 解析,根據(jù)索引及解析后的數(shù)據(jù)脑慧,確定相關(guān)分分片惠窄,并將查詢(xún)分發(fā)到相關(guān)分片。
- 相關(guān)分片的數(shù)據(jù)節(jié)點(diǎn)執(zhí)行本地查詢(xún)漾橙,把符合條件的數(shù)據(jù)id、排序字段等信息返回給協(xié)調(diào)節(jié)點(diǎn)楞卡。
- 各分片數(shù)據(jù)將 TopN 數(shù)據(jù)返回協(xié)調(diào)節(jié)點(diǎn)霜运。
協(xié)調(diào)節(jié)點(diǎn)將數(shù)據(jù)合并排序整理后得到最終TopN的id。 - 各分片根據(jù) id 獲取數(shù)據(jù)蒋腮,將數(shù)據(jù)返回協(xié)調(diào)節(jié)點(diǎn)淘捡。
- 協(xié)調(diào)節(jié)點(diǎn)將檢索結(jié)果返回客戶(hù)端。
檢索底層實(shí)現(xiàn)
倒排索引
Elasticsearch使用倒排索引來(lái)實(shí)現(xiàn)快速搜索池摧。每個(gè)字段都被分析并存儲(chǔ)為一個(gè)倒排索引焦除,其中包含詞條(Term),詞條對(duì)應(yīng)的文檔列表作彤,以及詞條在文檔中的位置膘魄。
分片和副本
索引被分成多個(gè)主分片,每個(gè)主分片可以有多個(gè)副分片竭讳。查詢(xún)操作會(huì)在所有相關(guān)的主分片及其副本上執(zhí)行创葡。
并行處理
查詢(xún)?cè)诙鄠€(gè)分片上并行執(zhí)行,以提高性能绢慢。
分布式緩存
Elasticsearch使用兩種類(lèi)型的緩存:查詢(xún)緩存和文檔緩存灿渴。查詢(xún)緩存存儲(chǔ)了常見(jiàn)查詢(xún)的結(jié)果,而文檔緩存存儲(chǔ)了最近訪問(wèn)的文檔胰舆。
分布式執(zhí)行
查詢(xún)操作在所有相關(guān)的分片上分布式執(zhí)行骚露,每個(gè)分片生成一個(gè)局部排序的結(jié)果集。
聚合操作
對(duì)于聚合查詢(xún)缚窿,Elasticsearch會(huì)在每個(gè)分片上執(zhí)行局部聚合棘幸,然后將這些局部聚合結(jié)果發(fā)送回協(xié)調(diào)節(jié)點(diǎn)進(jìn)行全局聚合。
故障轉(zhuǎn)移和容錯(cuò)
如果某個(gè)分片的節(jié)點(diǎn)不可用滨攻,Elasticsearch會(huì)使用副本分片來(lái)處理查詢(xún)够话。
優(yōu)化和簡(jiǎn)化
Elasticsearch的查詢(xún)優(yōu)化器會(huì)嘗試簡(jiǎn)化查詢(xún),并選擇最有效的執(zhí)行計(jì)劃光绕。
結(jié)果的序列化和傳輸
最終結(jié)果在協(xié)調(diào)節(jié)點(diǎn)上進(jìn)行序列化女嘲,并通過(guò)HTTP或其他協(xié)議發(fā)送回客戶(hù)端。
Elasticsearch的查詢(xún)流程和底層實(shí)現(xiàn)非常復(fù)雜诞帐,涉及到大量的優(yōu)化和并行處理機(jī)制欣尼,以確保在大規(guī)模數(shù)據(jù)集上也能提供快速和準(zhǔn)確的搜索結(jié)果。