一 綜述
在傳送增刪改操作的時候,可以帶上乙個consistency引數來指明寫一致性是什麼。put /index/type/id?consistency=quorum
有三種寫一致性:
1. one:只要有乙個primary shard是active活躍可用的,就可以執行。
2. all:要求所有的primary shard和replica shard都是活躍的,才可以執行。
3. quorum:預設值,要求所有shard中大部分的shard都是活躍可用的,才可以執行。
二 quorum機制
寫之前必須確保大多數shard都可用,計算公式如下:
quroum = int( (primary + number_of_replicas) / 2 ) + 1
當number_of_replicas>1時才生效(也就是說,number_of_replicas<=1時,不會啟用quorum機制),number_of_replicas是指每個shard擁有的副本數,而不是副本數總和。
舉個例子,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個primary shard,replica=2,要求至少3個shard是active,3個shard按照之前學習的shard&replica機制,必須在不同的節點上,如果說只有2臺機器的話,是不是有可能出現說,3個shard都沒法分配齊全,此時就可能會出現寫操作無法執行的情況。
等待期間,期望活躍的shard數量可以增加,最後實在不行,就會timeout
我們其實可以在寫操作的時候,加乙個timeout引數,比如說put /index/type/id?timeout=30(單位預設是毫秒,可以手動指定單位,如s),這個就是說自己去設定quorum不齊全的時候,es的timeout時長,可以縮短,也可以增長
強一致性 弱一致性 最終一致性
這種方式在es等分布式系統中也有體現,可以設定主shard提交即返回成功,或者需要replica shard提交成功再返回。提到分布式架構就一定繞不開 一致性 問題,而 一致性 其實又包含了資料一致性和事務一致性兩種情況,本文主要討論資料一致性 事務一致性指acid 複製是導致出現資料一致性問題的唯...
一致性hash nginx ip hash原理
一致性hash 環形節點 理解 nginx也是用一致性hash 我們指出 網路負載均衡本質上是分布式業務中排程系統的一種實現。作為網路請求分配的控制者,負載均衡器起著至關重要的作用。考慮到在任何乙個網路請求中,都有乙個源位址和目標位址 源ip和目標ip 這樣,在負載均衡器中,我們就可以利用這兩個ip...
redis 雙寫一致性
首先,快取由於其高併發和高效能的特性,已經在專案中被廣泛使用。在讀取快取方面,大家沒啥疑問,都是按照下圖的流程來進行業務操作。但是在更新快取方面,對於更新完資料庫,是更新快取呢,還是刪除快取。又或者是先刪除快取,再更新資料庫,其實大家存在很大的爭議。目前沒有一篇全面的部落格,對這幾種方案進行解析。於...