解讀區(qū)塊鏈,分布式系統(tǒng)的時(shí)間順序 區(qū)塊鏈被認(rèn)為是分布式的系統(tǒng),分布式系統(tǒng)中由于多節(jié)點(diǎn),通訊、物理位置等的問(wèn)題,各節(jié)點(diǎn)間時(shí)間一致的問(wèn)題隨即也被提了出來(lái),那么怎么處理分布式系統(tǒng)中的一致性問(wèn)題,這里簡(jiǎn)單介紹下:分布式系統(tǒng)的時(shí)間順序問(wèn)題。如有解釋錯(cuò)誤或者不明,請(qǐng)及時(shí)提出指正。 分布式系統(tǒng),最簡(jiǎn)單理解有多個(gè)服務(wù)節(jié)點(diǎn),客戶端發(fā)出請(qǐng)求,服務(wù)節(jié)點(diǎn)之間通訊,順序記錄更新服務(wù)器數(shù)據(jù)和日志。 那么用戶1-2和服務(wù)器節(jié)點(diǎn)A-B-C的時(shí)間有可能都是不一樣的,那么這個(gè)請(qǐng)求數(shù)據(jù)的記錄是怎么排序和處理。Lamport(對(duì)!又是這位大神,2013圖靈獎(jiǎng))1978年提出一個(gè)logical clock的概念。
分布式系統(tǒng)中的時(shí)間問(wèn)題,如果簡(jiǎn)單去想,那么通過(guò)NTP時(shí)間同步,所有節(jié)點(diǎn)都通過(guò)去同步時(shí)間,然后根據(jù)進(jìn)程發(fā)起的物理時(shí)間來(lái)排序,先不論時(shí)間同步中同步過(guò)程中的細(xì)微毫秒級(jí)差異,多個(gè)業(yè)務(wù)發(fā)起進(jìn)程,在各個(gè)進(jìn)程之間有關(guān)聯(lián)關(guān)系,進(jìn)程隨著系統(tǒng)計(jì)算能力有差異,并且還有檢查點(diǎn)的判斷,一旦在順序進(jìn)程中出現(xiàn)了前物理時(shí)間某進(jìn)程改變了檢查點(diǎn),那么在認(rèn)為是同步處理的時(shí)候就會(huì)出現(xiàn)檢查點(diǎn)狀態(tài)改變導(dǎo)致業(yè)務(wù)邏輯的改變,這種情況理解下就是你在購(gòu)物網(wǎng)站搶購(gòu)的時(shí)候,貨物剩余量在你發(fā)起交易的時(shí)候還有,但是確認(rèn)過(guò)程由于網(wǎng)絡(luò)和計(jì)算的延時(shí),發(fā)現(xiàn)分布式系統(tǒng)中一邊是交易已正常請(qǐng)求,但是實(shí)際貨物記錄中已下架。引入logical clock能較好的處理這種系統(tǒng)記錄邏輯混亂的現(xiàn)象。 Logical clock稱為lamport timestamps,這種概念里,先把分布式系統(tǒng)節(jié)點(diǎn)間交互分成三種類型: 1.分布式單個(gè)節(jié)點(diǎn)自己內(nèi)部傳遞的事件。 2.分布式節(jié)點(diǎn)互相之間傳遞的事件。 3.分布式節(jié)點(diǎn)接收除自己之外的傳遞進(jìn)來(lái)的事件。 同時(shí)再加一個(gè)邏輯時(shí)間順序概念。 順序疊加原則:這里整個(gè)系統(tǒng)順序邏輯時(shí)間時(shí)間為T(),各個(gè)節(jié)點(diǎn)順序?yàn)閄() 1.初始發(fā)起節(jié)點(diǎn)為0. 2.節(jié)點(diǎn)內(nèi)傳遞,X 1 3.節(jié)點(diǎn)間傳遞,T 1 4.節(jié)點(diǎn)接收除自己之外的傳遞(T and X) 1
那么如果再定義一個(gè)節(jié)點(diǎn)事件順序,對(duì)節(jié)點(diǎn)A.B.C排序。假定發(fā)生順序A<B<C,在上圖中,事件發(fā)生順序?yàn)椋?/span> C-1(T=1) B-1(T=2) B2(T=3) A1(T=4) A2(T=5) B4(T=6) B5(T=7) C4(T=8) C5(T=9) A4(T=10) B-3(T=4) C-2(T=5) C-3(T=6) A-3(T=7) 問(wèn)題來(lái)了T(4.5.6.7)發(fā)生了重復(fù),那么就用之前說(shuō)的A<B<C原則 以B-4和C-3作比較:A<B<C,那么B-4就理解為發(fā)生在C-3之前。推導(dǎo)B-4-->C-3。B-4發(fā)生在C-3之前。這個(gè)前提是我們已知三個(gè)節(jié)點(diǎn)進(jìn)程發(fā)生的關(guān)系順序,在實(shí)際情況下這個(gè)也有可能是很難進(jìn)行判斷的。所以對(duì)于并發(fā)情況沒(méi)有很好的一致性判斷。 上述圖中節(jié)點(diǎn)A.B.C也可理解為各個(gè)進(jìn)程的順序,在整個(gè)logiccal clock中有這么一個(gè)概念要明確,進(jìn)程間沒(méi)有因果關(guān)系,那就認(rèn)為是并發(fā),沒(méi)有因果關(guān)系對(duì)于系統(tǒng)來(lái)說(shuō)對(duì)事件的順序前后就沒(méi)有那么強(qiáng)烈的需求,前提是要確定確實(shí)沒(méi)有因果關(guān)系,那么分布式系統(tǒng)中就認(rèn)為是正確的。所以歸納下,分布式系統(tǒng)中沒(méi)有因果順序的并發(fā)時(shí)間就不關(guān)注先后順序。 介紹到這里,會(huì)提出一個(gè)疑問(wèn),上面也提到了,那么系統(tǒng)中并發(fā)怎么處理,之前通過(guò)進(jìn)程順序來(lái)排序,但是這種不是真正好的為并發(fā)處理時(shí)間順序,在這個(gè)問(wèn)題上先提出Vector clock,這是在之前l(fā)amport時(shí)間戳的一種改進(jìn)邏輯時(shí)鐘。 在vector clock中對(duì)每一個(gè)事件上加上前一事件的序號(hào),那么可以看到每個(gè)事件記錄是一組向量。比如:(A-2 B-4 C-1),(A-2 B-5 C-4)。 在這種方式中,還要引入分布式系統(tǒng)中讀寫的概念,不單單是事件的傳遞,設(shè)定N為節(jié)點(diǎn)數(shù)量,R為成功讀的節(jié)點(diǎn),W為成功寫的節(jié)點(diǎn)。 當(dāng)W R>N,那么就可以保證一致。 說(shuō)明流程:(w為寫入進(jìn)程,a,b,c,d為節(jié)點(diǎn)) 1.客戶端寫入數(shù)據(jù),提交到服務(wù)端。 2.服務(wù)端創(chuàng)建一個(gè)順序編號(hào),例:(w-a-1) 3.客戶端再請(qǐng)求寫入數(shù)據(jù),生成編號(hào):(w-a-2) 4.多次請(qǐng)求生成,(w-a-2)(w-b-1),(w-a-2)(w-b-1),(w-a-2)(w-d-1) 5.多次請(qǐng)求后,再次讀到(w-a-2),那么認(rèn)為(w-b-1)(w-c-1)(w-d-1)存在沖突,最終通過(guò)一致性解決方案生成(w-a-3)(w-b-1)(w-b-1)(w-d-1)寫入。 Vector clock用來(lái)發(fā)現(xiàn)數(shù)據(jù)的沖突,并配合其他的方式來(lái)解決沖突,現(xiàn)在常用的會(huì)用最后更新原則來(lái)做處理,保持一致性。 這里大致介紹了兩種分布式系統(tǒng)的時(shí)間順序處理,分布式系統(tǒng)因?yàn)槠涮厥庑?,需要各種機(jī)制來(lái)保證一致性和高效率執(zhí)行。 筆者初學(xué)區(qū)塊鏈,很多東西也是慢慢摸索,之所以寫下這些基本概念一方面作為自己學(xué)習(xí)的整理,另一方面也希望更多交流學(xué)習(xí)的機(jī)會(huì)。如有興趣可以直接給我留言或者加筆者微信。
|
|
來(lái)自: 昵稱46341144 > 《區(qū)塊鏈》