邏輯時鐘可能造成人在物理視角理解事務(wù)順序的不一致性受神,而物理時鐘雖然符合人的物理視角的一致性担钮,但是沒有辦法保持整個系統(tǒng)(分布式)時鐘的一致性刀脏。?混合邏輯時鐘則嘗試著解決物理時鐘和邏輯時鐘存在的問題?渐行。
(1)
混合邏輯時鐘為了解決邏輯時鐘和物理時鐘的問題,提供了單向的因果序列檢測和排序能力(邏輯時鐘能力)叠骑,同時保持時鐘接近物理時鐘李皇。在系統(tǒng)事件時間戳上描述采用了因果序列和物理時鐘的組合削茁,而不是單純的物理時間或者單純的因果序列宙枷。?
下面是這個算法的偽碼表示,其中茧跋,混合邏輯時鐘的時間戳使用兩個值l,c來表示慰丛,物理時鐘用pt表示:
?
該算法源自論文《?Logical Physical Clocks and Consistent Snapshots in Globally Distributed Databases?》●迹混合邏輯時鐘實現(xiàn)了單向的因果檢測和排序诅病,同時能夠修正時間不一致帶來的偏差。我們再來看看論文中的一個例子:
?
從算法可以很清楚知道粥烁,它讓混合邏輯時鐘表示物理時鐘的值盡量與本地節(jié)點的物理時鐘保持一致贤笆,但是不依賴本地的物理時鐘,因此讨阻,不用擔(dān)心本地時鐘的回退芥永,如果和NTP結(jié)合使用時,也不用擔(dān)心NTP 跳變帶來的問題钝吮;混合邏輯時鐘表示的邏輯時鐘值是一個絕對值埋涧。 與Google True Time相比,不存在True Time的overlap問題奇瘦。
因為這諸多好處棘催,混合邏輯時鐘在數(shù)據(jù)庫和一些分布式系統(tǒng)中得到廣泛的應(yīng)用,比如CockroachDB耳标,HDFS(一致性快照)醇坝。
(2)
接下來,我們看看混合邏輯時鐘存在的問題次坡。
由算法可理解纲仍,混合邏輯時鐘算法其實只關(guān)心兩種情況的先后順序:
在同一個進程或者線程中發(fā)生的事件的前后順序
進程之間發(fā)送消息與接收消息這兩個事件的前后順序
如果把進程理解成系統(tǒng)的一個session,它內(nèi)部的邏輯時鐘能夠保證session內(nèi)事件的順序贸毕,比如在同一個session的先執(zhí)行事務(wù)1郑叠,再執(zhí)行事務(wù)2,我們會認(rèn)為事務(wù)2一定是在事務(wù)1結(jié)束(提交或許abort)后開始執(zhí)行的明棍。 但是出現(xiàn)了跨session乡革,特別是這個session 在系統(tǒng)外的節(jié)點(application 調(diào)用系統(tǒng)的接口)這個前后關(guān)系就很難得不到保證。舉個例子:
Session1、Session2 都關(guān)聯(lián)了分布式系統(tǒng)內(nèi)的節(jié)點沸版,而Application被部署在分布式系統(tǒng)之外的節(jié)點上嘁傀。從物理時間上看,Application先在Session1執(zhí)行txn1视粮,Application接收到txn1 committed消息后细办,再在Session2上執(zhí)行txn2。Application在物理視角看起來蕾殴,txn2的開始時間一到晚于txn1的提交時間笑撞。但從邏輯時鐘的角度來看, 完全有可能存在Session2的開始時間要早于Session1的提交時間的情況(因為兩個Session 之間沒有交互钓觉,兩者之間的混亂邏輯時鐘沒有因果檢測和修正時間茴肥,在物理時鐘的偏差范圍內(nèi)就存在 Session2的開始時間要早于Session1的提交時間的可能 )。
混合邏輯時間可以讓邏輯時鐘的值盡量等于本地物理時鐘的值荡灾,但是它從本質(zhì)上還是邏輯時鐘的算法瓤狐,在物理時鐘的偏差范圍內(nèi),依然存在上述問題批幌。
這帶來一個新的問題:系統(tǒng)執(zhí)行結(jié)果的正確性是否依賴事務(wù)之間的先后順序(同一個session 之間的事務(wù)的先后順序可以保證础锐,但是不同的session之間的先后順序無法保證)。那應(yīng)該如何?保證不同的session之間的事務(wù)執(zhí)行的順序荧缘?兩種可能的解決方法:
把Application的節(jié)點包含在邏輯時鐘的分布式系統(tǒng)之內(nèi)皆警。
使用帶時間窗口的混合邏輯時鐘。
方法1雖然能解決問題胜宇,但對現(xiàn)有系統(tǒng)的入侵性太大耀怜,因此并不實用。方法2似乎只有Google True Time可以很好的解決桐愉。
總結(jié)
混合邏輯時鐘可以保證同一個process內(nèi)部事件的先后順序财破,但是解決不了系統(tǒng)外事件發(fā)生邏輯前后順序與物理時間前后順序的一致性。即使存在這樣的問題从诲,Cockroach依然還在使用該機制左痢,下篇文章將介紹Cockroach MVCC實現(xiàn)流程。
關(guān)于"NoSQL漫談"
NoSQL主要泛指一些分布式的非關(guān)系型數(shù)據(jù)存儲技術(shù)系洛,這其實是一個非常廣泛的定義俊性,可以說涉及到分布式系統(tǒng)技術(shù)的方方面面。隨著人工智能描扯、物聯(lián)網(wǎng)定页、大數(shù)據(jù)、云計算以及區(qū)塊鏈技術(shù)的不斷普及绽诚,NoSQL技術(shù)將會發(fā)揮越來越大的價值典徊。
1杭煎、具有1-5工作經(jīng)驗的,面對目前流行的技術(shù)不知從何下手卒落,
需要突破技術(shù)瓶頸的可以加羡铲。
2、在公司待久了儡毕,過得很安逸也切,
但跳槽時面試碰壁。
需要在短時間內(nèi)進修腰湾、跳槽拿高薪的可以加雷恃。
3、如果沒有工作經(jīng)驗檐盟,但基礎(chǔ)非常扎實褂萧,對java工作機制押桃,
常用設(shè)計思想葵萎,常用java開發(fā)框架掌握熟練的,可以加唱凯。
4羡忘、覺得自己很牛B,一般需求都能搞定磕昼。
但是所學(xué)的知識點沒有系統(tǒng)化卷雕,很難在技術(shù)領(lǐng)域繼續(xù)突破的可以加。
5. 群號:高級架構(gòu)群 Java進階群:180705916備注好信息票从!
6.阿里Java高級大牛直播講解知識點漫雕,分享知識,
多年工作經(jīng)驗的梳理和總結(jié)峰鄙,帶著大家全面浸间、
科學(xué)地建立自己的技術(shù)體系和技術(shù)認(rèn)知!