Elasticserach---寫一致性原理以及quorum機制---以及內部查詢原理
(1) 寫一致性的四個級別
consistency,one(primary shard),all(all shard),quorum(default)
我們在傳送任何一個增刪改操作的時候,比如說put /index/type/id,都可以帶上一個consistency引數,指明我們想要的寫一致性是什麼?
put /index/type/id?consistency=quorum
one:要求我們這個寫操作,只要有一個primary shard是active活躍可用的,就可以執行
all:要求我們這個寫操作,必須所有的primary shard和replica shard都是活躍的,才可以執行這個寫操作
quorum:預設的值,要求所有的shard中,必須是大部分的shard都是活躍的,可用的,才可以執行這個寫操作
(2)quorum機制,寫之前必須確保大多數shard都可用,int( (primary + number_of_replicas) / 2 ) + 1,當number_of_replicas>1時才生效
公式:
quroum = int( (primary + number_of_replicas) / 2 ) + 1
舉個例子,3個primary shard,number_of_replicas=1,總共有3 + 3 * 1 = 6個shard
quorum = int( (3 + 1) / 2 ) + 1 = 3
所以,要求6個shard中至少有3個shard是active狀態的,才可以執行這個寫操作
(3)如果節點數少於quorum數量,可能導致quorum不齊全,進而導致無法執行任何寫操作
3個primary shard,replica=1,要求至少3個shard是active,3個shard按照之前學習的shard&replica機制,必須在不同的節點上,如果說只有1臺機器的話,是不是有可能出現,3個shard都沒法分配齊全,此時就可能會出現寫操作無法執行的情況
例如:
1個primary shard,replica=3,quorum=((1 + 3) / 2) + 1 = 3,要求1個primary shard + 3個replica shard = 4個shard,其中必須有3個shard是要處於active狀態的。如果這個時候只有2臺機器的話,會出現什麼情況呢?
es提供了一種特殊的處理場景,就是說當number_of_replicas>1時才生效,因為假如說,你就一個primary shard,replica=1,此時就2個shard
(1 + 1 / 2) + 1 = 2,要求必須有2個shard是活躍的,但是可能就1個node,此時就1個shard是活躍的,如果你不特殊處理的話,導致我們的單節點叢集就無法工作
(4)quorum不齊全時,wait,預設1分鐘
等待期間,期望活躍的shard數量可以增加,最後實在不行,就會timeout
我們其實可以在寫操作的時候,加一個timeout引數(預設單位為ms,也可以指定timeout=30s),比如說put /index/type/id?timeout=30,這個就是說自己去設定quorum不齊全的時候,es的timeout時長,可以縮短,也可以增長
內部查詢原理
1、客戶端傳送請求到任意一個node,成為coordinate node
2、coordinate node對document進行路由,將請求轉發到對應的node,此時會使用round-robin隨機輪詢演算法,在primary shard以及其所有replica中隨機選擇一個,讓讀請求負載均衡
3、接收請求的node返回document給coordinate node
4、coordinate node返回document給客戶端
5、特殊情況:document如果還在建立索引過程中,可能只有primary shard有,任何一個replica shard都沒有,此時可能會導致無法讀取到document,但是document完成索引建立之後,primary shard和replica shard就都有了
相關文章
- 31_分散式文件系統_圖解寫一致性原理以及quorum機制深入剖析分散式圖解
- Vue非同步更新機制以及$nextTick原理Vue非同步
- js內部事件機制–單執行緒原理JS事件執行緒
- 微信域名檢測的機制原理以及實現方式
- 交換機的概念以及工作原理
- MongoDB的內部架構,實現事務的原理以及資料同步和分片機制各是什麼?MongoDB架構
- vip原理以及使用
- 計算機組成原理縮寫以及概念整理(持續更新)計算機
- synchronized 內部原理、常見鎖策略、CAS、 以及死鎖的產生和解決synchronized
- Java虛擬機器:Jvm概念和原理詳解以及GC機制的分析Java虛擬機JVMGC
- Mysql鎖機制與最佳化實踐以及MVCC底層原理剖析MySqlMVC
- 32_分散式文件系統_document查詢內部原理圖解揭秘分散式圖解
- group by 查詢原理
- Lucene查詢原理
- Oracle查詢原理Oracle
- 節流原理以及實現
- MySQL 索引原理以及優化MySql索引優化
- Ajax原理以及優缺點
- Stream常用操作以及原理探索
- 【MySQL】order by 原理以及優化MySql優化
- va_list 原理以及用法
- 中介模型以及優化查詢以及CBV模式模型優化模式
- 【一】瞭解計算機的原理以及Python計算機Python
- Handler機制原理
- MySQL 5.6 GTID 原理以及使用MySql
- 購物車原理以及實現
- Mysql的複製原理以及流程MySql
- HandlerThread的使用以及原理thread
- 【MySQL】order by 原理以及最佳化MySql
- JVM 內部原理(一)— 概述JVM
- oracle事務內部原理Oracle
- iOS中ARC內部原理iOS
- MySQL慢查詢記錄原理和內容解析MySql
- 從查詢重寫角度理解elasticsearch的高亮原理Elasticsearch
- HBase內部機制
- redis 內部機制Redis
- SpringBoot錯誤處理機制以及自定義異常響應原理解析Spring Boot
- 防抖原理以及簡單實現