Redlock安全嗎?

譯文-Is Redlock safe? - <antirez>

Redlock是安全的嗎?
antirez 1973 天前. 316555次瀏覽。
分布式系統(tǒng)研究員Martin Kleppmann昨天發(fā)表了一篇對(duì)Redlock(http://redis.io/topics/distlock)的分析村怪,你可以在這里找到:http://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html

Redlock是我設(shè)計(jì)的一種客戶端分布式鎖算法,可以和Redis一起使用浮庐,但該算法在客戶端協(xié)調(diào)了一組實(shí)現(xiàn)具有一定能力的數(shù)據(jù)存儲(chǔ)的節(jié)點(diǎn)甚负,以創(chuàng)建一個(gè)多主站容錯(cuò)的,并希望是安全的审残,具有自動(dòng)釋放能力的分布式鎖梭域。
例如,你可以使用MySQL而不是Redis來(lái)實(shí)現(xiàn)Redlock维苔。

該算法的目標(biāo)是讓那些使用單個(gè)Redis實(shí)例或帶有故障轉(zhuǎn)移的主從設(shè)置來(lái)實(shí)現(xiàn)分布式鎖的人轉(zhuǎn)向更可靠碰辅、更安全懂昂,但復(fù)雜度很低且性能良好的東西介时。

自從我發(fā)布Redlock后,人們用多種語(yǔ)言實(shí)現(xiàn)了它凌彬,并將其用于不同的目的沸柔。

Martin對(duì)該算法的分析得出結(jié)論:Redlock并不安全。Martin發(fā)表了分析報(bào)告铲敛,這很好褐澎,我在這里的原始Redlock規(guī)范中要求進(jìn)行分析:http://redis.io/topics/distlock。所以謝謝你伐蒋,Martin工三。然而我并不同意這個(gè)分析迁酸。好在分布式系統(tǒng)與其他領(lǐng)域的編程不同,在數(shù)學(xué)上是相當(dāng)精確的俭正,或者說(shuō)是不精確的奸鬓,所以一組給定的屬性可以由一個(gè)算法來(lái)保證,或者在某些假設(shè)下算法可能無(wú)法保證掸读。在這個(gè)分析中串远,我將分析Martin的分析,以便該領(lǐng)域的其他專家可以檢查這兩份文件(分析和反分析)儿惫,最終我們可以了解Redlock是否可以被視為安全澡罚。

為什么Martin認(rèn)為Redlock不安全

分析中的論點(diǎn)主要有兩個(gè)。

  1. 具有自動(dòng)釋放功能的分布式鎖(互斥鎖屬性只在獲得鎖后的固定時(shí)間內(nèi)有效)需要一種方法來(lái)避免客戶在過(guò)期后使用鎖肾请,在訪問(wèn)共享資源時(shí)違反互斥的問(wèn)題留搔。Martin說(shuō)晕换,Redlock沒(méi)有這樣的機(jī)制矫限。

  2. Martin說(shuō),即使不管上述問(wèn)題1呜舒,該算法本質(zhì)上是不安全的避归,因?yàn)樗鼘?duì)系統(tǒng)模型做了假設(shè)荣月,而這些假設(shè)在實(shí)際系統(tǒng)中無(wú)法保證。

為了清楚起見(jiàn)梳毙,我將分別討論這兩個(gè)問(wèn)題哺窄,從第一個(gè)問(wèn)題 "1 "開(kāi)始。

分布式鎖账锹、自動(dòng)釋放和tokens

一個(gè)沒(méi)有自動(dòng)釋放機(jī)制的分布式鎖萌业,鎖的主人將無(wú)限期地持有它,基本上是沒(méi)有用的奸柬。如果持有鎖的客戶端崩潰了生年,并且沒(méi)有在很短的時(shí)間內(nèi)恢復(fù)完整的狀態(tài),就會(huì)產(chǎn)生一個(gè)死鎖廓奕,即分布式鎖試圖保護(hù)的共享資源永遠(yuǎn)無(wú)法訪問(wèn)抱婉。這就產(chǎn)生了一個(gè)在大多數(shù)情況下不可接受的有效性問(wèn)題,所以一個(gè)合理的分布式鎖必須能夠自動(dòng)釋放自己桌粉。

因此蒸绩,實(shí)用的鎖是提供給客戶的,有一個(gè)最大的生存時(shí)間铃肯。在過(guò)期后患亿,作為鎖的*主要屬性的互斥保證就沒(méi)有了:另一個(gè)客戶端可能已經(jīng)擁有了這個(gè)鎖。如果兩個(gè)客戶端在兩個(gè)不同的時(shí)間獲得了鎖押逼,但由于GC暫筒脚海或其他調(diào)度問(wèn)題惦界,第一個(gè)客戶端的速度非常慢,它將試圖在共享資源的上下文中與第二個(gè)獲得鎖的客戶端同時(shí)進(jìn)行工作咙冗,會(huì)發(fā)生什么情況表锻?

Martin說(shuō),這個(gè)問(wèn)題可以通過(guò)讓分布式鎖服務(wù)器為每個(gè)鎖提供一個(gè)令牌來(lái)避免乞娄,在他的例子中瞬逊,令牌只是一個(gè)數(shù)字,保證總是遞增的仪或。馬丁使用令牌的理由是确镊,這樣一來(lái),當(dāng)兩個(gè)不同的客戶同時(shí)訪問(wèn)被鎖的資源時(shí)范删,我們可以在數(shù)據(jù)庫(kù)寫(xiě)入事務(wù)中使用令牌(假定將客戶的工作具體化):只有擁有最大鎖號(hào)的客戶才能寫(xiě)入數(shù)據(jù)庫(kù)蕾域。

用馬丁的話說(shuō)。

"這個(gè)問(wèn)題的解決方法其實(shí)很簡(jiǎn)單:你需要在向存儲(chǔ)服務(wù)的每個(gè)寫(xiě)請(qǐng)求中包含一個(gè)防護(hù)令牌到旦。在這種情況下旨巷,防護(hù)令牌只是一個(gè)數(shù)字,每次客戶端獲得鎖的時(shí)候添忘,這個(gè)數(shù)字就會(huì)增加(例如由鎖服務(wù)增加)"

......剪輯......

"請(qǐng)注意采呐,這需要存儲(chǔ)服務(wù)器在檢查令牌方面發(fā)揮積極作用,并拒絕任何令牌已經(jīng)倒退的寫(xiě)入"搁骑。

我認(rèn)為這種說(shuō)法有很多問(wèn)題斧吐。

  1. 大多數(shù)時(shí)候,當(dāng)你需要一個(gè)能夠保證相互排他性的分布式鎖系統(tǒng)時(shí)仲器,當(dāng)這個(gè)屬性被違反時(shí)煤率,你已經(jīng)輸了。分布式鎖正是在我們對(duì)共享資源沒(méi)有其他控制的時(shí)候非常有用乏冀。在他的分析中蝶糯,Martin假設(shè)當(dāng)鎖的互斥性被違反時(shí),你總是有一些其他的方法來(lái)避免競(jìng)爭(zhēng)條件辆沦。我認(rèn)為這是一種非常奇怪的方式來(lái)推理具有強(qiáng)保障的分布式鎖昼捍,不清楚為什么你會(huì)使用具有強(qiáng)屬性的鎖,如果你能以不同的方式解決競(jìng)爭(zhēng)众辨。然而端三,我將繼續(xù)下面的其他觀點(diǎn)舷礼,只是為了說(shuō)明Redlock在這種非人為的情況下可以很好地工作鹃彻。

  2. 如果你的數(shù)據(jù)存儲(chǔ)總是在你的令牌大于所有過(guò)去的令牌時(shí)才接受寫(xiě)入,那么它就是一個(gè)可線性化存儲(chǔ)妻献。如果你有一個(gè)可線性化的存儲(chǔ)蛛株,你就可以為每一個(gè)Redlock獲得的ID生成一個(gè)增量团赁,所以這將使Redlock等同于另一個(gè)分布式鎖系統(tǒng),在每一個(gè)新的鎖中提供一個(gè)增量的令牌ID谨履。然而在下一點(diǎn)中欢摄,我將說(shuō)明這一點(diǎn)是不需要的。

  3. 然而 "2 "并不是一個(gè)明智的選擇:大多數(shù)時(shí)候笋粟,對(duì)共享資源工作的結(jié)果并不是寫(xiě)到一個(gè)可線性化的存儲(chǔ)中怀挠,那么該怎么做?每個(gè)Redlock都與一個(gè)大的隨機(jī)令牌相關(guān)聯(lián)(該令牌的生成方式可以忽略碰撞害捕。Redlock規(guī)范的文字假設(shè)是 "來(lái)自/dev/urandom的20字節(jié)")绿淋。) 你對(duì)一個(gè)唯一的令牌做什么?例如尝盼,你可以實(shí)現(xiàn)Check和Set吞滞。當(dāng)開(kāi)始處理一個(gè)共享資源時(shí),我們把它的狀態(tài)設(shè)置為"<token>"盾沫,然后我們只在寫(xiě)入時(shí)令牌仍然相同的情況下操作讀-修改-寫(xiě)入裁赠。

  4. 請(qǐng)注意,在某些用例中赴精,人們可以說(shuō)佩捞,無(wú)論如何,有秩序的令牌是很有用的蕾哟。雖然很難想出一個(gè)用例失尖,但請(qǐng)注意,對(duì)于Martin提到的同樣的GC暫停渐苏,獲得令牌的順序掀潮,并不一定尊重客戶嘗試對(duì)共享資源工作的順序,所以鎖的順序可能與對(duì)共享資源工作的效果不隨便相關(guān)琼富。

  5. 大多數(shù)時(shí)候仪吧,鎖被用來(lái)訪問(wèn)那些以非事務(wù)性方式更新的資源。有時(shí)我們使用分布式鎖來(lái)移動(dòng)物理對(duì)象鞠眉,比如說(shuō)薯鼠。或者與另一個(gè)外部API進(jìn)行交互械蹋,等等出皇。

我想再次提到,這一切的奇怪之處在于哗戈,它假定你總是必須有一種方法來(lái)處理相互排斥被違反的事實(shí)郊艘。事實(shí)上,如果你有這樣一個(gè)系統(tǒng)來(lái)避免競(jìng)爭(zhēng)條件下的問(wèn)題,你可能根本不需要一個(gè)分布式鎖纱注,或者至少你不需要一個(gè)有強(qiáng)大保證的鎖畏浆,而只是一個(gè)弱鎖來(lái)避免,大多數(shù)時(shí)候狞贱,由于性能原因的并發(fā)訪問(wèn)刻获。

然而,即使你碰巧同意Martin關(guān)于上述事實(shí)是非常有用的瞎嬉,底線是每個(gè)鎖的唯一標(biāo)識(shí)符可以用于相同的目標(biāo)蝎毡,但在不要求存儲(chǔ)的強(qiáng)一致方面更實(shí)用。

我們來(lái)談?wù)勏到y(tǒng)模型


上面的批評(píng)基本上是所有的東西都有的氧枣,它是一個(gè)自動(dòng)釋放的分布式鎖顶掉,而不是在每個(gè)鎖上提供一個(gè)單調(diào)增加的計(jì)數(shù)器。然而挑胸,Martin的另一個(gè)批評(píng)是針對(duì)Redlock的痒筒。在這里,Martin真正分析了這個(gè)算法茬贵,得出的結(jié)論是它被破壞了簿透。

Redlock假設(shè)了一個(gè)半同步的系統(tǒng)模型,不同的進(jìn)程可以以差不多的 "速度 "計(jì)算時(shí)間解藻。不同的進(jìn)程不需要以任何方式在絕對(duì)時(shí)間上有一個(gè)約束誤差老充。他們需要做的只是,例如螟左,能夠以最大10%的誤差計(jì)算5秒啡浊。因此,一個(gè)人計(jì)算實(shí)際4.5秒胶背,另一個(gè)人計(jì)算5.5秒巷嚣,我們就可以了。

Martin還指出钳吟,Redlock需要約束信息的最大延遲廷粒,就我所知,這并不正確(我將在后面解釋他的推理有什么問(wèn)題)红且。

因此坝茎,讓我們從不同進(jìn)程無(wú)法以相同的速度計(jì)算時(shí)間的問(wèn)題開(kāi)始。

Martin說(shuō)暇番,由于兩個(gè)問(wèn)題嗤放,時(shí)鐘會(huì)在系統(tǒng)中隨機(jī)跳躍。

  1. 系統(tǒng)管理員手動(dòng)改變了時(shí)鐘壁酬。

  2. ntpd守護(hù)進(jìn)程因?yàn)槭盏礁露?jīng)常改變時(shí)鐘次酌。

上述兩個(gè)問(wèn)題可以通過(guò)以下方式來(lái)避免:"1 "不這樣做(否則即使用 "echo foo > /my/raft/log.bin "來(lái)破壞Raft日志也是一個(gè)問(wèn)題)恨课;"2 "使用ntpd,它不通過(guò)直接跳轉(zhuǎn)來(lái)改變時(shí)間和措,而是在較大的時(shí)間跨度內(nèi)分布改變。

然而我認(rèn)為Martin是對(duì)的蜕煌,Redis和Redlock的實(shí)現(xiàn)應(yīng)該改用大多數(shù)操作系統(tǒng)提供的單調(diào)的時(shí)間API派阱,以使上述問(wèn)題不那么嚴(yán)重。這在過(guò)去被提出過(guò)幾次斜纪,在Redis內(nèi)部增加了一些復(fù)雜性贫母,但卻是一個(gè)好主意:我將在未來(lái)幾周內(nèi)實(shí)現(xiàn)這個(gè)想法。然而盒刚,雖然我們將切換到單調(diào)的時(shí)間API腺劣,因?yàn)橛袃?yōu)勢(shì),在沒(méi)有軟件(時(shí)間服務(wù)器)或人類(系統(tǒng)管理員)元素改變時(shí)鐘的操作系統(tǒng)中運(yùn)行的進(jìn)程因块,可以計(jì)算相對(duì)時(shí)間橘原,即使使用gettimeofday()也會(huì)有邊界錯(cuò)誤。

請(qǐng)注意涡上,過(guò)去曾有過(guò)實(shí)現(xiàn)分布式系統(tǒng)的嘗試趾断,甚至假設(shè)絕對(duì)時(shí)間的誤差是有限的(通過(guò)使用GPS裝置)。Redlock不需要這樣的東西吩愧,只需要不同的進(jìn)程能夠?qū)?0秒算作9.5秒或11.2秒(在例子中最多+/-2秒)芋酌,例如。

那么雁佳,Redlock到底安不安全脐帝?這取決于上述情況。讓我們假設(shè)我們使用單調(diào)增長(zhǎng)的時(shí)間API糖权,為了簡(jiǎn)單起見(jiàn)堵腹,排除實(shí)施細(xì)節(jié)(對(duì)POKE和時(shí)間服務(wù)器情有獨(dú)鐘的系統(tǒng)管理員)。一個(gè)進(jìn)程可以用最大誤差的固定百分比來(lái)計(jì)算相對(duì)時(shí)間嗎星澳?我認(rèn)為這是一個(gè)響當(dāng)當(dāng)?shù)腨ES秸滴,對(duì)這個(gè)問(wèn)題的回答是比對(duì)的更簡(jiǎn)單。"一個(gè)進(jìn)程能否在不破壞日志的情況下寫(xiě)入日志"募判?

網(wǎng)絡(luò)延遲與合作

Martin說(shuō)荡含,Redlock不僅僅取決于進(jìn)程可以在大約同一時(shí)間計(jì)算時(shí)間,他說(shuō)届垫。

"然而释液,Redlock不是這樣的。它的安全性取決于很多時(shí)間上的假設(shè):它假設(shè)所有Redis節(jié)點(diǎn)在過(guò)期前持有密鑰的時(shí)間長(zhǎng)度大致正確装处;網(wǎng)絡(luò)延遲與過(guò)期時(shí)間相比很形笳浸船;進(jìn)程暫停比過(guò)期時(shí)間短很多"。

因此寝蹈,讓我們把上述主張分成不同的部分李命。

  1. Redis節(jié)點(diǎn)持有密鑰的時(shí)間長(zhǎng)度大致合適。

  2. 網(wǎng)絡(luò)延遲與過(guò)期時(shí)間相比是很小的箫老。

  3. 進(jìn)程暫停時(shí)間比到期時(shí)間短得多封字。

在Martin說(shuō) "系統(tǒng)時(shí)鐘跳動(dòng) "的所有時(shí)間里,我假設(shè)我們通過(guò)不以對(duì)算法有問(wèn)題的方式探究系統(tǒng)時(shí)間耍鬓,或者為了簡(jiǎn)單起見(jiàn)阔籽,通過(guò)使用單調(diào)的時(shí)間API來(lái)覆蓋這個(gè)問(wèn)題。所以牲蜀。

關(guān)于權(quán)利要求1:這不是一個(gè)問(wèn)題笆制,我們假定我們可以以相同的速度計(jì)算時(shí)間,除非有任何實(shí)際的反對(duì)意見(jiàn)涣达。

關(guān)于權(quán)利要求2:事情要復(fù)雜一些在辆。Martin說(shuō)

"好吧,也許你認(rèn)為時(shí)鐘跳動(dòng)是不現(xiàn)實(shí)的度苔,因?yàn)槟銓?duì)正確配置NTP开缎,使其只進(jìn)行時(shí)鐘回轉(zhuǎn)非常有信心。" (是的林螃,我們?cè)谶@里同意;-)他繼續(xù)說(shuō)...)

"在這種情況下奕删,讓我們看一個(gè)例子,說(shuō)明進(jìn)程暫土迫希可能導(dǎo)致算法失敗完残。
客戶端1請(qǐng)求鎖定節(jié)點(diǎn)A、B横漏、C谨设、D、E缎浇。
當(dāng)對(duì)客戶端1的響應(yīng)在路途中時(shí)扎拣,客戶端1進(jìn)入停止世界的GC。
所有Redis節(jié)點(diǎn)的鎖都過(guò)期了素跺。
客戶端2獲得了節(jié)點(diǎn)A二蓝、B、C指厌、D刊愚、E的鎖。
客戶端1完成了GC踩验,并收到了來(lái)自Redis節(jié)點(diǎn)的響應(yīng)鸥诽,表明它成功獲得了鎖(當(dāng)進(jìn)程暫停時(shí)商玫,它們被保存在客戶端1的內(nèi)核網(wǎng)絡(luò)緩沖區(qū))。
客戶端1和2現(xiàn)在都認(rèn)為他們持有該鎖牡借。"

如果你閱讀了我?guī)讉€(gè)月沒(méi)碰過(guò)的Redlock規(guī)范拳昌,你可以看到獲取鎖的步驟是。

  1. 獲取當(dāng)前時(shí)間钠龙。

  2. ...獲取鎖所需的所有步驟...

  3. 再次獲取當(dāng)前時(shí)間炬藤。

  4. 檢查我們是否已經(jīng)沒(méi)有時(shí)間了,或者我們是否足夠快地獲得了鎖俊鱼。

  5. 用你的鎖做一些工作刻像。

注意步驟1和3畅买。無(wú)論網(wǎng)絡(luò)或相關(guān)進(jìn)程中發(fā)生什么延遲并闲,在獲得大多數(shù)人之后,我們再次檢查我們是否超出了時(shí)間谷羞。延遲只能發(fā)生在步驟3之后帝火,導(dǎo)致鎖被認(rèn)為是可以的,而實(shí)際上已經(jīng)過(guò)期了湃缎,也就是說(shuō)犀填,我們又回到了Martin發(fā)現(xiàn)的分布式鎖的第一個(gè)問(wèn)題,即客戶未能在鎖有效期過(guò)期之前停止對(duì)共享資源的工作嗓违。讓我再講講這個(gè)問(wèn)題是如何在所有的分布式鎖實(shí)現(xiàn)中普遍存在的九巡,以及作為解決方案的令牌是如何既不現(xiàn)實(shí)又可以用于Redlock的。

請(qǐng)注意蹂季,無(wú)論在1和3之間發(fā)生什么冕广,你都可以添加你想要的網(wǎng)絡(luò)延遲,如果時(shí)間過(guò)長(zhǎng)偿洁,鎖將永遠(yuǎn)被認(rèn)為是無(wú)效的撒汉,所以Redlock看起來(lái)完全不受進(jìn)程之間有非綁定延遲的消息的影響。它在設(shè)計(jì)時(shí)就考慮到了這一目標(biāo)涕滋,我看不出上述的競(jìng)賽條件會(huì)發(fā)生睬辐。

然而Martin的博文也被多位DS專家審閱過(guò),所以我不確定我在這里是否遺漏了什么宾肺,或者僅僅是Redlock的工作方式被很多人同時(shí)忽略了溯饵。我很樂(lè)意收到一些關(guān)于這方面的澄清。

上述內(nèi)容也解決了 "過(guò)程暫停 "的關(guān)注點(diǎn)3锨用。在獲取鎖的過(guò)程中瓣喊,暫停不會(huì)對(duì)算法的正確性產(chǎn)生影響。然而黔酥,它們會(huì)影響客戶端在指定的鎖時(shí)間內(nèi)進(jìn)行工作的能力藻三,就像上面已經(jīng)提到的任何其他自動(dòng)釋放的分布式鎖一樣洪橘。

關(guān)于網(wǎng)絡(luò)延遲的題外話

只是一個(gè)簡(jiǎn)單的說(shuō)明。在帶有自動(dòng)釋放功能的分布式鎖的服務(wù)器端實(shí)現(xiàn)中棵帽,客戶端可能會(huì)要求獲得一個(gè)鎖熄求,服務(wù)器可能會(huì)允許客戶端這樣做,但進(jìn)程可能會(huì)停止進(jìn)入GC暫停逗概,或者網(wǎng)絡(luò)可能很慢或其他什么原因弟晚,所以客戶端可能會(huì)在鎖已經(jīng)過(guò)期的情況下收到 "OK,鎖是你的 "的消息逾苫,這已經(jīng)太晚了卿城。然而,你可以做很多事情來(lái)避免你的進(jìn)程沉睡很長(zhǎng)時(shí)間铅搓,你也不能做很多事情來(lái)避免網(wǎng)絡(luò)延遲瑟押,所以在獲得鎖之前/之后檢查時(shí)間的步驟,看看還有多少時(shí)間星掰,實(shí)際上應(yīng)該是常見(jiàn)的做法多望,即使是在使用其他實(shí)現(xiàn)過(guò)期鎖的系統(tǒng)。

是否同步氢烘?

在某些時(shí)候怀偷,Martin談到了Redlock使用延遲重啟節(jié)點(diǎn)的事實(shí)。這同樣需要能夠或多或少地等待指定的時(shí)間播玖,如上文所述椎工。再次重復(fù)同樣的事情是沒(méi)有用的。

然而關(guān)于這一點(diǎn)蜀踏,重要的是维蒙,這一步是可選的。你可以配置每個(gè)Redis節(jié)點(diǎn)在每次操作時(shí)進(jìn)行fsync脓斩,這樣木西,當(dāng)客戶端收到回復(fù)時(shí),它就知道鎖已經(jīng)持久化在磁盤(pán)上了随静。這就是其他大多數(shù)提供強(qiáng)擔(dān)保的系統(tǒng)的工作方式八千。Redlock非常有趣的一點(diǎn)是,你可以通過(guò)實(shí)現(xiàn)延遲重啟來(lái)選擇不涉及任何磁盤(pán)燎猛。這意味著用幾個(gè)Redis實(shí)例就可以每秒處理幾十萬(wàn)個(gè)鎖恋捆,這在其他系統(tǒng)中是無(wú)法實(shí)現(xiàn)的。

GPS裝置與本地計(jì)算機(jī)時(shí)鐘的對(duì)比

回到系統(tǒng)模型重绷,使Redlock系統(tǒng)模型實(shí)用的一點(diǎn)是沸停,你可以假設(shè)一個(gè)進(jìn)程永遠(yuǎn)不會(huì)與系統(tǒng)時(shí)鐘發(fā)生分區(qū)。請(qǐng)注意昭卓,這與其他使用GPS單元的半同步模型不同愤钾,因?yàn)樵谶@種情況下瘟滨,有兩種非明顯的分區(qū)可能發(fā)生。

  1. GPS被隔斷在GPS網(wǎng)絡(luò)之外能颁,所以它不能獲得一個(gè)固定值杂瘸。

  2. 進(jìn)程和GPS不能交換信息,或者交換的信息有延遲伙菊。

上述問(wèn)題可能會(huì)導(dǎo)致失效或安全違規(guī)败玉,這取決于系統(tǒng)的協(xié)調(diào)方式(安全問(wèn)題只有在設(shè)計(jì)錯(cuò)誤時(shí)才會(huì)發(fā)生,例如镜硕,如果GPS異步更新系統(tǒng)時(shí)間运翼,那么,當(dāng)GPS不工作時(shí)兴枯,絕對(duì)時(shí)間誤差可能會(huì)超過(guò)最大界限)血淌。

Redlock系統(tǒng)模型沒(méi)有這些復(fù)雜性,也不需要額外的硬件念恍,只需要計(jì)算機(jī)時(shí)鐘六剥,甚至是一個(gè)非常便宜的時(shí)鐘晚顷,由于晶體溫度和其他影響精度的東西峰伙,會(huì)有所有明顯的偏差。

結(jié)論

我認(rèn)為Martin對(duì)于單調(diào)的API是有道理的该默,Redis和Redlock的實(shí)現(xiàn)應(yīng)該使用它來(lái)避免由于系統(tǒng)時(shí)鐘被改變而引起的問(wèn)題瞳氓。然而,我無(wú)法確定影響Redlock安全性的其他分析點(diǎn)栓袖,正如上面所解釋的那樣匣摘,我也不認(rèn)為他的最后結(jié)論是合理的,即在需要互斥保證時(shí)人們不應(yīng)該使用Redlock裹刮。

如果能從專家那里得到更多的反饋音榜,并且用Jepsen或類似的工具測(cè)試該算法,以積累更多的數(shù)據(jù)捧弃,那將是非常好的赠叼。

衷心感謝幫助我審核這篇文章的朋友。
blog comments powered by Disqus

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末违霞,一起剝皮案震驚了整個(gè)濱河市嘴办,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌买鸽,老刑警劉巖涧郊,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異眼五,居然都是意外死亡妆艘,警方通過(guò)查閱死者的電腦和手機(jī)彤灶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)批旺,“玉大人枢希,你說(shuō)我怎么就攤上這事≈煳郑” “怎么了苞轿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)逗物。 經(jīng)常有香客問(wèn)我搬卒,道長(zhǎng),這世上最難降的妖魔是什么翎卓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任契邀,我火速辦了婚禮,結(jié)果婚禮上失暴,老公的妹妹穿的比我還像新娘坯门。我一直安慰自己,他們只是感情好逗扒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布古戴。 她就那樣靜靜地躺著,像睡著了一般矩肩。 火紅的嫁衣襯著肌膚如雪现恼。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天黍檩,我揣著相機(jī)與錄音叉袍,去河邊找鬼。 笑死刽酱,一個(gè)胖子當(dāng)著我的面吹牛喳逛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播棵里,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼润文,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了衍慎?” 一聲冷哼從身側(cè)響起转唉,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稳捆,沒(méi)想到半個(gè)月后赠法,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年砖织,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了款侵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侧纯,死狀恐怖新锈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情眶熬,我是刑警寧澤妹笆,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站娜氏,受9級(jí)特大地震影響拳缠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贸弥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一窟坐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绵疲,春花似錦哲鸳、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至般渡,卻和暖如春懒豹,著一層夾襖步出監(jiān)牢的瞬間芙盘,已是汗流浹背驯用。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留儒老,地道東北人蝴乔。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像驮樊,于是被迫代替她去往敵國(guó)和親薇正。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容