如何解決分布式數(shù)據(jù)庫的原子性的問題
當(dāng)我們在支付網(wǎng)絡(luò)中進(jìn)行交易時(shí),我們希望100%地確保交易將完全完成并到達(dá)最終目的地,這樣就不會有人賠錢。為了保證其有效性,每個(gè)數(shù)據(jù)庫事務(wù)都應(yīng)該滿足四個(gè)主要條件,這四個(gè)條件構(gòu)成了所謂的ACID模型。事務(wù)必須是原子的、一致的、隔離的、持久的。
我們想談?wù)勥@些特性之一——原子性。原子性意味著數(shù)據(jù)庫事務(wù)必須遵循“全或無”規(guī)則。原子事務(wù)可以全部執(zhí)行,也可以完全不執(zhí)行,這對于確保數(shù)據(jù)一致性至關(guān)重要。
傳統(tǒng)的解決方案
讓我們從分布式數(shù)據(jù)庫中使用的解決方案開始。
· 單階段提交是實(shí)現(xiàn)原子性最直接的方法。事務(wù)管理器發(fā)送,參與者按照指示進(jìn)行更改。這種模式效率低下,而且存在許多固有的威脅和缺陷。
· 兩階段提交更為全面,因?yàn)槊總€(gè)事務(wù)都分為兩個(gè)階段。首先,事務(wù)管理器查詢每個(gè)參與者,以確定是否應(yīng)該提交事務(wù)。他們創(chuàng)建必要的臨時(shí)條目并投票承諾。如果所有參與者都同意付款,則經(jīng)理將提交請求發(fā)送給他們。
· 三相提交版本將第一階段分為兩部分,具有更高的安全性。經(jīng)理還會從詢問參與者的投票情況開始,但只有在所有參與者都同意的情況下,他才會給出準(zhǔn)備指令。然后,參與者創(chuàng)建條目(分配)并確認(rèn)他們對下一階段的準(zhǔn)備。只有在管理器接收到所有確認(rèn)之后才執(zhí)行最后一個(gè)階段。
單個(gè)DB節(jié)點(diǎn)中的原子性是通過前饋分類器實(shí)現(xiàn)的。當(dāng)用戶請求在數(shù)據(jù)庫中反映一個(gè)事務(wù)時(shí),條目首先是持久的,然后寫入磁盤分類賬。如果系統(tǒng)在進(jìn)程中途失敗,事務(wù)可以在重新啟動時(shí)從磁盤回滾或恢復(fù)。
離線網(wǎng)絡(luò)中的原子事務(wù)
閃電網(wǎng)絡(luò)和其他的離線網(wǎng)絡(luò)使用各種具體的解決方案來防止交易過程中由于某人的錯(cuò)誤而造成的資金損失。
HTLC
最新的解決方案大多使用HTLC(散列timelock契約)。它允許在預(yù)先設(shè)定的時(shí)間鎖前展示原始秘密,然后花錢。讓我們看一下閃電網(wǎng)絡(luò)中的事務(wù)流程流。首先,接收節(jié)點(diǎn)生成秘密并計(jì)算其散列。然后將散列發(fā)送到發(fā)送方節(jié)點(diǎn),作為生成HTLC的基礎(chǔ)。發(fā)送方生成合約并將其發(fā)送到node1,即路由上的下一個(gè)節(jié)點(diǎn),該節(jié)點(diǎn)使用遞減的TImelock創(chuàng)建一個(gè)合契約(使用相同的散列)。這個(gè)新生成的合約由node1通過路由進(jìn)一步發(fā)送到node2, node2再次重復(fù)動作并減少時(shí)間鎖。它一直傳遞到接收方,接收方使用自己在開始時(shí)生成的秘密簽署資金支出(解鎖支付),并從發(fā)送合同的節(jié)點(diǎn)接收資金。
HTLA
Interledger是一個(gè)開放的協(xié)議套件,用于通過各種賬簿進(jìn)行轉(zhuǎn)賬。傳輸可以使用兩種模式之一執(zhí)行:通用模式和原子模式。在通用模式下,原子性的賬間操作由HTLA提供,是HTLC的一種修改。即使區(qū)塊鏈不支持HTLC,也可以使用HTLA。在這種情況下,連接器(負(fù)責(zé)路由的特殊賬間節(jié)點(diǎn))可以使用其他方法復(fù)制HTLC——有條件的支付通道(使用HTLCs)、賬上持有/托管(使用HTLCs)、簡單的支付通道、信任線等,以確保滿足所有合同要求(例如支付時(shí)間、金額、支付解鎖條件)。
PM
Sprite通道是一項(xiàng)建議新版本的付費(fèi)通道以解決與原子性相關(guān)的一些閃電問題的項(xiàng)目。HTLC通過添加預(yù)映像管理器(PM)進(jìn)行了顯著升級。開發(fā)人員希望PM成為HTLC的仲裁者,并將合同到期的決策從任何單個(gè)節(jié)點(diǎn)委托給軟件。Sprite通道應(yīng)該有一個(gè)統(tǒng)一的合同有效期。如果一個(gè)預(yù)圖已經(jīng)及時(shí)發(fā)布,那么所有的爭議都是可以接受的,因?yàn)橐环讲豢赡芗皶r(shí)發(fā)布預(yù)圖,而另一方不可能不發(fā)布。(雙方有效期相同)但是,如果在錯(cuò)誤的時(shí)間發(fā)布了預(yù)圖,那么付款是沒有爭議的。
HTLR
Celer網(wǎng)絡(luò)是通過離線技術(shù)實(shí)現(xiàn)公共區(qū)塊鏈規(guī)模和性能最大化的解決方案。在這里,PM已經(jīng)成為一個(gè)散列的TImelock注冊表(HTLR),主要具有相同的特性。HTLR有兩個(gè)依賴端點(diǎn):isterminate和QueryResult,這兩個(gè)特性最終可以合并。
Notaries
在原子模式下,Interledger使用參與者選擇的公證人來協(xié)調(diào)轉(zhuǎn)賬。通過公證進(jìn)行的支付類似于使用HTLC進(jìn)行的閃電支付。唯一的區(qū)別是,在披露秘密之前,接收方節(jié)點(diǎn)必須將合同移交給公證員進(jìn)行驗(yàn)證,公證員是隨機(jī)從其總登記冊中挑選出來的特殊實(shí)體,必須對支付批準(zhǔn)進(jìn)行投票。
Observers
這個(gè)角色出現(xiàn)在GEO協(xié)議概念中,它提供了一種解決原子性問題的新方法。項(xiàng)目團(tuán)隊(duì)正在創(chuàng)建一個(gè)分散的對等脫鏈網(wǎng)絡(luò),允許交換資產(chǎn)。如果參與者在進(jìn)行事務(wù)時(shí)遇到問題,就會涉及到觀察者。觀察者不能影響事務(wù)方向并更改其中的任何內(nèi)容。它們不用于驗(yàn)證每個(gè)事務(wù),只對用戶的請求進(jìn)行干預(yù)。
GEO對常規(guī)事務(wù)使用類似于兩階段提交的框架。所有的參與者都要簽署一些東西,比如準(zhǔn)備付款,如果每個(gè)人都有簽名清單,付款就會執(zhí)行。如果有一個(gè)參與國說沒有文件,觀察員就在兩個(gè)階段之間采取行動。在這種情況下,觀察者從任何節(jié)點(diǎn)獲取簽名列表,并將其發(fā)送給所有參與者,或者在不可能且事務(wù)在適當(dāng)?shù)臅r(shí)間過期時(shí)什么也不做。
去中心化網(wǎng)絡(luò)原子性的發(fā)展受到新概念的推動,這些新概念各有優(yōu)缺點(diǎn)。
· 散列TImelock合約的優(yōu)點(diǎn)是減少節(jié)點(diǎn)脫機(jī)時(shí)的損失以及發(fā)送方和接收方的安全性。問題是,資金必須凍結(jié)在渠道中,參與者必須經(jīng)常上網(wǎng),以避免損失。
· 對HTLC進(jìn)行了修改,得到了HTLA,可以在不同的注冊中心使用HTLC,解決了節(jié)點(diǎn)脫機(jī)問題。
· 全新的解決方案是observers和notaries。我們在執(zhí)行時(shí)應(yīng)特別小心,因?yàn)閛bservers/notaries的集中可能會損害網(wǎng)絡(luò),但適當(dāng)設(shè)計(jì)的制度可能使其去中心化。